Как предотвратить запуск двух заданий ANSI на одном компьютере?
Чтобы избежать неожиданностей, я хочу реализовать решение, которое предотвращает одновременное развертывание на одном и том же целевом хосте.
Пожалуйста, помните, что мы не хотим препятствовать возможности развертывания с наших собственных компьютеров вместо централизованного административного сервера.
Мы просто хотим заверить, что мы не делаем то же самое параллельно.
3 ответа
Вы можете проверить файл и удалить файл на хосте, с которым вы выполняете:
tasks:
- stat: path=.ansible_lock_file
register: lock_file_check
- fail: msg="ansible is already being run against this host"
when: lock_file_check.stat.exists
- file: path=.ansible_lock_file state=touch`
И удалите его в конце вашей пьесы
- file: path=.ansible_lock_file state=touch
Хотя это еще не полный ответ, у меня сложилось впечатление, что элегантным решением является написание плагина обратного вызова, который реализует это.
Тем не менее, я не уверен, что API-интерфейс обратного вызова позволяет мне вводить дополнительные задачи для запуска, доступа к переменным или отмены воспроизведения в некоторых условиях.
https://github.com/ansible/ansible/blob/devel/lib/ansible/plugins/callback/osx_say.py
В то время как файл блокировки является техническим решением, я бы вместо этого предложил культурное решение: вокализованную "блокировку развертывания".
Многие команды разработчиков имеют внутренний канал чата, где они координируют релизы; бот отображает состояние всех текущих выпусков, и разработчики упоминают, когда они собираются что-то развернуть. Иногда это немного формализуется: бот также отслеживает, кто имеет блокировку, или даже поддерживает очередь людей в очереди на блокировку.
Вы можете сделать то же самое с вашей операционной командой. Это немного проще, чем полагаться на код, который вы написали, чтобы быть верным, и, что более важно, он помогает держать всех на одной странице - и для большего количества систем чата автоматически предоставляет журнал того, что изменилось, когда.