From a86d053d5bdd3ecd90e312b9b234191198437dd2 Mon Sep 17 00:00:00 2001 From: Joseph Spearritt Date: Wed, 3 Aug 2022 00:03:16 +1000 Subject: [PATCH] route53_info - fix max_items when not paginating (#1384) route53_info - fix max_items when not paginating SUMMARY As reported in #1383, the route53_info module presently fails to run with a boto3 parameter validation error if run with particular combinations of parameters, specifically: query: hosted_zone parameter with hosted_zone_method: list_by_name query: reusable_delegation_set without specifying a delegation_set_id I believe this is a regression introduced in #813 ISSUE TYPE Bugfix Pull Request COMPONENT NAME route53_info ADDITIONAL INFORMATION Some further information is described in the issue but tl;dr the prior PR converted all cases in the module where params['MaxItems'] was set to instead pass a params['PaginationConfig'], however this should only be done if a boto3 paginator is actually being used, and will fail (as noted above, due to parameter validation) if called with a regular boto3 client method. Hence this PR switches back to directly setting MaxItems on the methods that do not use a paginator. Reviewed-by: Mark Chappell This commit was initially merged in https://github.com/ansible-collections/community.aws See: https://github.com/ansible-collections/community.aws/commit/569fff4c802b226277dfee882d253821a1e1a5d9 --- plugins/modules/route53_info.py | 10 ++-------- tests/integration/targets/route53/tasks/main.yml | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/plugins/modules/route53_info.py b/plugins/modules/route53_info.py index 68b0bb54b73..a331fae9319 100644 --- a/plugins/modules/route53_info.py +++ b/plugins/modules/route53_info.py @@ -519,11 +519,8 @@ def reusable_delegation_set_details(): params = dict() if not module.params.get('delegation_set_id'): - # Set PaginationConfig with max_items if module.params.get('max_items'): - params['PaginationConfig'] = dict( - MaxItems=module.params.get('max_items') - ) + params['MaxItems'] = str(module.params.get('max_items')) if module.params.get('next_marker'): params['Marker'] = module.params.get('next_marker') @@ -581,11 +578,8 @@ def list_hosted_zones_by_name(): if module.params.get('dns_name'): params['DNSName'] = module.params.get('dns_name') - # Set PaginationConfig with max_items if module.params.get('max_items'): - params['PaginationConfig'] = dict( - MaxItems=module.params.get('max_items') - ) + params['MaxItems'] = str(module.params.get('max_items')) return client.list_hosted_zones_by_name(**params) diff --git a/tests/integration/targets/route53/tasks/main.yml b/tests/integration/targets/route53/tasks/main.yml index 62a82f44a31..f453a879e7c 100644 --- a/tests/integration/targets/route53/tasks/main.yml +++ b/tests/integration/targets/route53/tasks/main.yml @@ -79,6 +79,22 @@ - hosted_zones.HostedZone.ResourceRecordSetCount == 2 - hosted_zones.HostedZone.Config.PrivateZone +# Needs CI permissions updated +# # Ensure that we can use the non-paginated list_by_name method with max_items +# - name: Get zone 1 details only +# route53_info: +# query: hosted_zone +# hosted_zone_method: list_by_name +# dns_name: '{{ zone_one }}' +# max_items: 1 +# register: list_by_name_result +# +# - name: Assert that we found exactly one zone when querying by name +# assert: +# that: +# - list_by_name_result.HostedZones | length == 1 +# - list_by_name_result.HostedZones[0].Name == '{{ zone_one }}' + - name: 'Create A record using zone fqdn' route53: state: present