Add support for intra-region VPC peering (#34036)

* [ec2_vpc_peer] Add support for intra-region VPC peering
This commit is contained in:
Brian Lamar 2017-12-19 16:05:14 -05:00 committed by Sloane Hertel
parent 513c75079e
commit fcc79de246

View file

@ -27,6 +27,11 @@ options:
description: description:
- Peering connection id. - Peering connection id.
required: false required: false
peer_region:
description:
- Region of the accepting VPC.
required: false
version_added: '2.5'
peer_vpc_id: peer_vpc_id:
description: description:
- VPC id of the accepting VPC. - VPC id of the accepting VPC.
@ -113,6 +118,27 @@ EXAMPLES = '''
state: accept state: accept
register: vpc_peer register: vpc_peer
# Complete example to create and accept an intra-region peering connection.
- name: Create intra-region VPC peering Connection
ec2_vpc_peer:
region: us-east-1
vpc_id: vpc-12345678
peer_vpc_id: vpc-87654321
peer_vpc_region: us-west-2
state: present
tags:
Name: Peering connection for us-east-1 VPC to us-west-2 VPC
CostCode: CC1234
Project: phoenix
register: vpc_peer
- name: Accept peering connection from peer region
ec2_vpc_peer:
region: us-west-2
peering_id: "{{ vpc_peer.peering_id }}"
state: accept
register: vpc_peer
# Complete example to create and reject a local peering connection. # Complete example to create and reject a local peering connection.
- name: Create local account VPC peering Connection - name: Create local account VPC peering Connection
ec2_vpc_peer: ec2_vpc_peer:
@ -191,6 +217,8 @@ try:
except ImportError: except ImportError:
pass # caught by imported HAS_BOTO3 pass # caught by imported HAS_BOTO3
import distutils.version
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.ec2 import boto3_conn, ec2_argument_spec, get_aws_connection_info, HAS_BOTO3 from ansible.module_utils.ec2 import boto3_conn, ec2_argument_spec, get_aws_connection_info, HAS_BOTO3
@ -247,6 +275,10 @@ def create_peer_connection(client, module):
params = dict() params = dict()
params['VpcId'] = module.params.get('vpc_id') params['VpcId'] = module.params.get('vpc_id')
params['PeerVpcId'] = module.params.get('peer_vpc_id') params['PeerVpcId'] = module.params.get('peer_vpc_id')
if module.params.get('peer_region'):
if distutils.version.StrictVersion(botocore.__version__) < distutils.version.StrictVersion('1.8.6'):
module.fail_json(msg="specifying peer_region parameter requires botocore >= 1.8.6")
params['PeerRegion'] = module.params.get('peer_region')
if module.params.get('peer_owner_id'): if module.params.get('peer_owner_id'):
params['PeerOwnerId'] = str(module.params.get('peer_owner_id')) params['PeerOwnerId'] = str(module.params.get('peer_owner_id'))
params['DryRun'] = module.check_mode params['DryRun'] = module.check_mode
@ -272,10 +304,11 @@ def create_peer_connection(client, module):
def remove_peer_connection(client, module): def remove_peer_connection(client, module):
pcx_id = module.params.get('peering_id') pcx_id = module.params.get('peering_id')
params = dict()
if not pcx_id: if not pcx_id:
params = dict()
params['VpcId'] = module.params.get('vpc_id') params['VpcId'] = module.params.get('vpc_id')
params['PeerVpcId'] = module.params.get('peer_vpc_id') params['PeerVpcId'] = module.params.get('peer_vpc_id')
params['PeerRegion'] = module.params.get('peer_region')
if module.params.get('peer_owner_id'): if module.params.get('peer_owner_id'):
params['PeerOwnerId'] = str(module.params.get('peer_owner_id')) params['PeerOwnerId'] = str(module.params.get('peer_owner_id'))
params['DryRun'] = module.check_mode params['DryRun'] = module.check_mode
@ -284,7 +317,9 @@ def remove_peer_connection(client, module):
module.exit_json(changed=False) module.exit_json(changed=False)
else: else:
pcx_id = peering_conns['VpcPeeringConnections'][0]['VpcPeeringConnectionId'] pcx_id = peering_conns['VpcPeeringConnections'][0]['VpcPeeringConnectionId']
try: try:
params = dict()
params['VpcPeeringConnectionId'] = pcx_id params['VpcPeeringConnectionId'] = pcx_id
client.delete_vpc_peering_connection(**params) client.delete_vpc_peering_connection(**params)
module.exit_json(changed=True) module.exit_json(changed=True)
@ -356,6 +391,7 @@ def main():
dict( dict(
vpc_id=dict(), vpc_id=dict(),
peer_vpc_id=dict(), peer_vpc_id=dict(),
peer_region=dict(),
peering_id=dict(), peering_id=dict(),
peer_owner_id=dict(), peer_owner_id=dict(),
tags=dict(required=False, type='dict'), tags=dict(required=False, type='dict'),