如何从存储在变量中的 JSON 输出中获取键“datacenter”的值?

问题描述 投票:0回答:2

从这个 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
值并尝试在虚拟机部署中使用它。

ansible vmware
2个回答
1
投票

假设您的示例 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 }}"

0
投票

另一种方法

  - 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 查询,如您的

所示

重复问答

© www.soinside.com 2019 - 2024. All rights reserved.