2016-04-14 2 views
2

Во избежание сюрпризов я хочу реализовать решение, которое предотвращает параллельное развертывание на одном и том же целевом узле.Как предотвратить выполнение двух рабочих заданий на одном компьютере?

Пожалуйста, помните, что мы не хотим препятствовать возможности развертывания с наших собственных компьютеров, а не централизованного сервера администрирования.

Мы просто хотим заверить, что мы не делаем то же самое параллельно.

ответ

4

Вы можете проверить файл и поместите файл на хосте вы выполнить против:

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 
+0

Хорошее начало, но ему не хватает одного ключа часть: с треском проваливается, если Playbook не запускается полностью. Кроме того, было бы очень полезно иметь возможность реализовать весь этот учебник без дублирования кода. – sorin

+0

Вы можете использовать обработчики, чтобы предотвратить его зависание и использовать файл include, чтобы сделать его многоразовым в разных книгах. – ferrants

+0

Вы можете использовать новый метод спасения в Ansible 2.0 для этого: https://docs.ansible.com/ansible/playbooks_blocks.html#error-handling –

0

В то время как файл блокировки является техническое решение, я хотел бы предложить культурный вариант: вокализованный «блокировка развертывания».

Многие команды разработчиков имеют внутренний канал чата, где они координируют выпуск; бот отображает статус любых текущих релизов, и разработчики упоминают, когда они готовятся к развертыванию. Иногда это немного формализуется, и бот также отслеживает, кто имеет блокировку, или даже поддерживает очередь людей в очереди на блокировку.

Вы можете сделать то же самое с вашей командой операций. Это немного проще, чем полагаться на код, который вы написали, чтобы быть правильным, и, что более важно, он помогает держать всех на одной странице - и для большего количества чат-систем автоматически предоставляет журнал изменений, которые были изменены.

+0

Мы уже реализовали это для некоторых развертываний, но это не работает для CD. что почти каждое изменение запускает развертывание в тестовую среду, это может произойти даже 10 раз в час. Итак, мы закончили вокализацию (через доступный модуль slack) только некоторые из заданий развертывания. – sorin

1

Пока еще не полный ответ, я считаю, что элегантным решением является создание плагина обратного вызова, который реализует это.

Тем не менее, я не уверен, что API обратного вызова позволяет мне вводить дополнительные задачи для запуска, доступа к изменяемым переменным или прерывания воспроизведения в некоторых условиях.

https://github.com/ansible/ansible/blob/devel/lib/ansible/plugins/callback/osx_say.py

Смежные вопросы