สร้างรายการอุปกรณ์และอินเทอร์เฟซ
- set_fact:
dev_ifc: "{{ dev_ifc|d([]) + [{'dev': item.1, 'ifc': item.0.key}] }}"
with_subelements:
- "{{ device_vlans|dict2items }}"
- ค่าอินเทอร์เฟซ
ให้
dev_ifc:
- {ผู้พัฒนา: GigabitEthernet1/1, ifc: '1'}
- {ผู้พัฒนา: GigabitEthernet1/2, ifc: '1'}
- {ผู้พัฒนา: GigabitEthernet1/3, ifc: '1'}
- {ผู้พัฒนา: GigabitEthernet1/2, ifc: '20'}
- {ผู้พัฒนา: GigabitEthernet1/3, ifc: '30'}
จากนั้นจัดกลุ่มรายการตามอุปกรณ์และสร้างพจนานุกรม
- set_fact:
device_vlans: "{{ dict(คีย์|zip(val)) }}"
วาร์:
arr: "{{ dev_ifc|groupby('dev') }}"
คีย์: "{{ arr|แผนที่('อันดับแรก')|รายการ }}"
val: "{{ arr|แผนที่('สุดท้าย')|
แผนที่('json_query', '[].ifc')|
แผนที่ ('community.general.dict_kv', 'ส่วนต่อประสาน')|
รายการ }}"
ให้
device_vlans:
GigabitEthernet1/1:
อินเทอร์เฟซ: ['1']
GigabitEthernet1/2:
อินเทอร์เฟซ: ['1', '20']
GigabitEthernet1/3:
อินเทอร์เฟซ: ['1', '30']
เป็นไปได้ที่จะหลีกเลี่ยงการทำซ้ำในงาน ให้ใส่การวนซ้ำใน Jinja2 แทน ตัวอย่างเช่น ใส่การประกาศด้านล่างเป็น เหมาะสม
dev_ifc_str: |-
{% สำหรับ ifc ใน device_vlans.keys() %}
{% สำหรับ dev ใน device_vlans[ifc]['interfaces'] %}
- {ผู้พัฒนา: {{ dev }}, ifc: {{ ifc }}}
{% สิ้นสุดสำหรับ %}
{% สิ้นสุดสำหรับ %}
dev_ifc: "{{ dev_ifc_str|from_yaml }}"
device_vlans2: "{{ dict(_key|zip(_val)) }}"
_arr: "{{ dev_ifc|groupby('dev') }}"
_key: "{{ _arr|แผนที่('อันดับแรก')|รายการ }}"
_val: "{{ _arr|แผนที่('สุดท้าย')|
แผนที่('json_query', '[].ifc')|
แผนที่ ('community.general.dict_kv', 'ส่วนต่อประสาน')|
รายการ }}"