variables - 访问嵌套字典的值
问题描述
我正在执行一些单独的任务,以通过塔自动部署 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",
解决方案
公平地说,这并不像看起来那么简单,因为您的字典有一个 key 是string 0
,但是,您disk_info.guest_disk_info.0.backing_filename
是否会尝试访问一个 element 0
,所以是一个 list ,而不是一个字典 key '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
推荐阅读
- workflow - ETL 和用户查询的工作流系统
- c++ - 如何使用标准库函数返回两个值的函子?
- python - 使用烧瓶为 HTML 创建自定义路径
- flutter - 如何在 graphql_flutter 中重试对 GraphQLError 的请求
- java - 如何在 JRE 上运行 Java 应用程序 JDK13?
- javascript - Firestore 交叉引用返回一个承诺对象,无法访问文档值
- pine-script - 同一屏幕中的多个时间范围
- wpf - 子控件的 ItemControl 背景
- ruby - 如何处理 Sinatra 中的陷阱
- sockets - 设计高效的 UDP 服务器来处理多个客户端