如何在单个`when`子句中检查Ansible循环任务的所有迭代结果
从我的角色考虑此任务序列:如何在单个`when`子句中检查Ansible循环任务的所有迭代结果,ansible,jinja2,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_contro
- 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 ])
但金甲2号似乎不接受。是否有其他方法?使用
rejectattr
过滤器删除跳过的元素并计算结果:
when: svn_add.results | rejectattr('skipped','defined') | list | count == 0
在英语中:没有跳过的属性的元素数为零时