Modification of describe_gateways key so that it is consistent with w… (#2936)

* 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
This commit is contained in:
Rob 2016-09-20 07:44:09 +10:00 committed by Matt Clay
parent 4cb3e87ca4
commit e07c71dd99

View file

@ -44,6 +44,9 @@ options:
required: false required: false
default: present default: present
choices: [ 'present', 'absent' ] 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: extends_documentation_fragment:
- aws - aws
- ec2 - ec2
@ -182,18 +185,24 @@ class Ec2CustomerGatewayManager:
) )
return response return response
def main(): def main():
argument_spec = ec2_argument_spec() argument_spec = ec2_argument_spec()
argument_spec.update( argument_spec.update(
dict( dict(
bgp_asn = dict(required=False, type='int'), bgp_asn=dict(required=False, type='int'),
ip_address = dict(required=True), ip_address=dict(required=True),
name = dict(required=True), name=dict(required=True),
state = dict(default='present', choices=['present', 'absent']), 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: if not HAS_BOTOCORE:
module.fail_json(msg='botocore is required.') module.fail_json(msg='botocore is required.')
@ -208,19 +217,22 @@ def main():
name = module.params.get('name') name = module.params.get('name')
existing = gw_mgr.describe_gateways(module.params['ip_address']) 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) results = dict(changed=False)
if module.params['state'] == 'present': if module.params['state'] == 'present':
if existing['CustomerGateways']: if existing['CustomerGateway']:
results['gateway']=existing results['gateway'] = existing
if existing['CustomerGateways'][0]['Tags']: if existing['CustomerGateway'][0]['Tags']:
tag_array = existing['CustomerGateways'][0]['Tags'] tag_array = existing['CustomerGateway'][0]['Tags']
for key, value in enumerate(tag_array): for key, value in enumerate(tag_array):
if value['Key'] == 'Name': if value['Key'] == 'Name':
current_name = value['Value'] current_name = value['Value']
if current_name != name: if current_name != name:
results['name'] = gw_mgr.tag_cgw_name( results['name'] = gw_mgr.tag_cgw_name(
results['gateway']['CustomerGateways'][0]['CustomerGatewayId'], results['gateway']['CustomerGateway'][0]['CustomerGatewayId'],
module.params['name'], module.params['name'],
) )
results['changed'] = True results['changed'] = True
@ -237,11 +249,11 @@ def main():
results['changed'] = True results['changed'] = True
elif module.params['state'] == 'absent': elif module.params['state'] == 'absent':
if existing['CustomerGateways']: if existing['CustomerGateway']:
results['gateway']=existing results['gateway'] = existing
if not module.check_mode: if not module.check_mode:
results['gateway'] = gw_mgr.ensure_cgw_absent( results['gateway'] = gw_mgr.ensure_cgw_absent(
existing['CustomerGateways'][0]['CustomerGatewayId'] existing['CustomerGateway'][0]['CustomerGatewayId']
) )
results['changed'] = True results['changed'] = True