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

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

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}

?

1 ответ

Решение

Игра ниже

  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  }}"
Другие вопросы по тегам