如何在单个`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
在英语中:没有
跳过的
属性的元素数为零时