Server IP : 85.214.239.14 / Your IP : 3.129.194.30 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /proc/2/root/lib/python3/dist-packages/ansible_collections/ansible/utils/plugins/lookup/ |
Upload File : |
# -*- coding: utf-8 -*- # Copyright 2020 Red Hat # GNU General Public License v3.0+ # (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) """ The to_paths lookup plugin """ from __future__ import absolute_import, division, print_function __metaclass__ = type DOCUMENTATION = """ name: to_paths author: Bradley Thornton (@cidrblock) version_added: "1.0.0" short_description: Flatten a complex object into a dictionary of paths and values description: - Flatten a complex object into a dictionary of paths and values. - Paths are dot delimited whenever possible. - Brackets are used for list indices and keys that contain special characters. - B(to_paths) is also available as a filter plugin. - Using the parameters below- C(lookup('ansible.utils.to_paths', var, prepend, wantlist)) options: var: description: - The value of I(var) will be used. type: raw required: True prepend: description: - Prepend each path entry. Useful to add the initial I(var) name. type: str required: False wantlist: description: - If set to I(True), the return value will always be a list. - This can also be accomplished using C(query) or B(q) instead of C(lookup). - U(https://docs.ansible.com/ansible/latest/plugins/lookup.html) type: bool notes: """ EXAMPLES = r""" #### Simple examples - ansible.builtin.set_fact: a: b: c: d: - 0 - 1 e: - True - False - ansible.builtin.set_fact: paths: "{{ lookup('ansible.utils.to_paths', a) }}" # TASK [ansible.builtin.set_fact] ******************************************** # ok: [nxos101] => changed=false # ansible_facts: # paths: # b.c.d[0]: 0 # b.c.d[1]: 1 # b.c.e[0]: True # b.c.e[1]: False - name: Use prepend to add the initial variable name ansible.builtin.set_fact: paths: "{{ lookup('ansible.utils.to_paths', a, prepend='a') }}" # TASK [Use prepend to add the initial variable name] ************************** # ok: [nxos101] => changed=false # ansible_facts: # paths: # a.b.c.d[0]: 0 # a.b.c.d[1]: 1 # a.b.c.e[0]: True # a.b.c.e[1]: False #### Using a complex object - name: Make an API call ansible.builtin.uri: url: "https://nxos101/restconf/data/openconfig-interfaces:interfaces" headers: accept: "application/yang.data+json" url_password: password url_username: admin validate_certs: False register: result delegate_to: localhost - name: Flatten the complex object ansible.builtin.set_fact: paths: "{{ lookup('ansible.utils.to_paths', result.json) }}" # TASK [Flatten the complex object] ****************************************** # ok: [nxos101] => changed=false # ansible_facts: # paths: # interfaces.interface[0].config.enabled: 'true' # interfaces.interface[0].config.mtu: '1500' # interfaces.interface[0].config.name: eth1/71 # interfaces.interface[0].config.type: ethernetCsmacd # interfaces.interface[0].ethernet.config['auto-negotiate']: 'true' # interfaces.interface[0].ethernet.state.counters['in-crc-errors']: '0' # interfaces.interface[0].ethernet.state.counters['in-fragment-frames']: '0' # interfaces.interface[0].ethernet.state.counters['in-jabber-frames']: '0' # interfaces.interface[0].ethernet.state.counters['in-mac-control-frames']: '0' # <...> """ RETURN = """ _raw: description: - A dictionary of key value pairs. - The key is the path. - The value is the value. """ from ansible.errors import AnsibleLookupError from ansible.plugins.lookup import LookupBase from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_validate import ( AnsibleArgSpecValidator, ) from ansible_collections.ansible.utils.plugins.module_utils.common.to_paths import to_paths class LookupModule(LookupBase): def run(self, terms, variables, **kwargs): if isinstance(terms, list): keys = ["var", "prepend"] terms = dict(zip(keys, terms)) terms.update(kwargs) schema = [v for k, v in globals().items() if k.lower() == "documentation"] aav = AnsibleArgSpecValidator(data=terms, schema=schema[0], name="to_paths") valid, errors, updated_data = aav.validate() if not valid: raise AnsibleLookupError(errors) updated_data["wantlist"] = True res = to_paths(**updated_data) return res