使用jinja2计算设定差(在ansible中)

2rs*_*2ts 4 python jinja2 ansible

我在ansible剧本中有两个字符串列表,并且我试图在列表A中查找不在列表B中的元素-设置不同。但是,我似乎无法访问python set数据结构。这是我正在尝试做的事情:

- set_fact:
    difference: "{{ (set(listA) - set(listB)).pop() }}"
Run Code Online (Sandbox Code Playgroud)

但是我说错了'set' is undefined。对我来说很有意义,因为它不是变量,但我不知道该怎么办。如何计算这两个列表的设置差异?Ansible中的股票Jinja功能是否不可能?

Adr*_*erc 7

在通用 Jinja2 中,这可以很容易地实现,将reject过滤器与in测试结合起来:

"{{ listA | reject('in', listB) | first }}"
Run Code Online (Sandbox Code Playgroud)

这需要 Jinja >= 2.10


2rs*_*2ts 6

事实证明,有一个内置的过滤器叫做difference

这完成了我在问题中试图做的事情:

"{{ (listA | difference(listB)) | first }}"
Run Code Online (Sandbox Code Playgroud)