Я бы взял проблему в обратном порядке: вместо того, чтобы фильтровать мой список для каждой задачи, чтобы потенциально вынести элемент, я бы определил свой список с элементами по умолчанию и добавил дополнительный, если пользователь ответил да.
Примечание: ваши два списка идентичны, я сохранил только один в следующем примере:
---
- hosts: localhost
gather_facts: false
vars_prompt:
- name: rmetcd
prompt: "Remove etcd [yes/no]?"
private: no
vars:
_default_services:
- mysql
- postgres
services: "{{ _default_services + (rmetcd | bool | ternary(['etcd'], [])) }}"
tasks:
- name: task1
debug:
msg: "remove container {{ item }}"
loop: "{{ services }}"
- name: taks2
debug:
msg: "remove folder {{ item }}"
loop: "{{ services }}"
Ключевые моменты:
- Я определил «личную» переменную
_default_services
, Это список служб, которые всегда будут включены. - Я вычислил переменную
services
, которая является дополнением к двум спискам: _default_services
и дополнительному значению, добавляемому в зависимости от пользовательского ввода. Для этого последнего: - Я использовал
rmetcd
, содержащий значение (которое должно быть "да" или "нет") - Я применил фильтр
bool
для приведения значения к логическому - , и я использовал фильтр
ternary
, чтобы выбрать один список элементов, если он истинный (['etcd']
), и пустой список, если ложь ([]
) .