[英]Convert list to values in dictionary with Ansible
我正在嘗試使用來自 Linux 主機的 Ansible 收集事實數據作為輸入:
"ansible_fibre_channel_wwn": [
"1000e0071bd4d0ed",
"10009440c90f9d85",
"1000e0071bce95f3",
"1000e0071bce95f2",
"1000e0071bd4d0ec",
"10009440c90f9d84"
],
並希望使用上述列表項為新的“wwpn”鍵的字典值創建一個字典:
fc_initiators: [
{wwpn: '10:00:e0:07:1b:d4:d0:ed'},
{wwpn: '10:00:94:40:c9:0f:9d:85'},
{wwpn: '10:00:e0:07:1b:ce:95:f3'},
{wwpn: '10:00:e0:07:1b:ce:95:f2'},
{wwpn: '10:00:e0:07:1b:d4:d0:ec'},
{wwpn: '10:00:94:40:c9:0f:9d:84'}
]
這個正則表達式似乎足以將初始列表項轉換為殖民 WWPN:
"{{ ansible_fibre_channel_wwn |
map('regex_replace', '^(..)(..)(..)(..)(..)(..)(..)(..)$', '\\1:\\2:\\3:\\4:\\5:\\6:\\7:\\8')|list }}"
我不確定從哪里開始列表->字典轉換。 任何幫助深表感謝。
謝謝!
首先“殖民”項目,例如
- set_fact:
wwn_colonized: "{{ wwn_colonized|default([]) +
[item|map('join')|join(':')] }}"
loop: "{{ ansible_fibre_channel_wwn|map('batch', 2)|map('list')|list }}"
給
wwn_colonized:
- 10:00:e0:07:1b:d4:d0:ed
- 10:00:94:40:c9:0f:9d:85
- 10:00:e0:07:1b:ce:95:f3
- 10:00:e0:07:1b:ce:95:f2
- 10:00:e0:07:1b:d4:d0:ec
- 10:00:94:40:c9:0f:9d:84
然后下面的任務創建字典列表
- set_fact:
fc_initiators: "{{ wwn_colonized|
map('regex_replace', '^(.*)$', '{wwpn: \\1}')|
map('from_yaml')|
list }}"
給
fc_initiators:
- wwpn: 10:00:e0:07:1b:d4:d0:ed
- wwpn: 10:00:94:40:c9:0f:9d:85
- wwpn: 10:00:e0:07:1b:ce:95:f3
- wwpn: 10:00:e0:07:1b:ce:95:f2
- wwpn: 10:00:e0:07:1b:d4:d0:ec
- wwpn: 10:00:94:40:c9:0f:9d:84
或者,JSON 中的相同數據
fc_initiators|to_nice_json: |-
[
{
"wwpn": "10:00:e0:07:1b:d4:d0:ed"
},
{
"wwpn": "10:00:94:40:c9:0f:9d:85"
},
{
"wwpn": "10:00:e0:07:1b:ce:95:f3"
},
{
"wwpn": "10:00:e0:07:1b:ce:95:f2"
},
{
"wwpn": "10:00:e0:07:1b:d4:d0:ec"
},
{
"wwpn": "10:00:94:40:c9:0f:9d:84"
}
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.