Skip to content

Commit

Permalink
Fix sequence lookup message and add tests (ansible#74472)
Browse files Browse the repository at this point in the history
* add test for bad kv arg value
* add simple form parsing tests and make error messages the same
* add changelog
  • Loading branch information
Shrews authored Apr 29, 2021
1 parent 74b2add commit f1a5c41
Show file tree
Hide file tree
Showing 3 changed files with 141 additions and 3 deletions.
3 changes: 3 additions & 0 deletions changelogs/fragments/74472-sequence-lookup.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
bugfixes:
- sequence - fix error message so that unrecognized options to the plugin display correctly as a list
and normalize error messages.
6 changes: 3 additions & 3 deletions lib/ansible/plugins/lookup/sequence.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,15 +159,15 @@ def parse_kv_args(self, args):
setattr(self, arg, arg_cooked)
except ValueError:
raise AnsibleError(
"can't parse arg %s=%r as integer"
"can't parse %s=%s as integer"
% (arg, arg_raw)
)
if 'format' in args:
self.format = args.pop("format")
if args:
raise AnsibleError(
"unrecognized arguments to with_sequence: %r"
% args.keys()
"unrecognized arguments to with_sequence: %s"
% list(args.keys())
)

def parse_simple_args(self, term):
Expand Down
135 changes: 135 additions & 0 deletions test/integration/targets/lookup_sequence/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,138 @@
- "ws_z_6 == 'stride_6'"
- "ws_z_host07 == 'host07'"
- "ws_z_host08 == 'host08'"

- block:
- name: EXPECTED FAILURE - test invalid arg
set_fact: "{{ 'x' + item }}={{ item }}"
with_sequence: start=0 junk=3

- fail:
msg: "should not get here"
rescue:
- assert:
that:
- ansible_failed_task.name == "EXPECTED FAILURE - test invalid arg"
- ansible_failed_result.msg in [expected1, expected2]
vars:
expected1: "unrecognized arguments to with_sequence: ['junk']"
expected2: "unrecognized arguments to with_sequence: [u'junk']"

- block:
- name: EXPECTED FAILURE - test bad kv value
set_fact: "{{ 'x' + item }}={{ item }}"
with_sequence: start=A end=3

- fail:
msg: "should not get here"
rescue:
- assert:
that:
- ansible_failed_task.name == "EXPECTED FAILURE - test bad kv value"
- ansible_failed_result.msg == "can't parse start=A as integer"

- block:
- name: EXPECTED FAILURE - test bad simple form start value
set_fact: "{{ 'x' + item }}={{ item }}"
with_sequence: A-4/2

- fail:
msg: "should not get here"
rescue:
- assert:
that:
- ansible_failed_task.name == "EXPECTED FAILURE - test bad simple form start value"
- ansible_failed_result.msg == "can't parse start=A as integer"

- block:
- name: EXPECTED FAILURE - test bad simple form end value
set_fact: "{{ 'x' + item }}={{ item }}"
with_sequence: 1-B/2

- fail:
msg: "should not get here"
rescue:
- assert:
that:
- ansible_failed_task.name == "EXPECTED FAILURE - test bad simple form end value"
- ansible_failed_result.msg == "can't parse end=B as integer"

- block:
- name: EXPECTED FAILURE - test bad simple form stride value
set_fact: "{{ 'x' + item }}={{ item }}"
with_sequence: 1-4/C

- fail:
msg: "should not get here"
rescue:
- assert:
that:
- ansible_failed_task.name == "EXPECTED FAILURE - test bad simple form stride value"
- ansible_failed_result.msg == "can't parse stride=C as integer"

- block:
- name: EXPECTED FAILURE - test no count or end
set_fact: "{{ 'x' + item }}={{ item }}"
with_sequence: start=1

- fail:
msg: "should not get here"
rescue:
- assert:
that:
- ansible_failed_task.name == "EXPECTED FAILURE - test no count or end"
- ansible_failed_result.msg == "must specify count or end in with_sequence"

- block:
- name: EXPECTED FAILURE - test both count and end
set_fact: "{{ 'x' + item }}={{ item }}"
with_sequence: start=1 end=4 count=2

- fail:
msg: "should not get here"
rescue:
- assert:
that:
- ansible_failed_task.name == "EXPECTED FAILURE - test both count and end"
- ansible_failed_result.msg == "can't specify both count and end in with_sequence"

- block:
- name: EXPECTED FAILURE - test count backwards message
set_fact: "{{ 'x' + item }}={{ item }}"
with_sequence: start=4 end=1 stride=2

- fail:
msg: "should not get here"
rescue:
- assert:
that:
- ansible_failed_task.name == "EXPECTED FAILURE - test count backwards message"
- ansible_failed_result.msg == "to count backwards make stride negative"

- block:
- name: EXPECTED FAILURE - test count forward message
set_fact: "{{ 'x' + item }}={{ item }}"
with_sequence: start=1 end=4 stride=-2

- fail:
msg: "should not get here"
rescue:
- assert:
that:
- ansible_failed_task.name == "EXPECTED FAILURE - test count forward message"
- ansible_failed_result.msg == "to count forward don't make stride negative"

- block:
- name: EXPECTED FAILURE - test bad format string message
set_fact: "{{ 'x' + item }}={{ item }}"
with_sequence: start=1 end=4 format=d

- fail:
msg: "should not get here"
rescue:
- assert:
that:
- ansible_failed_task.name == "EXPECTED FAILURE - test bad format string message"
- ansible_failed_result.msg == expected
vars:
expected: "bad formatting string: d"

0 comments on commit f1a5c41

Please sign in to comment.