Назад | Перейти на главную страницу

Отклонить в доступной переменной списка

У меня такая переменная:

apps:
 - {name: kapitalism, extension: .war}
 - {name: socialism, extension: .war}
 - {name: somethingelse, extension: .ear}

И мне нужно сделать на его основе еще один, который не будет включать часть списка. Я пробую это:

- name: Reject this please
  set_fact:
    apps: "{{ apps | map(attribute='name') | reject('search',item.name) | list }}"
  when: "item.name.find('socialism') != -1"
  with_items: "{{ apps }}"

Но тут у меня такая проблема, что теряется параметр расширения и я получаю переменную:

apps: [u'kapitalism', u'somethingelse']

Как сделать такую ​​переменную:

apps:
 - {name: kapitalism, extension: .war}
 - {name: somethingelse, extension: .ear}

?

Игра ниже

  vars:
    apps2: []
    apps:
      - {name: A, extension: .ab}
      - {name: B, extension: .ab}
      - {name: C, extension: .c}

  tasks:
    - set_fact:
        apps2: "{{ apps2 + [ item ] }}"
      loop: "{{ apps }}"
      when: item.name != 'C'
    - debug:
        var: apps2

дает (в сокращении):

"apps2": [
    {
        "extension": ".ab", 
        "name": "A"
    }, 
    {
        "extension": ".ab", 
        "name": "B"
    }
]

Такого же результата можно добиться с помощью rejectattr (Новое в версии 2.7.)

- set_fact:
    apps2: "{{ apps|rejectattr('name', 'match', 'C')|list  }}"