Allow VPC igw to be specified by gateway_id: "igw"
This commit is contained in:
parent
cb8f83a6c7
commit
db76089eaa
1 changed files with 35 additions and 1 deletions
|
@ -45,7 +45,9 @@ options:
|
||||||
description:
|
description:
|
||||||
- List of routes in the route table. Routes are specified'''
|
- List of routes in the route table. Routes are specified'''
|
||||||
''' as dicts containing the keys 'dest' and one of 'gateway_id','''
|
''' as dicts containing the keys 'dest' and one of 'gateway_id','''
|
||||||
''' 'instance_id', 'interface_id', or 'vpc_peering_connection'.
|
''' 'instance_id', 'interface_id', or 'vpc_peering_connection'. '''
|
||||||
|
''' If 'gateway_id' is specified, you can refer to the VPC's IGW '''
|
||||||
|
''' by using the value "igw".
|
||||||
required: true
|
required: true
|
||||||
aliases: []
|
aliases: []
|
||||||
subnets:
|
subnets:
|
||||||
|
@ -168,6 +170,10 @@ class AnsibleRouteTableException(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class AnsibleIgwSearchException(AnsibleRouteTableException):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class AnsibleTagCreationException(AnsibleRouteTableException):
|
class AnsibleTagCreationException(AnsibleRouteTableException):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -236,6 +242,29 @@ def find_subnets(vpc_conn, vpc_id, identified_subnets):
|
||||||
return subnets_by_id + subnets_by_cidr + subnets_by_name
|
return subnets_by_id + subnets_by_cidr + subnets_by_name
|
||||||
|
|
||||||
|
|
||||||
|
def find_igw(vpc_conn, vpc_id):
|
||||||
|
"""
|
||||||
|
Finds the Internet gateway for the given VPC ID.
|
||||||
|
|
||||||
|
Raises an AnsibleIgwSearchException if either no IGW can be found, or more
|
||||||
|
than one found for the given VPC.
|
||||||
|
|
||||||
|
Note that this function is duplicated in other ec2 modules, and should
|
||||||
|
potentially be moved into potentially be moved into a shared module_utils
|
||||||
|
"""
|
||||||
|
igw = vpc_conn.get_all_internet_gateways(
|
||||||
|
filters={'attachment.vpc-id': vpc_id})
|
||||||
|
|
||||||
|
if not igw:
|
||||||
|
return AnsibleIgwSearchException('No IGW found for VPC "{0}"'.
|
||||||
|
format(vpc_id))
|
||||||
|
elif len(igw) == 1:
|
||||||
|
return igw[0].id
|
||||||
|
else:
|
||||||
|
raise AnsibleIgwSearchException('Multiple IGWs found for VPC "{0}"'.
|
||||||
|
format(vpc_id))
|
||||||
|
|
||||||
|
|
||||||
def get_resource_tags(vpc_conn, resource_id):
|
def get_resource_tags(vpc_conn, resource_id):
|
||||||
return dict((t.name, t.value) for t in
|
return dict((t.name, t.value) for t in
|
||||||
vpc_conn.get_all_tags(filters={'resource-id': resource_id}))
|
vpc_conn.get_all_tags(filters={'resource-id': resource_id}))
|
||||||
|
@ -525,6 +554,11 @@ def main():
|
||||||
for route_spec in routes:
|
for route_spec in routes:
|
||||||
rename_key(route_spec, 'dest', 'destination_cidr_block')
|
rename_key(route_spec, 'dest', 'destination_cidr_block')
|
||||||
|
|
||||||
|
if 'gateway_id' in route_spec and route_spec['gateway_id'] and \
|
||||||
|
route_spec['gateway_id'].lower() == 'igw':
|
||||||
|
igw = find_igw(vpc_conn, vpc_id)
|
||||||
|
route_spec['gateway_id'] = igw
|
||||||
|
|
||||||
subnets = module.params.get('subnets')
|
subnets = module.params.get('subnets')
|
||||||
state = module.params.get('state', 'present')
|
state = module.params.get('state', 'present')
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue