Я поместил это в свою основную книгу после
hosts: all.
lock_file_path
: Это файл, существование которого указывает на то, что в настоящее время выполняется развертывание без возможности развертывания или ранее было развертывание, которое по какой-то причине было прервано.
force_ignore_lock
: по умолчанию это значение равно false, сбрасывается с помощью флага параметра, который вы можете установить в оболочке командной строки на доступный. Это позволяет ansible продолжить развертывание.
Что это делает
pre_tasks
Первый pre_task
проверяет, существует ли lock_file_path
, и записывает результат в регистр с именем lock_file
.
Затем следующая задача проверяет, существует ли файл, и решил ли человек, выполняющий развертывание, проигнорировать его (надеюсь, после общения с другими товарищами по команде). В противном случае задание завершается с ошибкой с полезным сообщением об ошибке.
Если пользователь решит продолжить развертывание, даже если было lock_file
, следующая задача удалит ранее созданный lock_file
и создаст новый. Затем другие задачи в выбранной роли успешно продолжаются.
post_tasks
Это хук, вызываемый сразу после того, как все задачи в деплое были выполнены. Задача здесь удаляет lock_file
, позволяя следующему человеку выполнить развертывание без каких-либо проблем.
vars:
lock_file_path=/tmp/ansible-playbook-{{ansible_ssh_user}}.lock
pre_tasks:
- stat: path={{lock_file_path}}
register: lock_file
- fail: msg="Sorry, I found a lockfile, so I'm assuming that someone was already running ansible when you started this deploy job. Add -f to your deploy command to forcefully continue deploying, if the previous deploy was aborted."
when: lock_file.stat.exists|bool and not force_ignore_lock|bool
- file: path={{lock_file_path}} state=absent
sudo: yes
when: "{{force_ignore_lock}}"
- file: path={{lock_file_path}} state=touch
sudo: yes
post_tasks:
- file: path={{lock_file_path}} state=absent
sudo: yes
person
poppingtonic
schedule
11.11.2015