Я имею переменный анзибль, содержащий список веб-сервера (все на тот же хост):Run анзибль обработчики на основе измененных результатов несколько петель
servers:
- foo
- bar
- baz
И задачу, которая меняет свои файлы конфигурация и регистров результаты в переменной:
- name: create server configs
template: ...
with_items: "{{ servers }}"
notify: restart changed servers
register: servers_changed
и обработчик, который перезапускает только серверы, которые изменены, когда эта задача выполняется:
- name: restart changed servers
command: restart-my-server {{ item.item.name }}
when: item.changed
with_items: "{{ servers_changed.results }}"
Моя проблема в том, что мне теперь нужно несколько задач, таких как выше, которые меняют разные файлы конфигурации. Но если я это сделаю, они будут перезаписывать переменную servers_changed
, поэтому будет использоваться только последняя.
Я могу регистрировать разные переменные в каждой задаче, но тогда мне нужен другой обработчик для каждого из них. Это будет беспорядочно. Есть ли способ лучше?
Прохладный. Но почему бы не использовать 'with_items:" {{restart_servers}} "' непосредственно в обработчике, исключив это 'when' ...? –
@WojciechKaczmarek Я думаю, я упростил вещи слишком много для моего примера. В моей реальной настройке 'servers' - это список dicts с подробностями о каждом сервере, но' restart_servers' - это всего лишь список имен, идентифицирующих каждый сервер. Вместо этого вы можете перехватывать обработчик вместо 'restart_servers', но цикл над серверами позволяет ему получить доступ к сведениям о каждом перезапуске сервера. В качестве примера у меня есть мой обработчик, который смотрит на номер порта каждого сервера и дождитесь, пока он станет открытым до продолжения. –
Я обновил пример. –