使用 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 功能是不可能的吗?
原来有一个名为 difference
的 built-in filter for this in ansible(不是通用神社)。
这完成了我在问题中尝试做的事情:
"{{ (listA | difference(listB)) | first }}"
在通用 Jinja2 中,这可以很容易地实现,结合 reject
filter with the in
测试:
"{{ listA | reject('in', listB) | first }}"
这需要 Jinja >= 2.10
我的 ansible 剧本中有两个字符串列表,我试图找到列表 A 中不在列表 B 中的元素 - 一组差异。但是,我似乎无法访问 python set
数据结构。这是我尝试做的事情:
- set_fact:
difference: "{{ (set(listA) - set(listB)).pop() }}"
但我收到一条错误消息 'set' is undefined
。对我来说很有意义,因为它不是一个变量,但我不知道还能做什么。如何计算这两个列表的集合差异? ansible 中的 stock jinja 功能是不可能的吗?
原来有一个名为 difference
的 built-in filter for this in ansible(不是通用神社)。
这完成了我在问题中尝试做的事情:
"{{ (listA | difference(listB)) | first }}"
在通用 Jinja2 中,这可以很容易地实现,结合 reject
filter with the in
测试:
"{{ listA | reject('in', listB) | first }}"
这需要 Jinja >= 2.10