如何在Ansible任务中动态选择要使用的json对象?
是否可以根据一些动态标准选择要使用的json对象 我有一个yml文件:如何在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:
- 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"
}
]