我無法在 Ansible 代碼中重建字典串列,如下所示:
輸入:
{
"list_report": [
{
"objectid": "8502d7d99a435532",
"value": "10.70.108.15,10.70.106.10,10.72.106.167"
}
]
}
在輸出中有:
{
"list_report": [
{
"objectid": "8502d7d99a435532",
"value": [10.70.108.15,10.70.106.10,10.72.106.167]
}
]
}
所以,我需要保持 item:objectid原樣,但是,我想將 item:value從字串更改為 IP 串列。我嘗試了很多解決方案,但似乎沒有任何效果。
有人可以給我一個線索嗎?
uj5u.com熱心網友回復:
鑒于您沒有過度簡化示例輸入,您可以使用 Python 的split方法拆分值。
鑒于劇本:
- hosts: localhost
gather_facts: no
vars:
list_report:
- objectid: "8502d7d99a435532"
value: "10.70.108.15,10.70.106.10,10.72.106.167"
tasks:
- set_fact:
list_report: "{{
[{
'objectid': list_report.0.objectid,
'value': list_report.0.value.split(',')
}]
}}"
- debug:
var: list_report
這產生:
PLAY [localhost] *************************************************************************************************
TASK [set_fact] **************************************************************************************************
ok: [localhost]
TASK [debug] *****************************************************************************************************
ok: [localhost] => {
"list_report": [
{
"objectid": "8502d7d99a435532",
"value": [
"10.70.108.15",
"10.70.106.10",
"10.72.106.167"
]
}
]
}
PLAY RECAP *******************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
現在,如果此陣列中有多個專案,則必須求助于臨時變數,因為不再可能對其進行原位編輯。
鑒于劇本:
- hosts: localhost
gather_facts: no
vars:
list_report:
- objectid: "8502d7d99a435532"
value: "10.70.108.15,10.70.106.10,10.72.106.167"
- objectid: "8502d7d99a435533"
value: "10.70.108.16,10.70.106.11,10.72.106.168"
tasks:
- set_fact:
_list_report: "{{
_list_report | default([])
[{
'objectid': item.objectid,
'value': item.value.split(',')
}]
}}"
loop: "{{ list_report }}"
loop_control:
label: "{{ item.objectid }}"
- set_fact:
list_report: "{{ _list_report }}"
- debug:
var: list_report
這產生了反應:
PLAY [localhost] *************************************************************************************************
TASK [set_fact] **************************************************************************************************
ok: [localhost] => (item=8502d7d99a435532)
ok: [localhost] => (item=8502d7d99a435533)
TASK [set_fact] **************************************************************************************************
ok: [localhost]
TASK [debug] *****************************************************************************************************
ok: [localhost] =>
list_report:
- objectid: 8502d7d99a435532
value:
- 10.70.108.15
- 10.70.106.10
- 10.72.106.167
- objectid: 8502d7d99a435533
value:
- 10.70.108.16
- 10.70.106.11
- 10.72.106.168
PLAY RECAP *******************************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
uj5u.com熱心網友回復:
例如,給定串列
list_report:
- objectid: "8502d7d99a435532"
value: "10.70.108.15,10.70.106.10,10.72.106.167"
- objectid: "8502d7d99a435533"
value: "10.70.108.16,10.70.106.11,10.72.106.168"
下面的任務完成了這項作業
- set_fact:
list_report: "{{ dict(_objs|zip(_vals))|
dict2items(key_name='objectid', value_name='value') }}"
vars:
_objs: "{{ list_report|map(attribute='objectid')|list }}"
_vals: "{{ list_report|map(attribute='value')|map('split', ',')|list }}"
給
list_report:
- objectid: 8502d7d99a435532
value:
- 10.70.108.15
- 10.70.106.10
- 10.72.106.167
- objectid: 8502d7d99a435533
value:
- 10.70.108.16
- 10.70.106.11
- 10.72.106.168
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/350198.html
