【问题标题】:Select mid-level attribute from JMESPATH expression从 JMESPATH 表达式中选择中级属性
【发布时间】:2018-07-20 20:03:37
【问题描述】:

我正在尝试使用 Ansible 的 json_query 为特定虚拟机选择集群名称,该 json_query 在后端使用 JMESPATH。 我已按照http://jmespath.org 的教程和示例进行操作,但无法构建正确的查询。

我的数据结构如下:

{
"datacenters": [
  {
  "name": "dc-a",
  "clusters": [
    { "name": "cluster-a",

      "hosts": [
        {
          "name": "host-a",
          "vms": [
            {
              "name": "vm-a",
              "summary": {
                "mem": "8",
                "diskGB": "78.00",
                "annotation": "",
                "state": "poweredOn",
                "ostype": "Microsoft Windows Server 2008 R2 (64-bit)",
                "cpu": "2"
              }
            },
            {
              "name": "vm-b",
              "summary": {
                "mem": "24",
                "diskGB": "114.00",
                "annotation": "",
                "state": "poweredOn",
                "ostype": "Microsoft Windows Server 2008 R2 (64-bit)",
                "cpu": "4"
              }
            }]
        }]
    }]
 }]
}

我可以使用下面的查询选择 VM ('vm-a'),但我正在寻找集群 (即 'cluster-a') .

datacenters[].clusters[].hosts[].vms[?name=='vm-a'].name[] 

【问题讨论】:

  • 没有意图证明,请阅读stackoverflow.com/help/on-topic了解如何在stackoverflow上正确提问
  • 我认为这是一个足够好的问题。我当然见过更糟糕的情况。还有,这是发帖人的第一个问题,这里不用太正式。更不用说投票了。

标签: json ansible jmespath


【解决方案1】:

datacenters[].clusters[?contains(hosts[].vms[].name, 'vm-a')].name[]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    相关资源
    最近更新 更多