我在撰寫 Ansible 劇本時遇到了以下問題:
給了我一份清單:
rooms:
- room_name: bedroom-1
chairs: 1
- room_name: bedroom-2
chairs: 0
- room_name: bathroom
chairs: 0
- room_name: kitchen
chairs: 4
我需要將其轉換為字典串列,每個專案都有這兩個鍵:
chair_name: <room_name>-chair-<chair_number>
room_name: <room_name>
上面的例子會給我:
chair_names:
- chair_name: bedroom-1-chair-1
room_name: bedroom-1
- chair_name: kitchen-chair-1
room_name: kitchen
- chair_name: kitchen-chair-2
room_name: kitchen
- chair_name: kitchen-chair-3
room_name: kitchen
- chair_name: kitchen-chair-4
room_name: kitchen
我一直在努力使用 Ansible 來實作這一點。有沒有辦法做到這一點?
uj5u.com熱心網友回復:
使用 Jinja 創建結構
chair_names_str: |-
{% for room in rooms %}
{% for i in range(1, room.chairs 1) %}
- chair_name: {{ room.room_name }}-chair-{{ i }}
room_name: {{ room.room_name }}
{% endfor %}
{% endfor %}
chair_names: "{{ chair_names_str|from_yaml }}"
給
chair_names:
- {chair_name: bedroom-1-chair-1, room_name: bedroom-1}
- {chair_name: kitchen-chair-1, room_name: kitchen}
- {chair_name: kitchen-chair-2, room_name: kitchen}
- {chair_name: kitchen-chair-3, room_name: kitchen}
- {chair_name: kitchen-chair-4, room_name: kitchen}
問:“使用 Ansible 回圈是否可以達到相同的結果?”
答:是的。這是。在第一個回圈中創建椅子串列
- set_fact:
chairs: "{{ chairs|d([]) [{'chairs': range(1, item|int 1)|list}] }}"
loop: "{{ rooms|map(attribute='chairs')|list }}"
給
chairs:
- chairs: [1]
- chairs: []
- chairs: []
- chairs: [1, 2, 3, 4]
在第二個回圈中創建串列。下面的任務給出了相同的結果
- set_fact:
chair_names: "{{ chair_names|d([]) [_item] }}"
with_subelements:
- "{{ rooms|zip(chairs)|map('combine') }}"
- chairs
vars:
_item:
chair_name: "{{ item.0.room_name }}-chair-{{ item.1 }}"
room_name: "{{ item.0.room_name }}"
您可以看到第一個選項要簡單得多。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/492689.html
下一篇:將映射雙重轉換為串列回傳null