从我的角色考虑此任务序列:
- 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似乎不接受。还有其他方法吗?
答案 0 :(得分:1)
使用rejectattr
过滤器删除跳过的元素并计算结果:
when: svn_add.results | rejectattr('skipped','defined') | list | count == 0
英语:当没有skipped
属性的元素数量为零时。