如何使用Ansible从dict检索特定值

如何使用Ansible从dict检索特定值,ansible,ansible-2.x,Ansible,Ansible 2.x,我试图用Ansible从dict var中获取一个特定值,但我的代码无法正常工作 - name: "Print IP Address" debug: msg: "IP Address: {{ item.instance.ipv4 }}" with_items: "{{ vm_list.results }}" 下面是我的代码: - name: "Creating VMs for [{{env}}] environment" vmware_guest: hostname

我试图用Ansible从dict var中获取一个特定值,但我的代码无法正常工作

- name: "Print IP Address"
  debug:
    msg: "IP Address: {{ item.instance.ipv4 }}"
  with_items: "{{ vm_list.results }}"
下面是我的代码:

- name: "Creating VMs for [{{env}}] environment"
  vmware_guest:
    hostname: "{{item.value.vcenter_hostname}}"
    username: "{{item.value.vsphere_username}}"
    password: "{{item.value.vsphere_password}}"
    esxi_hostname: "{{item.value.esxi_hostname}}"
    datacenter: "{{item.value.esxi_datacenter}}"
    folder: "{{item.value.vm_folder}}"
    name: "{{item.key}}"
    state: poweredon
    hardware:
      memory_mb: "{{item.value.vm_memory}}"
      num_cpus: "{{item.value.vm_cpu}}"
    nic:
    - vlan: "{{item.value.vm_networks_vlan}}"
      device_type: "{{item.value.vm_networks_device_type}}"
    template: "{{item.value.vm_template}}"
    wait_for_ip_address: yes
  register: vm_list
  with_dict: "{{vsphere_provisioning}}"

- name: "Print IP"
  debug:
    msg: "Ip Address: {{ item.value.instance.ipv4 }}"
  with_dict: "{{ vm_list }}"
以下是dict结构:

{
"changed": true, 
"failed": false, 
"instance": {
    "hw_eth13": {
        "addresstype": "assigned", 
        "ipaddresses": [
            "x.x.x.x", 
            "x::x:x:x:x"
        ], 
        "label": "Network adapter 1", 
        "macaddress": "x:x:x:x:x:x", 
        "macaddress_dash": "x-x-x-x-x-x", 
        "summary": "DVSwitch: x x x x x x x x-x x X x x x x x"
    }, 
    "hw_guest_full_name": "CentOS 4/5/6/7 (64-bit)", 
    "hw_guest_id": "centos64Guest", 
    "hw_interfaces": [
        "ethx"
    ], 
    "hw_memtotal_mb": 2048, 
    "hw_name": "XX_XX_XX", 
    "hw_power_status": "poweredOn", 
    "hw_processor_count": 1, 
    "hw_product_uuid": "xxx-xxx-xxx-xxx-xxx", 
    "ipv4": "XXX.XXX.XXX.XXX", 
    "ipv6": "XXX.XXX.XXX.XXX", 
    "module_hw": true
}}
Ansible返回的错误消息:

致命:[localhost]:失败!=>{ “失败”:对, “msg”:“字段“args”的值无效,似乎包含未定义的变量。 错误是:“ansible.vars.unsafe_proxy.AnsibleUnsafeText对象”没有属性“instance” 错误出现在“/…/tasks/main.yml”:第30行第3列,但根据确切的语法问题,可能在文件的其他位置。 有问题的行似乎是:-名称:“打印IP地址”此处 }


谢谢你的回归,现在一切正常

- name: "Print IP Address"
  debug:
    msg: "IP Address: {{ item.instance.ipv4 }}"
  with_items: "{{ vm_list.results }}"

使用
debug
打印
vm\u列表
,您将看到它不是dict,因此需要相应地运行循环。您能决定它是列表还是字典吗?您甚至可以称之为列表。@KonstantinSuvorov my vm_list contentRegistered变量下面的循环任务始终是一个dict,其中包含一个
结果
列表,其中包含许多关于每个项目执行的键。请使用调试模块进行检查。请使用编辑功能将信息添加到问题中,不要将其作为答案发布。在
results
中有一个列表,您需要迭代该列表。