如何在单个“何时”子句中检查Ansible循环任务的所有迭代结果

时间:2019-02-19 13:59:17

标签: ansible jinja2

从我的角色考虑此任务序列:

- command: "svn status {{dest}}/{{client}}"
  changed_when: false
  register: svn_status
  when: svn_checkout is not skipped

- command: "svn add {{dest}}/{{client}}/{{svn_dir}}"
  loop:
    - dir_a
    - dir_b
    - dir_b
  loop_control:
    loop_var: svn_dir
  register: svn_add
  when: svn_status is not skipped and svn_status.stdout != ""

- command: "svn commit {{dest}}/{{client}}
  --username user --password password
  --non-interactive
  -m 'Configuration for {{client}}'"
  when: svn_add is changed

在最后一个when条件下,我想检查是否跳过了前面循环的所有迭代。在普通的Python中,这就像

all([ r.skipped for r in svn_add.results ])

但是Jinja2似乎不接受。还有其他方法吗?

1 个答案:

答案 0 :(得分:1)

使用rejectattr过滤器删除跳过的元素并计算结果:

when: svn_add.results | rejectattr('skipped','defined') | list | count == 0

英语:当没有skipped属性的元素数量为零时。