首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以项索引为散列的禁止列表

以项索引为散列的禁止列表
EN

Stack Overflow用户
提问于 2021-03-29 12:15:24
回答 1查看 301关注 0票数 2

我试图将列表元素索引添加为散列,最好不要使用with_indexed_items,因为结果将在稍后进行过滤。

我想把它转换成:

代码语言:javascript
复制
vmware_disks:
- datastore: "datastores0"
  size_gb: 24
- datastore: "datastores0"
  size_gb: 397
  storage_policy: "vSAN standard cluster RAID-1"

像这样的事情:

代码语言:javascript
复制
vmware_disks:
- datastore: "datastores0"
  size_gb: 24
  nr: 0
- datastore: "datastores0"
  size_gb: 397
  storage_policy: "vSAN standard cluster RAID-1"
  nr: 1

到目前为止,我能够:

使用

  • {“数据存储”:"datastores0“、"size_gb":24 }、0、{”数据存储“:"datastores0”、"size_gb":397、"storage_policy":"vSAN标准集群RAID-1“}、1

  • "{{ vmware_disks | map('combine', {'nr':0}) }}" {“数据存储”:"datastores0","nr":0,"size_gb":24 },{“数据存储”:"datastores0","nr":0,"size_gb":397,"storage_policy":"vSAN标准集群RAID-1“}

请帮我把两者结合起来,以达到预期的效果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-29 21:18:27

您可以使用set_fact创建另一个字典,并将索引添加到:

代码语言:javascript
复制
- set_fact: 
    indexed_vmware_disks: >-
      {{ 
        indexed_vmware_disks | default([]) 
          + [ item | combine( { 'nr': index } ) ] 
      }}
  loop: "{{ vmware_disks }}"
  loop_control:
    index_var: index

然后,如果您确实需要字典具有它以前的确切名称,您可以在另一个set_fact中重新分配它。

下面是一个例子:

代码语言:javascript
复制
- 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

将产生重述:

代码语言:javascript
复制
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   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66854037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档