从这个 YAML 输出中,我需要获取变量中的
datacenter
值。
changed: "false"
clusters:
ADC_CORE4:
hosts:
- name: "b125.abc.com"
folder: "/ADC_3C/host/ADC_CORE4"
enable_ha: "true"
ha_failover_level: "2"
resource_summary:
cpuCapacityMHz: "2183328"
cpuUsedMHz: "71374"
moid: "test"
datacenter: "ADC_AI"
但是关键
ADC_CORE4
并不稳定,当集群发生变化时,我得到的每个输出都会发生变化。
我喜欢从此输出中获取
datacenter
值并尝试在虚拟机部署中使用它。
假设您的示例 YAML 数据是变量
myvariable
的内容,您可以像这样获取 datacenter
值:
(myvariable.clusters.values()|list).0.datacenter
values()
方法返回值列表;由于只有一个值,我们只需获取列表中的第一项,然后请求 datacenter
属性。
例如:
- hosts: localhost
gather_facts: false
vars:
myvariable:
changed: "false"
clusters:
ADC_CORE4:
hosts:
- name: "b125.abc.com"
folder: "/ADC_3C/host/ADC_CORE4"
enable_ha: "true"
ha_failover_level: "2"
resource_summary:
cpuCapacityMHz: "2183328"
cpuUsedMHz: "71374"
moid: "test"
datacenter: "ADC_AI"
tasks:
- debug:
msg: "datacenter: {{ (myvariable.clusters.values()|list).0.datacenter }}"
另一种方法
- debug:
msg: "{{ (cluster_info.clusters.values() | list | first).datacenter }}"
但是带有括号符号是
- debug:
msg: "{{ cluster_info.clusters[(result.clusters.keys() | first)]['datacenter'] }}"
一个最小的示例手册
- hosts: localhost
gather_facts: false
vars:
cluster_info:
changed: "false"
clusters:
ADC_CORE4:
hosts:
- name: "b125.abc.com"
folder: "/ADC_3C/host/ADC_CORE4"
enable_ha: "true"
ha_failover_level: "2"
resource_summary:
cpuCapacityMHz: "2183328"
cpuUsedMHz: "71374"
moid: "test"
datacenter: "ADC_AI"
tasks:
- debug:
msg: "{{ (cluster_info.clusters.values() | list | first).datacenter }}"
- debug:
msg: "{{ cluster_info.clusters[(result.clusters.keys() | first)]['datacenter'] }}"
任何
clusters.NAME
或 clusters['NAME']
都会产生 的输出
TASK [debug] *****
ok: [localhost] =>
msg: ADC_AI
TASK [debug] *****
ok: [localhost] =>
msg: ADC_AI
也可能且可能更简单的是选择 JSON 数据:JSON 查询,如您的
所示重复问答