@ -49,7 +49,7 @@ options:
- ' A dictionary array of subnets to add of the form: { cidr: ..., az: ... , resource_tags: ... }. Where az is the desired availability zone of the subnet, but it is not required. Tags (i.e.: resource_tags) is also optional and use dictionary form: { " Environment " : " Dev " , " Tier " : " Web " , ...}. All VPC subnets not in this list will be removed as well. As of 1.8, if the subnets parameter is not specified, no existing subnets will be modified. '
- ' A dictionary array of subnets to add of the form: { cidr: ..., az: ... , resource_tags: ... }. Where az is the desired availability zone of the subnet, but it is not required. Tags (i.e.: resource_tags) is also optional and use dictionary form: { " Environment " : " Dev " , " Tier " : " Web " , ...}. All VPC subnets not in this list will be removed as well. As of 1.8, if the subnets parameter is not specified, no existing subnets will be modified. '
required : false
required : false
default : null
default : null
resource_tags : See resource_tags for VPC below . The main difference is subnet tags not specified here will be deleted .
resource_tags : See resource_tags for VPC below . The main difference is subnet tags not specified here will be deleted .
vpc_id :
vpc_id :
description :
description :
- A VPC id to terminate when state = absent
- A VPC id to terminate when state = absent
@ -217,13 +217,13 @@ def routes_match(rt_list=None, rt=None, igw=None):
"""
"""
Check if the route table has all routes as in given list
Check if the route table has all routes as in given list
rt_list : A list if routes provided in the module
rt_list : A list if routes provided in the module
rt : The Remote route table object
rt : The Remote route table object
igw : The internet gateway object for this vpc
igw : The internet gateway object for this vpc
Returns :
Returns :
True when there provided routes and remote routes are the same .
True when there provided routes and remote routes are the same .
False when provided routes and remote routes are different .
False when provided routes and remote routes are different .
"""
"""
@ -276,7 +276,7 @@ def rtb_changed(route_tables=None, vpc_conn=None, module=None, vpc=None, igw=Non
Returns :
Returns :
True when there is difference between the provided routes and remote routes and if subnet associations are different .
True when there is difference between the provided routes and remote routes and if subnet associations are different .
False when both routes and subnet associations matched .
False when both routes and subnet associations matched .
"""
"""
#We add a one for the main table
#We add a one for the main table
rtb_len = len ( route_tables ) + 1
rtb_len = len ( route_tables ) + 1
@ -408,35 +408,36 @@ def create_vpc(module, vpc_conn):
subnet_tags_current = True
subnet_tags_current = True
new_subnet_tags = subnet . get ( ' resource_tags ' , None )
new_subnet_tags = subnet . get ( ' resource_tags ' , None )
subnet_tags_delete = [ ]
subnet_tags_delete = [ ]
for csn in current_subnets :
for csn in current_subnets :
if subnet [ ' cidr ' ] == csn . cidr_block :
if subnet [ ' cidr ' ] == csn . cidr_block :
add_subnet = False
add_subnet = False
# Check if AWS subnet tags are in playbook subnet tags
# Check if AWS subnet tags are in playbook subnet tags
subnet_tags_extra = ( set ( csn . tags . items ( ) ) . issubset ( set ( new_subnet_tags . items ( ) ) ) )
existing_tags_subset_of_new_tags = ( set ( csn . tags . items ( ) ) . issubset ( set ( new_subnet_tags . items ( ) ) ) )
# Check if subnet tags in playbook are in AWS subnet tags
# Check if subnet tags in playbook are in AWS subnet tags
subnet_tags_current = ( set ( new_subnet_tags . items ( ) ) . issubset ( set ( csn . tags . items ( ) ) ) )
new_tags_subset_of_existing_tags = ( set ( new_subnet_tags . items ( ) ) . issubset ( set ( csn . tags . items ( ) ) ) )
if subnet_tags_extra is False :
try :
if existing_tags_subset_of_new_tags is False :
for item in csn . tags . items ( ) :
try :
if item not in new_subnet_tags . items ( ) :
for item in csn . tags . items ( ) :
subnet_tags_delete . append ( item )
if item not in new_subnet_tags . items ( ) :
subnet_tags_delete . append ( item )
subnet_tags_delete = [ key [ 0 ] for key in subnet_tags_delete ]
delete_subnet_tag = vpc_conn . delete_tags ( csn . id , subnet_tags_delete )
subnet_tags_delete = [ key [ 0 ] for key in subnet_tags_delete ]
changed = True
delete_subnet_tag = vpc_conn . delete_tags ( csn . id , subnet_tags_delete )
except EC2ResponseError , e :
changed = True
module . fail_json ( msg = ' Unable to delete resource tag, error {0} ' . format ( e ) )
except EC2ResponseError , e :
# Add new subnet tags if not current
module . fail_json ( msg = ' Unable to delete resource tag, error {0} ' . format ( e ) )
subnet_tags_current = ( set ( new_subnet_tags . items ( ) ) . issubset ( set ( csn . tags . items ( ) ) ) )
# Add new subnet tags if not current
if subnet_tags_current is not True :
try :
if new_tags_subset_of_existing_tags is False :
changed = True
try :
create_subnet_tag = vpc_conn . create_tags ( csn . id , new_subnet_tags )
changed = True
create_subnet_tag = vpc_conn . create_tags ( csn . id , new_subnet_tags )
except EC2ResponseError , e :
module . fail_json ( msg = ' Unable to create resource tag, error: {0} ' . format ( e ) )
except EC2ResponseError , e :
module . fail_json ( msg = ' Unable to create resource tag, error: {0} ' . format ( e ) )
if add_subnet :
if add_subnet :
try :
try :