使用jinja2计算集合差异(在ansible中)

时间:2016-10-18 18:19:00

标签: python ansible jinja2

我的ansible playbook中有两个字符串列表,我试图找到列表A中不在列表B中的元素 - 一组差异。但是,我似乎无法访问python set数据结构。这就是我想要做的事情:

- set_fact:
    difference: "{{ (set(listA) - set(listB)).pop() }}"

但我收到错误'set' is undefined。对我有意义,因为它不是一个变量,但我不知道还能做什么。如何计算这两个列表的设定差异?在ansible中使用股票jinja功能是不可能的吗?

2 个答案:

答案 0 :(得分:5)

原来有一个名为difference的{​​{3}}(不是通用的jinja)。

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

"{{ (listA | difference(listB)) | first }}"

答案 1 :(得分:2)

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

"{{ listA | reject('in', listB) | first }}"

这需要Jinja> = 2.10