Отклонить в переменную списка 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 }}"