Creați o listă de dispozitive și interfețe
- set_fact:
dev_ifc: „{{ dev_ifc|d([]) + [{'dev': item.1, 'ifc': item.0.key}] }}"
cu_subelemente:
- „{{ device_vlans|dict2items }}”
- valoare.interfeţe
dă
dev_ifc:
- {dev: GigabitEthernet1/1, ifc: '1'}
- {dev: GigabitEthernet1/2, ifc: '1'}
- {dev: GigabitEthernet1/3, ifc: '1'}
- {dev: GigabitEthernet1/2, ifc: '20'}
- {dev: GigabitEthernet1/3, ifc: '30'}
Apoi, grupați lista după dispozitive și creați dicționarul
- set_fact:
device_vlans: „{{ dict(key|zip(val)) }}”
vars:
arr: "{{ dev_ifc|groupby('dev') }}"
cheie: "{{ arr|hartă('primul')|listă }}"
val: „{{ arr|hartă('ultimul')|
map('json_query', '[].ifc')|
map('community.general.dict_kv', 'interfeţe')|
lista }}"
dă
device_vlans:
GigabitEthernet1/1:
interfețe: ['1']
GigabitEthernet1/2:
interfețe: ['1', '20']
GigabitEthernet1/3:
interfețe: ['1', '30']
Este posibil să evitați iterația într-o sarcină. În schimb, puneți iterația în Jinja2. De exemplu, puneți declarațiile de mai jos ca adecvat
dev_ifc_str: |-
{% pentru ifc în device_vlans.keys() %}
{% pentru dev în device_vlans[ifc]['interfaces'] %}
- {dev: {{ dev }}, ifc: {{ ifc }}}
{% endfor %}
{% endfor %}
dev_ifc: „{{ dev_ifc_str|from_yaml }}”
device_vlans2: „{{ dict(_key|zip(_val)) }}”
_arr: „{{ dev_ifc|groupby('dev') }}”
_key: „{{ _arr|hartă(’primul’)|listă }}”
_val: „{{ _arr|hartă('ultimul')|
map('json_query', '[].ifc')|
map('community.general.dict_kv', 'interfeţe')|
lista }}"