Handle incorrect data type in list lookup plugin (#35483)

handle incorrect data type in list lookup plugin
Fixes #35481
test to ensure that loops properly handle incorrect datatypes

Signed-off-by: Adam Miller <admiller@redhat.com>
pull/40364/head
Adam Miller 7 years ago committed by GitHub
parent 6a4f3fb729
commit 98a198a777
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -3,6 +3,7 @@
# Make coding more python3-ish # Make coding more python3-ish
from __future__ import (absolute_import, division, print_function) from __future__ import (absolute_import, division, print_function)
__metaclass__ = type __metaclass__ = type
DOCUMENTATION = """ DOCUMENTATION = """
@ -27,10 +28,15 @@ RETURN = """
_list: _list:
description: basically the same as you fed in description: basically the same as you fed in
""" """
import collections
from ansible.plugins.lookup import LookupBase from ansible.plugins.lookup import LookupBase
from ansible.errors import AnsibleError
class LookupModule(LookupBase): class LookupModule(LookupBase):
def run(self, terms, **kwargs): def run(self, terms, **kwargs):
if not isinstance(terms, collections.Sequence):
raise AnsibleError("with_list expects a list")
return terms return terms

@ -202,3 +202,24 @@
that: that:
- "output.results[0]['_ansible_item_label'] == 'looped_var foo_label'" - "output.results[0]['_ansible_item_label'] == 'looped_var foo_label'"
- "output.results[1]['_ansible_item_label'] == 'looped_var bar_label'" - "output.results[1]['_ansible_item_label'] == 'looped_var bar_label'"
# The following test cases are to ensure that we don't have a regression on
# GitHub Issue https://github.com/ansible/ansible/issues/35481
#
# This should execute and not cause a RuntimeError
- debug:
msg: "with_dict passed a list: {{item}}"
with_dict: "{{ a_list }}"
register: with_dict_passed_a_list
ignore_errors: True
- assert:
that:
- with_dict_passed_a_list is failed
- debug:
msg: "with_list passed a dict: {{item}}"
with_list: "{{ a_dict }}"
register: with_list_passed_a_dict
ignore_errors: True
- assert:
that:
- with_list_passed_a_dict is failed

Loading…
Cancel
Save