Ansible:如何修改字典列表

阿里斯顿邮报

我想用从IPAM获得的IP地址的新条目来修改hostvars列表中的字典。

{
  "vm_guest_networks": [
    {
      "device_type": "vmxnet3",
      "state": "present",
      "subnet": "10.91.1.0/24"
    },
    {
      "device_type": "vmxnet3",
      "state": "present",
      "subnet": "10.91.0.0/24"
    }
  ]
}

在一个循环中,我有一个子网来标识正确的字典以及要使用ipv4_address键添加的IP地址,因此结果应类似于:

{
  "vm_guest_networks": [
    {
      "device_type": "vmxnet3",
      "state": "present",
      "subnet": "10.91.1.0/24",
      "ipv4_address": "10.91.1.216"
    },
    {
      "device_type": "vmxnet3",
      "state": "present",
      "subnet": "10.91.0.0/24",
      "ipv4_address": "10.91.0.21"
    }
  ]
}

当前的WIP Ansible代码位于https://pastebin.com/bFc1Ww2K

弗拉基米尔·博特卡

假设IP列表可用。例如

ip4: [10.91.1.216, 10.91.0.21]

让我们使用合并过滤器和扩展循环变量来创建一个新列表,在该列表中将更新每个字典。例如

    - set_fact:
        mydata: "{{ mydata|default([]) +
                    [item|combine({'ipv4_address': ip4[ansible_loop.index0]})] }}"
      loop: "{{ vm_guest_networks }}"
      loop_control:
        extended: yes

    - set_fact:
        vm_guest_networks: "{{ mydata }}"
    - debug:
        var: vm_guest_networks

    "vm_guest_networks": [
        {
            "device_type": "vmxnet3", 
            "ipv4_address": "10.91.1.216", 
            "state": "present", 
            "subnet": "10.91.1.0/24"
        }, 
        {
            "device_type": "vmxnet3", 
            "ipv4_address": "10.91.0.21", 
            "state": "present", 
            "subnet": "10.91.0.0/24"
        }
    ]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章