Dictionary Ansible-如何在嵌套字典中将列表组合为值

Dictionary Ansible-如何在嵌套字典中将列表组合为值,dictionary,ansible,Dictionary,Ansible,我有一个单独的列表和一个词典列表,我正试图将它们合并成一个词典,以便在剧本中更有效地访问: 一个名为“卷设备路径”的简单列表: ok: [node1] => { "volume_device_path": [ "/dev/sanstorage/0987654321", "/dev/sanstorage/1234567890" ] } 列表中名为“卷”的词典: ok: [node1]

我有一个单独的列表和一个词典列表,我正试图将它们合并成一个词典,以便在剧本中更有效地访问:

一个名为“卷设备路径”的简单列表:

ok: [node1] => {
    "volume_device_path": [
        "/dev/sanstorage/0987654321",
        "/dev/sanstorage/1234567890"
    ]
}
列表中名为“卷”的词典:

ok: [node1] => {
    "volumes": [
        {
            "format_opts": null,
            "fs_type": "xfs",
            "mount_opts": "noatime",
            "mount_path": "/data/fc100",
            "storage_protocol": "fc",
            "vol_desc": "ansible volume for fc",
            "vol_name": "data100",
            "vol_perf_pol": "high",
            "vol_size": 100000,
            "vol_suffix": "data100"
        },
        {
            "format_opts": null,
            "fs_type": "ext4",
            "mount_opts": "noatime",
            "mount_path": "/data/fc111",
            "storage_protocol": "fc",
            "vol_desc": "ansible volume for fc",
            "vol_name": "data111",
            "vol_size": 100000,
            "vol_suffix": "data111"
        }
    ]
}
我想创建一个名为“volumes\u combined”的新词典,它将两个早期的数据结构结合起来,如下所示:

ok: [node1] => {
    "volumes_combined": [
        {
            "volume_device_path": "/dev/sanstorage/0987654321",
            "format_opts": null,
            "fs_type": "xfs",
            "mount_opts": "noatime",
            "mount_path": "/data/fc100",
            "storage_protocol": "fc",
            "vol_desc": "ansible volume for fc",
            "vol_name": "data100",
            "vol_size": 100000,
            "vol_suffix": "data100"
        },
        {
            "volume_device_path": "/dev/sanstorage/1234567890",
            "format_opts": null,
            "fs_type": "ext4",
            "mount_opts": "noatime",
            "mount_path": "/data/fc111",
            "storage_protocol": "fc",
            "vol_desc": "ansible volume for fc",
            "vol_name": "data111",
            "vol_size": 100000,
            "vol_suffix": "data111"
        }
    ]
}
我能够接近下面的内容,但遇到了麻烦

“volume\u device\u path”列表值不像我希望的那样嵌套在字典中。如何将初始列表值合并到嵌套字典中

    - name: combine volumes input file and volume_device_paths
      set_fact:
        volumes_combined: "{{ volumes_combined|default({}) | combine({ item.0: item.1 }) }}"
      loop: "{{ query('together', volume_device_path, volumes) }}"
调试输出:

ok: [node1] => {
    "volumes_combined": {
        "/dev/sanstorage/0987654321": {
            "format_opts": null,
            "fs_type": "xfs",
            "mount_opts": "noatime",
            "mount_path": "/data/fc100",
            "storage_protocol": "fc",
            "vol_desc": "ansible volume for fc",
            "vol_name": "data100",
            "vol_size": 100000,
            "vol_suffix": "data100"
        },
        "/dev/sanstorage/1234567890": {
            "format_opts": null,
            "fs_type": "ext4",
            "mount_opts": "noatime",
            "mount_path": "/data/fc111",
            "storage_protocol": "fc",
            "voldesc": "ansible volume for fc",
            "volname": "data111",
            "volsize": 100000,
            "volsuffix": "data111"
        }
    }
}
谢谢

Q:'volume\u device\u path'列表值不嵌套在字典中

volumes\u combined:“{{{volumes\u combined}默认值({})|
组合({item.0:item.1})}”
答:需要进行一些修复

  • 默认([])
    。。。可变卷_组合为一个列表
  • +
    而不是
    组合
    。。。将项目添加到列表中
  • [item.1 | combine({'volume\u device\u path':item.0})]
    。。。合并字典
volumes\u combined:“{{{volumes\u combined}默认值([]))+
[item.1 | combine({'volume_device_path':item.0})]}”

三天内回答三个问题。非常感谢你在这周帮助我,你现在是我在网上最喜欢的人了!我真的很感谢你在这篇文章中解释你答案的附加评论。祝您今天过得愉快!