我正在处理一些单独的任务,以便通过 Tower 实现 VM 部署的自动化。
基本上,我只需要快速了解如何从任务中收集/使用已注册返回的各种属性。
我有这个。
tasks:
- name: Gather disk info from virtual machine using name
vmware_guest_disk_info:
hostname: "{{ vcenter }}"
username: "{{ username }}"
password: "{{ esxipassword }}"
datacenter: "{{ datacenter }}"
name: "{{ fqdn }}"
register: disk_info
- debug:
var: disk_info
这会吐出我想要的信息。但是,对于我的一生,我无法弄清楚如何选择单个属性。有人能告诉我怎么做吗(特别是对于 backing_filename
)属性?
我的意思是在 powershell 中它只是 disk_info.backing_filename
或类似 backing = $disk_info | select -expandproperty backing_filename
的东西。只是在寻找类似的东西。
输出片段
{
"disk_info": {
"guest_disk_info": {
"0": {
"key": 2000,
"label": "Hard disk 1",
"summary": "104,857,600 KB",
"backing_filename": "[datastorex] vmname/vmname.vmdk",
答案 0 :(得分:0)
公平地说,这并不像看起来那么简单,因为你的字典有一个键是 string 0
,但是,你会做 disk_info.guest_disk_info.0.backing_filename
您会尝试访问元素 0
,因此是列表,而不是字典键 '0'
。
以下是解决您问题的示例剧本:
- hosts: all
gather_facts: yes
tasks:
- debug:
var: disk_info.guest_disk_info['0'].backing_filename
vars:
disk_info:
guest_disk_info:
'0':
key: 2000
label: Hard disk 1
summary: 104,857,600 KB
backing_filename: "[datastorex] vmname/vmname.vmdk"
这给出:
{
"disk_info.guest_disk_info['0'].backing_filename": "[datastorex] vmname/vmname.vmdk"
}
虽然这也有效,但您会看到 YAML 表示完全不同的结构,还包括一个列表,而不仅仅是多个嵌套字典:
- hosts: all
gather_facts: yes
tasks:
- debug:
var: disk_info.guest_disk_info.0.backing_filename
vars:
disk_info:
guest_disk_info:
- key: 2000
label: Hard disk 1
summary: 104,857,600 KB
backing_filename: "[datastorex] vmname/vmname.vmdk"
为了给你一个等效的 JSON,因为你似乎在理解 YAML 结构方面有问题,你的输出是
{
"disk_info": {
"guest_disk_info": {
"0": {
"backing_filename": "[datastorex] vmname/vmname.vmdk"
}
}
}
}
可以通过 disk_info.guest_disk_info['0'].backing_filename
访问。
虽然
{
"disk_info": {
"guest_disk_info": [
{
"backing_filename": "[datastorex] vmname/vmname.vmdk"
}
]
}
}
可通过 disk_info.guest_disk_info.0.backing_filename