diff --git a/plugins/modules/route53.py b/plugins/modules/route53.py index 43b17a44f5b..84a8dc997fb 100644 --- a/plugins/modules/route53.py +++ b/plugins/modules/route53.py @@ -424,6 +424,17 @@ def get_zone_id_by_name(route53, module, zone_name, want_private, want_vpc_id): return None +def get_hosted_zone_nameservers(route53, zone_id): + hosted_zone_name = route53.get_hosted_zone(aws_retry=True, Id=zone_id)['HostedZone']['Name'] + resource_records_sets = _list_record_sets(route53, HostedZoneId=zone_id) + + nameservers_records = list( + filter(lambda record: record['Name'] == hosted_zone_name and record['Type'] == 'NS', resource_records_sets) + )[0]['ResourceRecords'] + + return [ns_record['Value'] for ns_record in nameservers_records] + + def main(): argument_spec = dict( state=dict(type='str', required=True, choices=['absent', 'create', 'delete', 'get', 'present'], aliases=['command']), @@ -565,7 +576,7 @@ def main(): ns = aws_record.get('values', []) else: # Retrieve name servers associated to the zone. - ns = route53.get_hosted_zone(aws_retry=True, Id=zone_id)['DelegationSet']['NameServers'] + ns = get_hosted_zone_nameservers(route53, zone_id) module.exit_json(changed=False, set=aws_record, nameservers=ns) diff --git a/tests/integration/targets/route53/tasks/main.yml b/tests/integration/targets/route53/tasks/main.yml index de332a7ba0c..a770eba2f28 100644 --- a/tests/integration/targets/route53/tasks/main.yml +++ b/tests/integration/targets/route53/tasks/main.yml @@ -52,6 +52,20 @@ - qdn is not failed - qdn is changed + - name: Get A record using 'get' method of route53 module + route53: + state: get + zone: "{{ zone_one }}" + record: "qdn_test.{{ zone_one }}" + type: A + register: get_result + - assert: + that: + - get_result.nameservers|length > 0 + - get_result.set.Name == "qdn_test.{{ zone_one }}" + - get_result.set.ResourceRecords[0].Value == "1.2.3.4" + - get_result.set.Type == "A" + - name: Create same A record using zone non-qualified domain route53: state: present