Ansible:当在列表中列出时

Mis*_*sko 1 python jinja2 ansible

我有两个清单:

a:
 - 1
 - 2 
 - 3
b: 
 - 2
 - 3
 - 4
Run Code Online (Sandbox Code Playgroud)

a仅当 中包含任何项目时,我才需要运行任务b。这怎么可能?

tasks:
  - name: one of elements of a in b
    debug: msg=At least one of elements of a is contained in b
    when: ???
Run Code Online (Sandbox Code Playgroud)

udo*_*dan 5

Ansible 有intersect过滤器,它将返回两个列表中包含的元素。(参见文档

{{ a | intersect(b) }}
Run Code Online (Sandbox Code Playgroud)

结果将是一个包含元素2和的列表3列表。

根据您的情况,只需检查结果列表的长度:

tasks:
  - name: one of elements of a in b
    debug: msg=One of elements of a is contained in b
    when: "{{ a | intersect(b) | length > 0 }}"
Run Code Online (Sandbox Code Playgroud)

更新:对于现代 Ansible 语法{{}}必须省略 when 语句:

tasks:
  - name: one of elements of a in b
    debug: msg=One of elements of a is contained in b
    when: a | intersect(b) | length > 0
Run Code Online (Sandbox Code Playgroud)