如何在Ansible任务中动态选择要使用的json对象?

如何在Ansible任务中动态选择要使用的json对象?,ansible,Ansible,是否可以根据一些动态标准选择要使用的json对象 我有一个yml文件: - name: Get data uri: url: "foo/get_data/{{item.name}}" return_content: yes with_items: "{{stuff_names}}" register: app_out - name: Use data uri: url: "foo/use_data/item.json[0].id" method:

是否可以根据一些动态标准选择要使用的json对象

我有一个yml文件:

- name: Get data
  uri:
    url: "foo/get_data/{{item.name}}"
    return_content: yes
  with_items: "{{stuff_names}}"
  register: app_out

- name: Use data
  uri:
    url: "foo/use_data/item.json[0].id"
    method: POST
  with_items: "{{ app_out.results }}"
其中对
foo/get_data/
的调用返回一个包含1或2项的json数组:

样本来自
foo/get\u data/bar1

[{“id”:1,类型“:“x”},{“id”:2,类型“:“y”}]

样本来自
foo/get\u data/bar2

[{“id”:1,“type”:“x”}]

在“使用数据”任务中,是否有一种方法可以根据
item
中是否存在对象或
item
的大小等指定数组中要使用的json对象?现在它硬编码到第一个对象
item.json[0]

比如说,, 如果
item
包含类型为“y”的对象,则使用该对象,否则使用类型为“x”的
item

或 如果
项目
的大小大于1,则使用类型为“x”的
项目

编辑:

或者甚至是一个单独的任务来删除注册的应用程序

Q:“如果项目包含类型为“y”的对象,则使用该对象,否则使用类型为“x”的项目”

答:我认为,下面的剧本实现了这个逻辑

- hosts: localhost
  vars:
    results:
      - {"id": 1, "type": "x"}
      - {"id": 2, "type": "y"}
      - {"id": 3, "type": "z"}
  tasks:
    - set_fact:
        my_list: "{{ results|
                     selectattr('type', 'defined')|
                     selectattr('type', 'equalto','y')|list }}"
    - set_fact:
        my_list: "{{ results|
                     selectattr('type', 'defined')|
                     selectattr('type', 'equalto','x')|list }}"
      when: my_list|length == 0
    - name: Use type y, otherwise use type x
      debug:
        var: my_list
给予

"my_list": [
    {
        "id": 2, 
        "type": "y"
    }
]