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

Calculate set difference using jinja2 (in ansible)

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

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

但我收到一条错误消息 'set' is undefined。对我来说很有意义,因为它不是一个变量,但我不知道还能做什么。如何计算这两个列表的集合差异? ansible 中的 stock jinja 功能是不可能的吗?

原来有一个名为 differencebuilt-in filter for this in ansible(不是通用神社)。

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

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

在通用 Jinja2 中,这可以很容易地实现,结合 reject filter with the in 测试:

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

这需要 Jinja >= 2.10