From e07c71dd996f2632dbcc3911f16ea73c8e21907c Mon Sep 17 00:00:00 2001 From: Rob Date: Tue, 20 Sep 2016 07:44:09 +1000 Subject: [PATCH] =?UTF-8?q?Modification=20of=20describe=5Fgateways=20key?= =?UTF-8?q?=20so=20that=20it=20is=20consistent=20with=20w=E2=80=A6=20(#293?= =?UTF-8?q?6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Modification of describe_gateways key so that it is consistent with what create_gateway returns. Also added AnsibleModule spec to require bgp_ip on state=present as defined in the doc * Don't remove CustomerGateways key to preserve backward compatibility --- .../cloud/amazon/ec2_customer_gateway.py | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/lib/ansible/modules/extras/cloud/amazon/ec2_customer_gateway.py b/lib/ansible/modules/extras/cloud/amazon/ec2_customer_gateway.py index 072fec71178..871513d9418 100644 --- a/lib/ansible/modules/extras/cloud/amazon/ec2_customer_gateway.py +++ b/lib/ansible/modules/extras/cloud/amazon/ec2_customer_gateway.py @@ -44,6 +44,9 @@ options: required: false default: present choices: [ 'present', 'absent' ] +notes: + - Return values contain customer_gateway and customer_gateways keys which are identical dicts. You should use + customer_gateway. See U(https://github.com/ansible/ansible-modules-extras/issues/2773) for details. extends_documentation_fragment: - aws - ec2 @@ -182,18 +185,24 @@ class Ec2CustomerGatewayManager: ) return response + def main(): argument_spec = ec2_argument_spec() argument_spec.update( dict( - bgp_asn = dict(required=False, type='int'), - ip_address = dict(required=True), - name = dict(required=True), - state = dict(default='present', choices=['present', 'absent']), + bgp_asn=dict(required=False, type='int'), + ip_address=dict(required=True), + name=dict(required=True), + state=dict(default='present', choices=['present', 'absent']), ) ) - module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) + module = AnsibleModule(argument_spec=argument_spec, + supports_check_mode=True, + required_if=[ + ('state', 'present', ['bgp_arn']) + ] + ) if not HAS_BOTOCORE: module.fail_json(msg='botocore is required.') @@ -208,19 +217,22 @@ def main(): name = module.params.get('name') existing = gw_mgr.describe_gateways(module.params['ip_address']) + # describe_gateways returns a key of CustomerGateways where as create_gateway returns a + # key of CustomerGateway. For consistency, change it here + existing['CustomerGateway'] = existing['CustomerGateways'] results = dict(changed=False) if module.params['state'] == 'present': - if existing['CustomerGateways']: - results['gateway']=existing - if existing['CustomerGateways'][0]['Tags']: - tag_array = existing['CustomerGateways'][0]['Tags'] + if existing['CustomerGateway']: + results['gateway'] = existing + if existing['CustomerGateway'][0]['Tags']: + tag_array = existing['CustomerGateway'][0]['Tags'] for key, value in enumerate(tag_array): if value['Key'] == 'Name': current_name = value['Value'] if current_name != name: results['name'] = gw_mgr.tag_cgw_name( - results['gateway']['CustomerGateways'][0]['CustomerGatewayId'], + results['gateway']['CustomerGateway'][0]['CustomerGatewayId'], module.params['name'], ) results['changed'] = True @@ -237,11 +249,11 @@ def main(): results['changed'] = True elif module.params['state'] == 'absent': - if existing['CustomerGateways']: - results['gateway']=existing + if existing['CustomerGateway']: + results['gateway'] = existing if not module.check_mode: results['gateway'] = gw_mgr.ensure_cgw_absent( - existing['CustomerGateways'][0]['CustomerGatewayId'] + existing['CustomerGateway'][0]['CustomerGatewayId'] ) results['changed'] = True