首页 > 解决方案 > 计算输出中 json 对象的数量

问题描述

我正在使用 Ansible 的 vmware_cluster_info 来提供以下 json。我需要能够计算集群中的主机数量。集群名称会改变。

                                                                                                                {
"ansible_facts": {
    "discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"clusters": {
    "Cluster1": {
        "drs_default_vm_behavior": "fullyAutomated",
        "ha_restart_priority": [
            "medium"
        ],
        "ha_vm_failure_interval": [
            50
        ],
        "ha_vm_max_failure_window": [
            0
        ],
        "ha_vm_max_failures": [
            10
        ],
        "ha_vm_min_up_time": [
            90
        ],
        "ha_vm_monitoring": "vmMonitoringOnly",
        "ha_vm_tools_monitoring": [
            "vmAndAppMonitoring"
        ],
        "hosts": [
            {
                "folder": "/Datacenter/host/Cluster1",
                "name": "host1"
            },
            {
                "folder": "/Datacenter/host/Cluster1",
                "name": "host2"
            },
            {
                "folder": "/Datacenter/host/Cluster1",
                "name": "host3"
            },
            {
                "folder": "/Datacenter/host/Cluster1",
                "name": "host4"
            }
        ],
        "resource_summary": {
            "cpuCapacityMHz": 144000,
        },
        "tags": [],
        "vsan_auto_claim_storage": false
    }
},
"invocation": {
    "module_args": {
        "cluster_name": "Cluster1",
    }
}

}

我试过了:

- debug:
    msg: "{{ cluster_info.clusters.[].hosts.name | length }}"

- debug:
    msg: "{{ cluster_info.clusters.*.hosts.name | length }}"

两者都在模板化字符串时给我模板错误......此外,任何关于教程等的建议以学习如何解析 json 将不胜感激。这对我来说似乎是一个困难的话题。有任何想法吗?

标签: jsonansible

解决方案


与您尝试的方法类似的一种方法是使用json_query. 我了解您想打印主机数,因此.name您的代码中不需要:

  - name: print count of hosts
    debug:
      var: cluster_info.clusters | json_query('*.hosts') | first | length

json_query返回一个列表,这就是我们将它传递给firstbefore的原因length


推荐阅读