mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
120 lines
3.1 KiB
ReStructuredText
120 lines
3.1 KiB
ReStructuredText
|
Dictionaries
|
||
|
^^^^^^^^^^^^
|
||
|
|
||
|
You can use the ``dict_kv`` filter to create a single-entry dictionary with ``value | community.general.dict_kv(key)``:
|
||
|
|
||
|
.. code-block:: yaml+jinja
|
||
|
|
||
|
- name: Create a single-entry dictionary
|
||
|
debug:
|
||
|
msg: "{{ myvar | community.general.dict_kv('thatsmyvar') }}"
|
||
|
vars:
|
||
|
myvar: myvalue
|
||
|
|
||
|
- name: Create a list of dictionaries where the 'server' field is taken from a list
|
||
|
debug:
|
||
|
msg: >-
|
||
|
{{ myservers | map('community.general.dict_kv', 'server')
|
||
|
| map('combine', common_config) }}
|
||
|
vars:
|
||
|
common_config:
|
||
|
type: host
|
||
|
database: all
|
||
|
myservers:
|
||
|
- server1
|
||
|
- server2
|
||
|
|
||
|
This produces:
|
||
|
|
||
|
.. code-block:: ansible-output
|
||
|
|
||
|
TASK [Create a single-entry dictionary] **************************************************
|
||
|
ok: [localhost] => {
|
||
|
"msg": {
|
||
|
"thatsmyvar": "myvalue"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
TASK [Create a list of dictionaries where the 'server' field is taken from a list] *******
|
||
|
ok: [localhost] => {
|
||
|
"msg": [
|
||
|
{
|
||
|
"database": "all",
|
||
|
"server": "server1",
|
||
|
"type": "host"
|
||
|
},
|
||
|
{
|
||
|
"database": "all",
|
||
|
"server": "server2",
|
||
|
"type": "host"
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
|
||
|
.. versionadded:: 2.0.0
|
||
|
|
||
|
If you need to convert a list of key-value pairs to a dictionary, you can use the ``dict`` function. Unfortunately, this function cannot be used with ``map``. For this, the ``community.general.dict`` filter can be used:
|
||
|
|
||
|
.. code-block:: yaml+jinja
|
||
|
|
||
|
- name: Create a dictionary with the dict function
|
||
|
debug:
|
||
|
msg: "{{ dict([[1, 2], ['a', 'b']]) }}"
|
||
|
|
||
|
- name: Create a dictionary with the community.general.dict filter
|
||
|
debug:
|
||
|
msg: "{{ [[1, 2], ['a', 'b']] | community.general.dict }}"
|
||
|
|
||
|
- name: Create a list of dictionaries with map and the community.general.dict filter
|
||
|
debug:
|
||
|
msg: >-
|
||
|
{{ values | map('zip', ['k1', 'k2', 'k3'])
|
||
|
| map('map', 'reverse')
|
||
|
| map('community.general.dict') }}
|
||
|
vars:
|
||
|
values:
|
||
|
- - foo
|
||
|
- 23
|
||
|
- a
|
||
|
- - bar
|
||
|
- 42
|
||
|
- b
|
||
|
|
||
|
This produces:
|
||
|
|
||
|
.. code-block:: ansible-output
|
||
|
|
||
|
TASK [Create a dictionary with the dict function] ****************************************
|
||
|
ok: [localhost] => {
|
||
|
"msg": {
|
||
|
"1": 2,
|
||
|
"a": "b"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
TASK [Create a dictionary with the community.general.dict filter] ************************
|
||
|
ok: [localhost] => {
|
||
|
"msg": {
|
||
|
"1": 2,
|
||
|
"a": "b"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
TASK [Create a list of dictionaries with map and the community.general.dict filter] ******
|
||
|
ok: [localhost] => {
|
||
|
"msg": [
|
||
|
{
|
||
|
"k1": "foo",
|
||
|
"k2": 23,
|
||
|
"k3": "a"
|
||
|
},
|
||
|
{
|
||
|
"k1": "bar",
|
||
|
"k2": 42,
|
||
|
"k3": "b"
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
|
||
|
.. versionadded:: 3.0.0
|