我试图将列表元素索引添加为散列,最好不要使用with_indexed_items,因为结果将在稍后进行过滤。
我想把它转换成:
vmware_disks:
- datastore: "datastores0"
size_gb: 24
- datastore: "datastores0"
size_gb: 397
storage_policy: "vSAN standard cluster RAID-1"像这样的事情:
vmware_disks:
- datastore: "datastores0"
size_gb: 24
nr: 0
- datastore: "datastores0"
size_gb: 397
storage_policy: "vSAN standard cluster RAID-1"
nr: 1到目前为止,我能够:
使用
"{{ vmware_disks | map('combine', {'nr':0}) }}" {“数据存储”:"datastores0","nr":0,"size_gb":24 },{“数据存储”:"datastores0","nr":0,"size_gb":397,"storage_policy":"vSAN标准集群RAID-1“} 请帮我把两者结合起来,以达到预期的效果。
发布于 2021-03-29 21:18:27
您可以使用set_fact创建另一个字典,并将索引添加到:
- set_fact:
indexed_vmware_disks: >-
{{
indexed_vmware_disks | default([])
+ [ item | combine( { 'nr': index } ) ]
}}
loop: "{{ vmware_disks }}"
loop_control:
index_var: index然后,如果您确实需要字典具有它以前的确切名称,您可以在另一个set_fact中重新分配它。
下面是一个例子:
- hosts: all
gather_facts: no
vars:
vmware_disks:
- datastore: "datastores0"
size_gb: 24
- datastore: "datastores0"
size_gb: 397
storage_policy: "vSAN standard cluster RAID-1"
tasks:
- set_fact:
indexed_vmware_disks: >-
{{
indexed_vmware_disks | default([])
+ [ item | combine( { 'nr': index } ) ]
}}
loop: "{{ vmware_disks }}"
loop_control:
index_var: index
- set_fact:
vmware_disks: "{{ indexed_vmware_disks }}"
- debug:
var: vmware_disks将产生重述:
PLAY [all] *******************************************************************************************************
TASK [set_fact] **************************************************************************************************
ok: [localhost] => (item={'datastore': 'datastores0', 'size_gb': 24})
ok: [localhost] => (item={'datastore': 'datastores0', 'size_gb': 397, 'storage_policy': 'vSAN standard cluster RAID-1'})
TASK [set_fact] **************************************************************************************************
ok: [localhost]
TASK [debug] *****************************************************************************************************
ok: [localhost] =>
vmware_disks:
- datastore: datastores0
nr: 0
size_gb: 24
- datastore: datastores0
nr: 1
size_gb: 397
storage_policy: vSAN standard cluster RAID-1
PLAY RECAP *******************************************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 https://stackoverflow.com/questions/66854037
复制相似问题