Ansible-在Web服务返回的json中查找值(uri)

时间:2019-03-01 13:00:37

标签: ansible

我调用一个Web服务,该服务返回一个 json 响应。这是任务:

- name: calls webservice for json
  uri:
    url: ...
    method: GET
    body_format: json
  register: json_response

这是被调用的Web服务返回的简化响应:

{
  "nodes": {
    "hash1": {
      "name": "host1"
    },
    "hash2": {
      "name": "host2"
    }
  }
}

如您所见,返回的响应中的 nodes 是一张地图。每个条目代表一个主机。键是一些哈希值,对我而言并不重要。我需要检查这些文件中的 name 是否包含指定值,例如。 “ host1”。

问题:如何检查返回的json是否在 name 字段中包含指定的主机?

先谢谢了, 祝你有美好的一天
休伯特

1 个答案:

答案 0 :(得分:2)

您可以使用json_query过滤器来做到这一点,该过滤器在幕后使用JMESPath

针对您问题的简单剧本如下:

---
- hosts: localhost
  gather_facts: False
  vars:
    json_query: "nodes.*[] | [?name=='host1']"
    json_response: |
      {
        "nodes": {
          "hash1": {
            "name": "host1"
          },
          "hash2": {
            "name": "host2"
          }
        }
      }

  tasks:
  - name: debug
    debug:
      msg: "{{ json_response | from_json | json_query(json_query) }}"