ansible.utils.to_paths – Flatten a complex object into a dictionary of paths and values
Note
This plugin is part of the ansible.utils collection (version 2.0.0).
To install it use: ansible-galaxy collection install ansible.utils
.
To use it in a playbook, specify: ansible.utils.to_paths
.
New in version 1.0.0: of ansible.utils
Synopsis
- 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.
- to_paths is also available as a filter plugin.
- Using the parameters below-
lookup('ansible.utils.to_paths', var, prepend, wantlist
)
Parameters
Parameter | Choices/Defaults | Configuration | Comments |
---|---|---|---|
prepend string | Prepend each path entry. Useful to add the initial var name. | ||
var raw / required | The value of var will be used. | ||
wantlist boolean |
| If set to True, the return value will always be a list. This can also be accomplished using query or q instead of lookup . https://docs.ansible.com/ansible/latest/plugins/lookup.html
|
Examples
#### 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 Values
Common return values are documented here, the following are the fields unique to this lookup:
Key | Returned | Description |
---|---|---|
_raw string | success | A dictionary of key value pairs. The key is the path. The value is the value. |
Authors
- Bradley Thornton (@cidrblock)
© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/ansible/utils/to_paths_lookup.html