Skip to content

Commit

Permalink
route53_info - fix max_items when not paginating (#1384)
Browse files Browse the repository at this point in the history
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 <None>
(cherry picked from commit 569fff4)
  • Loading branch information
mcoot authored and patchback[bot] committed Aug 2, 2022
1 parent 5bcc53b commit 8f9470f
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 8 deletions.
2 changes: 2 additions & 0 deletions changelogs/fragments/1384-route53_info-fix-max-items.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
bugfixes:
- route53_info - fix ``max_items`` parameter when used with non-paginated commands (https://github.com/ansible-collections/community.aws/issues/1383).
10 changes: 2 additions & 8 deletions plugins/modules/route53_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down Expand Up @@ -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)

Expand Down
16 changes: 16 additions & 0 deletions tests/integration/targets/route53/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 8f9470f

Please sign in to comment.