diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 16:04:21 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 16:04:21 +0000 |
commit | 8a754e0858d922e955e71b253c139e071ecec432 (patch) | |
tree | 527d16e74bfd1840c85efd675fdecad056c54107 /lib/ansible/plugins/lookup/dict.py | |
parent | Initial commit. (diff) | |
download | ansible-core-upstream.tar.xz ansible-core-upstream.zip |
Adding upstream version 2.14.3.upstream/2.14.3upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'lib/ansible/plugins/lookup/dict.py')
-rw-r--r-- | lib/ansible/plugins/lookup/dict.py | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/lib/ansible/plugins/lookup/dict.py b/lib/ansible/plugins/lookup/dict.py new file mode 100644 index 0000000..af9a081 --- /dev/null +++ b/lib/ansible/plugins/lookup/dict.py @@ -0,0 +1,77 @@ +# (c) 2014, Kent R. Spillner <kspillner@acm.org> +# (c) 2017 Ansible Project +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +DOCUMENTATION = """ + name: dict + version_added: "1.5" + short_description: returns key/value pair items from dictionaries + description: + - Takes dictionaries as input and returns a list with each item in the list being a dictionary with 'key' and 'value' as + keys to the previous dictionary's structure. + options: + _terms: + description: + - A list of dictionaries + required: True +""" + +EXAMPLES = """ +vars: + users: + alice: + name: Alice Appleworth + telephone: 123-456-7890 + bob: + name: Bob Bananarama + telephone: 987-654-3210 +tasks: + # with predefined vars + - name: Print phone records + ansible.builtin.debug: + msg: "User {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})" + loop: "{{ lookup('ansible.builtin.dict', users) }}" + # with inline dictionary + - name: show dictionary + ansible.builtin.debug: + msg: "{{item.key}}: {{item.value}}" + with_dict: {a: 1, b: 2, c: 3} + # Items from loop can be used in when: statements + - name: set_fact when alice in key + ansible.builtin.set_fact: + alice_exists: true + loop: "{{ lookup('ansible.builtin.dict', users) }}" + when: "'alice' in item.key" +""" + +RETURN = """ + _list: + description: + - list of composed dictonaries with key and value + type: list +""" + +from collections.abc import Mapping + +from ansible.errors import AnsibleError +from ansible.plugins.lookup import LookupBase + + +class LookupModule(LookupBase): + + def run(self, terms, variables=None, **kwargs): + + # NOTE: can remove if with_ is removed + if not isinstance(terms, list): + terms = [terms] + + results = [] + for term in terms: + # Expect any type of Mapping, notably hostvars + if not isinstance(term, Mapping): + raise AnsibleError("with_dict expects a dict") + + results.extend(self._flatten_hash_to_list(term)) + return results |