如何在Ansible上循环解析的Json响应

uqjltbpv  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(124)

我正在做一个剧本,我正在等待剧本收集网络请求并生成输出。因为我正在向多个接口发出请求,所以我需要拆分它们。我该怎么做呢?

tasks:
  - name: Collecting Endpoints
    uri:
      url: "https://applicationserver.com/api/app_set"
      method: GET
      return_content: yes
      validate_certs : no
      body_format: json
    register: Result

  - name: Temp to variable.
    set_fact:
      Endpoint: "{{ Result.json | json_query('[].name[]') }}"

下面是我对第一个任务www.example.com的响应https://paste.chapril.org/?142535f7072d47ed#4TahPDaDGPkP1NxxB3gzZP86SkusJ9Kk6jSfqmSy7wK7
根据我从第一个任务中收集的数据,我想从内部请求每个过滤器的数据。
这是我的任何端点的JSON响应。https://paste.chapril.org/?44e8f5462b105285#E2J7LzRwWSCJXR8BetzB1pewnV2ye1Fr1g741VacwBJb

- name: Get Responses All.
    uri:
       url: "https://applicationserver.com/api/app_set/{{ item }}"
       method: GET
       return_content: yes
       body_format: json
       validate_certs : no
    register: Resultsofall
    loop: "{{ Endpoint }}"

完成此任务后,我将接收所有端点的所有Json数据。
如何从整个结果中过滤数据并进行这样的循环?
app_sets
Index 1 (Which is counting by endpoint)
AppSetName (Getting from the first task (json_query('[].name[]')
StatefulAppSetName (Getting from the first task( ('[].labels[].AttachedToStatefulAppSet[]'))
Apps (Getting from the second task json_query('[].json.pods.app')
Index 2 (Which is counting by endpoint)
AppSetName (Getting from the first task (json_query('[].name[]')
StatefulAppSetName (Getting from the first task( ('[].labels[].AttachedToStatefulAppSet[]'))
Apps (Getting from the second task json_query('[].json.pods.app')

6qfn3psc

6qfn3psc1#

您需要正确地获取json_query,它基于jmespath .假设您对json中的服务名称感兴趣,您的查询应该是:

- name: Temp to variable.
    set_fact:
      Endpoint: "{{ Result.json | json_query('services[].app') }}"

如果您对服务和pod感兴趣,您可以使用类似于

- name: Temp to variable.
    set_fact:
      services_apps: "{{ Result.json | json_query('services[].app') }}"  
      pods_apps: "{{ Result.json | json_query('services[].app') }}"
  - name: Get Responses All.
    uri:
       url: "https://applicationserver.com/api/app_set/{{ item }}"
       method: GET
       return_content: yes
       body_format: json
       validate_certs : no
    register: Resultsofall
    loop: "{{ (services_apps + pods_apps )| unique | select | list }}"

我建议使用https://jmespath.org/来开发和测试查询。

相关问题