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

Уведомление / обработчик в стиле Pubsub в Ansible (перезапуск всех служб с использованием исходного кода при его изменении)

У меня есть роль, которая обновляет исходный код моего проекта из git, назовите ее source_tree. Репозиторий Git содержит источник, используемый несколькими службами, поэтому я хочу перезапустите все службы, использующие этот источник, на каждом хосте, если обнаружено изменение в git.

То есть:

- git: repo=ssh://git@github.com/mylogin/hello.git dest=/home/mylogin/hello
  notify: restart everything dependent on source code

Например, у меня есть роли webapp, notification_service, celery. У хоста может быть любой набор таких ролей, например, запускается первый сервер. webapp, второй запускает оба notification_service и celery. Все эти службы используют исходный код из одного каталога.

Проблема в следующем:

Как преодолеть эти ограничения?

Я не тестировал это для разных ролей, но вы можете попробовать зарегистрировать результаты задачи git

- git: repo=ssh://git@github.com/mylogin/hello.git dest=/home/mylogin/hello
  register: gitrc

Затем прочтите его по каждой из ролей. Например,

в webapp/tasks/main.yml:

- supervisorctl: name=uwsgi state=restarted
  when: gitrc|changed

в celery/tasks/main.yml:

- supervisorctl: name=celery state=restarted
  when: gitrc|changed

Конечно, они становятся задачами, а не обработчиками.