Ansible - 如何从列表中删除项目?

时间:2016-12-02 08:32:14

标签: python ansible jinja2

我想根据其他列表从列表中删除项目。

"my_list_one": [
    "item1",
    "item2",
    "item3"
] }

我的第二个清单:

"my_list_two": [
    "item3"
] }

如何删除' item3'从这个清单中,设定一个新的事实? 我尝试过使用' - '而这:

set_fact: "{{ my_list_one | union(my_list_two) }}"

结束目标:

"my_list_one": [
    "item1",
    "item2"
] }

1 个答案:

答案 0 :(得分:2)

Ansible - Set Theory Filters

  

获得2个列表(1中不存在于2中的项目)的区别:

{{ list1 | difference(list2) }}

注意:订单很重要,因此您需要{{ my_list_one | difference(my_list_two) }}

由于它只是一个Jinja2模板,在纯Python中,list - list未定义。

In [1]: list1 = [1, 2, 3]

In [2]: list2 = [3]

In [3]: list1 - list2
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-3-a683b4e3266d> in <module>()
----> 1 list1 - list2

TypeError: unsupported operand type(s) for -: 'list' and 'list'

相反,你可以做列表理解

In [5]: [i for i in list1 if i not in list2]
Out[5]: [1, 2]