我有这样的结构:
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"
答案 0 :(得分:0)
when
将应用于每次迭代。{{...}}
而不是{{...}}|default(...)
完成。但我猜你真的想要:
with_subelements:
- "{{domain_definition|json_query('domain.*')}}"
- params
- skip_missing: yes
答案 1 :(得分:0)
在阅读了一些jinja2和jmspath后,我解决了这样的问题:
with_subelements:
- "{{domain_definition| default({'domain':{}}) | json_query('domain.*')}}"
- params
它会查找domain_definition,因为它不存在会将默认值设置为“{'domain':{}}”。然后json_query接收该值并处理它。因为它是一个空对象,它只是跳过整个任务。
我认为这是一个错误,在“with_subelements”和“when”条件下。在ansible 2.2它过去工作,我升级到2.4,它不再工作了。