如何使用Ansible从dict检索特定值
我试图用Ansible从dict var中获取一个特定值,但我的代码无法正常工作如何使用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
- 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
中有一个列表,您需要迭代该列表。