当json_query不确定时,Ansible



我有这样的结构:

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,并且不再起作用。

  1. 通过解析循环参数后,使用循环任务when应用于每个迭代。
  2. 所有var操作都应完成 {{...}}而不是{{...}}|default(...)

,但我想您实际上想要:

with_subelements:
  - "{{domain_definition|json_query('domain.*')}}"
  - params
  - skip_missing: yes

最新更新