我正在嘗試撰寫一個 ansible playbook,以格式良好的方式輸出有關系統的一些詳細資訊。特別是磁盤大小。
輸入變數類似于:
- friendly_name: 'disk1 name'
size: 123456
- friendly_name: 'disk2 name'
size: 654321
{{ dict(ansible_facts.disks | json_query('[].[friendly_name, size]')) }}
我正在努力想出一種方法來將函式應用于字典的“值”(或嵌套串列的第二個值,在將其轉換為字典之前) - 我想應用human_readable(unit='G')或類似的,不訴諸set_fact或FilterPlugins
所以理想情況下,我會有一個如下形式的輸出變數:
{'disk1 name': '1024G', 'disk2 name': '8192G'}
uj5u.com熱心網友回復:
您可以將字典ansible_facts.disks分成兩個串列,一個包含大小,另一個包含友好名稱,然后將human_readable過濾器應用于包含map過濾器大小的串列,然后zip將兩個串列重新組合在一起。
鑒于任務:
- debug:
msg: "{{ dict(
ansible_facts.disks | map(attribute='friendly_name') |
zip(ansible_facts.disks | map(attribute='size') | map('human_readable','unit','G'))
) }}"
vars:
ansible_facts:
disks:
- friendly_name: 'disk1 name'
size: 1099511627776
- friendly_name: 'disk2 name'
size: 8796093022208
這產生:
TASK [debug] ********************************************************************
ok: [localhost] => {
"msg": {
"disk1 name": "1024.00 Gb",
"disk2 name": "8192.00 Gb"
}
}
uj5u.com熱心網友回復:
如果沒有格式,您可以簡單地使用items2dict
- debug:
msg: "{{ ansible_facts.disks|items2dict(key_name='friendly_name',
value_name='size') }}"
給
msg:
disk1 name: 1099511627776
disk2 name: 8796093022208
使用 Jinja 更改格式,例如
- debug:
msg: "{{ _disks|from_yaml }}"
vars:
_disks: |
{% for i in ansible_facts_disks %}
{{ i.friendly_name }}: {{ i.size|human_readable(unit='G') }}
{% endfor %}
給
msg:
disk1 name: 1024.00 GB
disk2 name: 8192.00 GB
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/363165.html
上一篇:從串列回傳字典中的特定拆分字串
