2016-12-02 37 views
5

Listeden bir öğeyi başka bir listeye göre kaldırmak istiyorum.Ansible - listeden bir öğe nasıl kaldırılır?

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

Benim ikinci liste:

"my_list_two": [ 
    "item3" 
] } 

Yeni gerçeğini ayarlamak için, bu listeden 'item3' nasıl kaldırırım? '-'
kullanıyorum çalıştı bu ve:

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

sonu hedefi:

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

yapabilirsiniz Sana Sendikası'nın 'anlamını anlamak sanmıyorum. Farkı istiyorsun –

cevap

7

Kullanım difference değil union:

{{ my_list_one | difference(my_list_two) }} 

bir örnek oyun kitabı (not olduğunu size ayrıca set_fact için değişken isim sağlamalıdır):

--- 
- hosts: localhost 
    connection: local 

    vars: 
    my_list_one: 
     - item1 
     - item2 
     - item3 

    my_list_two: 
     - item3 

    tasks: 
    - set_fact: 
     my_list_one: "{{ my_list_one | difference(my_list_two) }}" 

    - debug: var=my_list_one 

sonuç (alıntı):

TASK [debug] ******************************************************************* 
ok: [localhost] => { 
    "my_list_one": [ 
     "item1", 
     "item2" 
    ] 
} 
+0

Mükemmel örnek! Teşekkürler. – rujmah

1

Ansible - Set Theory Filters

(2 bulunmayan 1 öğeler) 2 listelerinin farkını almak için:

{{ list1 | difference(list2) }} 

Not: Saf Python sadece jinja2 şablonu, olduğuna göre sen {{ my_list_one | difference(my_list_two) }}


istiyorum böylece konularda Sipariş, list - list tanımlı değil.

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' 

Bunun yerine, liste-anlama

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