Refactored subnet tagging to account for AWS delays; added 'tags' attribute to 'subnet' node in the returned json.
This commit is contained in:
parent
847680a74a
commit
e00d365630
1 changed files with 14 additions and 5 deletions
|
@ -280,10 +280,18 @@ def create_vpc(module, vpc_conn):
|
||||||
add_subnet = False
|
add_subnet = False
|
||||||
if add_subnet:
|
if add_subnet:
|
||||||
try:
|
try:
|
||||||
created_subnet = vpc_conn.create_subnet(vpc.id, subnet['cidr'], subnet.get('az', None))
|
new_subnet = vpc_conn.create_subnet(vpc.id, subnet['cidr'], subnet.get('az', None))
|
||||||
subnet_tags = subnet.get('tags', None)
|
new_subnet_tags = subnet.get('tags', None)
|
||||||
if subnet_tags:
|
if new_subnet_tags:
|
||||||
vpc_conn.create_tags(created_subnet.id, subnet_tags)
|
# Sometimes AWS takes its time to create a subnet and so using new subnets's id
|
||||||
|
# to create tags results in exception.
|
||||||
|
# boto doesn't seem to refresh 'state' of the newly created subnet, i.e.: it's always 'pending'
|
||||||
|
# so i resorted to polling vpc_conn.get_all_subnets with the id of the newly added subnet
|
||||||
|
while len(vpc_conn.get_all_subnets(filters={ 'subnet-id': new_subnet.id })) == 0:
|
||||||
|
time.sleep(0.1)
|
||||||
|
|
||||||
|
vpc_conn.create_tags(new_subnet.id, new_subnet_tags)
|
||||||
|
|
||||||
changed = True
|
changed = True
|
||||||
except EC2ResponseError, e:
|
except EC2ResponseError, e:
|
||||||
module.fail_json(msg='Unable to create subnet {0}, error: {1}'.format(subnet['cidr'], e))
|
module.fail_json(msg='Unable to create subnet {0}, error: {1}'.format(subnet['cidr'], e))
|
||||||
|
@ -411,14 +419,15 @@ def create_vpc(module, vpc_conn):
|
||||||
created_vpc_id = vpc.id
|
created_vpc_id = vpc.id
|
||||||
returned_subnets = []
|
returned_subnets = []
|
||||||
current_subnets = vpc_conn.get_all_subnets(filters={ 'vpc_id': vpc.id })
|
current_subnets = vpc_conn.get_all_subnets(filters={ 'vpc_id': vpc.id })
|
||||||
|
|
||||||
for sn in current_subnets:
|
for sn in current_subnets:
|
||||||
returned_subnets.append({
|
returned_subnets.append({
|
||||||
|
'tags': dict((t.name, t.value) for t in vpc_conn.get_all_tags(filters={'resource-id': sn.id})),
|
||||||
'cidr': sn.cidr_block,
|
'cidr': sn.cidr_block,
|
||||||
'az': sn.availability_zone,
|
'az': sn.availability_zone,
|
||||||
'id': sn.id,
|
'id': sn.id,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
return (vpc_dict, created_vpc_id, returned_subnets, changed)
|
return (vpc_dict, created_vpc_id, returned_subnets, changed)
|
||||||
|
|
||||||
def terminate_vpc(module, vpc_conn, vpc_id=None, cidr=None):
|
def terminate_vpc(module, vpc_conn, vpc_id=None, cidr=None):
|
||||||
|
|
Loading…
Reference in a new issue