我有这样的结构:
domain_definition:
domain:
cluster:
name: "cluster1"
params:
- 30
server:
name: "server1"
params:
- 30
- 20
- 10
我运行此处理程序
- name: restart
shell: ...
async: 45
poll: 0
with_subelements:
- "{{domain_definition|json_query('domain.*')| default([])}}"
- params
listen: "restart"
在某些主机中未定义domain_definition,所以我尝试添加
when: domain_definition is defined
但我得到
"Error in jmespath.search in json_query filter plugin:n'domain_definition' is undefined"
阅读了一些jinja2和jmspath,我像这样解决了:
with_subelements:
- "{{domain_definition| default({'domain':{}}) | json_query('domain.*')}}"
- params
它查找domain_definition,因为它不存在,将默认值设置为" {'domain':{}}}"。然后JSON_QUERY接收该价值并处理它。由于它是一个空的对象,因此只需跳过整个任务即可。
我相信这是一个错误,在" with_subelements"one_answers" wher"条件上。在Ansible 2.2上,它曾经工作,我升级到2.4,并且不再起作用。
- 通过解析循环参数后,使用循环任务
when
应用于每个迭代。 - 所有var操作都应完成
{{...}}
而不是{{...}}|default(...)
。
,但我想您实际上想要:
with_subelements:
- "{{domain_definition|json_query('domain.*')}}"
- params
- skip_missing: yes