mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Adding ability to filter AWS Route 53 private hosted zones by attached VPC
This commit is contained in:
parent
098126807d
commit
f1ab33ad7b
1 changed files with 30 additions and 2 deletions
|
@ -138,6 +138,15 @@ options:
|
||||||
required: false
|
required: false
|
||||||
default: null
|
default: null
|
||||||
version_added: "2.0"
|
version_added: "2.0"
|
||||||
|
vpc_id:
|
||||||
|
description:
|
||||||
|
- When used in conjunction with private_zone: true, this will only modify
|
||||||
|
records in the private hosted zone attached to this VPC. This allows you
|
||||||
|
to have multiple private hosted zones, all with the same name, attached
|
||||||
|
to different VPCs.
|
||||||
|
required: false
|
||||||
|
default: null
|
||||||
|
version_added: "2.0"
|
||||||
author: "Bruce Pennypacker (@bpennypacker)"
|
author: "Bruce Pennypacker (@bpennypacker)"
|
||||||
extends_documentation_fragment: aws
|
extends_documentation_fragment: aws
|
||||||
'''
|
'''
|
||||||
|
@ -238,14 +247,26 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
HAS_BOTO = False
|
HAS_BOTO = False
|
||||||
|
|
||||||
def get_zone_by_name(conn, module, zone_name, want_private, zone_id):
|
def get_zone_by_name(conn, module, zone_name, want_private, zone_id, want_vpc_id):
|
||||||
"""Finds a zone by name or zone_id"""
|
"""Finds a zone by name or zone_id"""
|
||||||
for zone in conn.get_zones():
|
for zone in conn.get_zones():
|
||||||
# only save this zone id if the private status of the zone matches
|
# only save this zone id if the private status of the zone matches
|
||||||
# the private_zone_in boolean specified in the params
|
# the private_zone_in boolean specified in the params
|
||||||
private_zone = module.boolean(zone.config.get('PrivateZone', False))
|
private_zone = module.boolean(zone.config.get('PrivateZone', False))
|
||||||
if private_zone == want_private and ((zone.name == zone_name and zone_id == None) or zone.id.replace('/hostedzone/', '') == zone_id):
|
if private_zone == want_private and ((zone.name == zone_name and zone_id == None) or zone.id.replace('/hostedzone/', '') == zone_id):
|
||||||
return zone
|
if want_vpc_id:
|
||||||
|
# NOTE: These details aren't available in other boto methods, hence the necessary
|
||||||
|
# extra API call
|
||||||
|
zone_details = conn.get_hosted_zone(zone.id)['GetHostedZoneResponse']
|
||||||
|
# this is to deal with this boto bug: https://github.com/boto/boto/pull/2882
|
||||||
|
if isinstance(zone_details['VPCs'], dict):
|
||||||
|
if zone_details['VPCs']['VPC']['VPCId'] == want_vpc_id:
|
||||||
|
return zone
|
||||||
|
else: # Forward compatibility for when boto fixes that bug
|
||||||
|
if want_vpc_id in [v['VPCId'] for v in zone_details['VPCs']]:
|
||||||
|
return zone
|
||||||
|
else:
|
||||||
|
return zone
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
@ -283,6 +304,7 @@ def main():
|
||||||
region = dict(required=False),
|
region = dict(required=False),
|
||||||
health_check = dict(required=False),
|
health_check = dict(required=False),
|
||||||
failover = dict(required=False),
|
failover = dict(required=False),
|
||||||
|
vpc_id = dict(required=False),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
module = AnsibleModule(argument_spec=argument_spec)
|
module = AnsibleModule(argument_spec=argument_spec)
|
||||||
|
@ -305,6 +327,7 @@ def main():
|
||||||
region_in = module.params.get('region')
|
region_in = module.params.get('region')
|
||||||
health_check_in = module.params.get('health_check')
|
health_check_in = module.params.get('health_check')
|
||||||
failover_in = module.params.get('failover')
|
failover_in = module.params.get('failover')
|
||||||
|
vpc_id_in = module.params.get('vpc_id')
|
||||||
|
|
||||||
region, ec2_url, aws_connect_kwargs = get_aws_connection_info(module)
|
region, ec2_url, aws_connect_kwargs = get_aws_connection_info(module)
|
||||||
|
|
||||||
|
@ -331,6 +354,11 @@ def main():
|
||||||
elif not alias_hosted_zone_id_in:
|
elif not alias_hosted_zone_id_in:
|
||||||
module.fail_json(msg = "parameter 'alias_hosted_zone_id' required for alias create/delete")
|
module.fail_json(msg = "parameter 'alias_hosted_zone_id' required for alias create/delete")
|
||||||
|
|
||||||
|
if vpc_id_in and not private_zone_in:
|
||||||
|
module.fail_json(msg="parameter 'private_zone' must be true when specifying parameter"
|
||||||
|
" 'vpc_id'")
|
||||||
|
|
||||||
|
|
||||||
# connect to the route53 endpoint
|
# connect to the route53 endpoint
|
||||||
try:
|
try:
|
||||||
conn = Route53Connection(**aws_connect_kwargs)
|
conn = Route53Connection(**aws_connect_kwargs)
|
||||||
|
|
Loading…
Add table
Reference in a new issue