From ddcc15a60f6a540e0ee5257990fa626a6acf6075 Mon Sep 17 00:00:00 2001 From: Shawn Siefkas Date: Wed, 14 Oct 2015 13:14:33 -0500 Subject: [PATCH] Fixing check mode support for vpc route tables Loop compatibility for dry run exception handling Route table deletion dry run handler Fixing regression in propagating_vgw_ids default value Adjusting truthiness of changed attribute for route manipulation Updating propagating_vgw_ids default in docstring --- cloud/amazon/ec2_vpc_route_table.py | 43 ++++++++++++++++++----------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/cloud/amazon/ec2_vpc_route_table.py b/cloud/amazon/ec2_vpc_route_table.py index f4d27f9580f..1e9de6ec177 100644 --- a/cloud/amazon/ec2_vpc_route_table.py +++ b/cloud/amazon/ec2_vpc_route_table.py @@ -31,6 +31,7 @@ options: propagating_vgw_ids: description: - "Enable route propagation from virtual gateways specified by ID." + default: None required: false route_table_id: description: @@ -323,15 +324,24 @@ def ensure_routes(vpc_conn, route_table, route_specs, propagating_vgw_ids, changed = routes_to_delete or route_specs_to_create if changed: for route_spec in route_specs_to_create: - vpc_conn.create_route(route_table.id, - dry_run=check_mode, - **route_spec) + try: + vpc_conn.create_route(route_table.id, + dry_run=check_mode, + **route_spec) + except EC2ResponseError as e: + if e.error_code == 'DryRunOperation': + pass for route in routes_to_delete: - vpc_conn.delete_route(route_table.id, - route.destination_cidr_block, - dry_run=check_mode) - return {'changed': changed} + try: + vpc_conn.delete_route(route_table.id, + route.destination_cidr_block, + dry_run=check_mode) + except EC2ResponseError as e: + if e.error_code == 'DryRunOperation': + pass + + return {'changed': bool(changed)} def ensure_subnet_association(vpc_conn, vpc_id, route_table_id, subnet_id, @@ -406,7 +416,6 @@ def ensure_route_table_absent(connection, module): route_table_id = module.params.get('route_table_id') tags = module.params.get('tags') vpc_id = module.params.get('vpc_id') - check_mode = module.params.get('check_mode') if lookup == 'tag': if tags is not None: @@ -428,9 +437,12 @@ def ensure_route_table_absent(connection, module): return {'changed': False} try: - connection.delete_route_table(route_table.id, dry_run=check_mode) + connection.delete_route_table(route_table.id, dry_run=module.check_mode) except EC2ResponseError as e: - module.fail_json(msg=e.message) + if e.error_code == 'DryRunOperation': + pass + else: + module.fail_json(msg=e.message) return {'changed': True} @@ -465,12 +477,11 @@ def create_route_spec(connection, routes, vpc_id): def ensure_route_table_present(connection, module): lookup = module.params.get('lookup') - propagating_vgw_ids = module.params.get('propagating_vgw_ids', []) + propagating_vgw_ids = module.params.get('propagating_vgw_ids') route_table_id = module.params.get('route_table_id') subnets = module.params.get('subnets') tags = module.params.get('tags') vpc_id = module.params.get('vpc_id') - check_mode = module.params.get('check_mode') try: routes = create_route_spec(connection, module.params.get('routes'), vpc_id) except AnsibleIgwSearchException as e: @@ -508,7 +519,7 @@ def ensure_route_table_present(connection, module): if routes is not None: try: - result = ensure_routes(connection, route_table, routes, propagating_vgw_ids, check_mode) + result = ensure_routes(connection, route_table, routes, propagating_vgw_ids, module.check_mode) changed = changed or result['changed'] except EC2ResponseError as e: module.fail_json(msg=e.message) @@ -516,12 +527,12 @@ def ensure_route_table_present(connection, module): if propagating_vgw_ids is not None: result = ensure_propagation(connection, route_table, propagating_vgw_ids, - check_mode=check_mode) + check_mode=module.check_mode) changed = changed or result['changed'] if not tags_valid and tags is not None: result = ensure_tags(connection, route_table.id, tags, - add_only=True, check_mode=check_mode) + add_only=True, check_mode=module.check_mode) changed = changed or result['changed'] if subnets: @@ -535,7 +546,7 @@ def ensure_route_table_present(connection, module): ) try: - result = ensure_subnet_associations(connection, vpc_id, route_table, associated_subnets, check_mode) + result = ensure_subnet_associations(connection, vpc_id, route_table, associated_subnets, module.check_mode) changed = changed or result['changed'] except EC2ResponseError as e: raise AnsibleRouteTableException(