Tạo danh sách thiết bị và giao diện
- bộ_thực tế:
dev_ifc: "{{dev_ifc|d([]) + [{'dev': item.1, 'ifc': item.0.key}] }}"
with_subelements:
- "{{ device_vlans|dict2items }}"
- giá trị.interfaces
cho
dev_ifc:
- {dev: GigabitEthernet1/1, ifc: '1'}
- {nhà phát triển: GigabitEthernet1/2, ifc: '1'}
- {dev: GigabitEthernet1/3, ifc: '1'}
- {nhà phát triển: GigabitEthernet1/2, ifc: '20'}
- {dev: GigabitEthernet1/3, ifc: '30'}
Sau đó, nhóm danh sách theo thiết bị và tạo từ điển
- bộ_thực tế:
device_vlans: "{{ dict(key|zip(val)) }}"
lọ:
mảng: "{{dev_ifc|groupby('dev') }}"
khóa: "{{mảng|bản đồ('đầu tiên')|danh sách }}"
val: "{{ mảng|bản đồ('cuối')|
map('json_query', '[].ifc')|
map('community.General.dict_kv', 'giao diện')|
danh sách }}"
cho
thiết bị_vlan:
GigabitEthernet1/1:
giao diện: ['1']
GigabitEthernet1/2:
giao diện: ['1', '20']
GigabitEthernet1/3:
giao diện: ['1', '30']
Có thể tránh lặp lại trong một nhiệm vụ. Thay vào đó, hãy đặt phép lặp vào Jinja2. Ví dụ: đặt các khai báo bên dưới là thích hợp
dev_ifc_str: |-
{% cho ifc trong device_vlans.keys() %}
{% cho nhà phát triển trong 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|map('first')|list }}"
_val: "{{ _arr|map('last')|
map('json_query', '[].ifc')|
map('community.General.dict_kv', 'giao diện')|
danh sách }}"