#ansible
#ansible
Вопрос:
Я написал учебник, который запускает обработчики, если задача выполнена успешно.Теперь я хочу использовать некоторые условия типа, которые в случае сбоя вышеуказанной задачи затем запускают другой обработчик. Точно так же, как работает простое выражение IF else.
Текущая книга воспроизведения
tasks:
- name: checking file format
command: named-checkzone example.com /var/named/example.com
notify: service
handlers:
- name: "service reload"
command: rndc reload example.com
listen: "service"
Теперь я хочу опустить имя файла в файле конфигурации, если основные задачи не выполняются
Ответ №1:
Вопрос: «1) Запустите обработчик, если задача выполнена успешно. 2) Если задача завершается неудачей, запустите другой обработчик.»
О: Простой способ — уведомить обработчик о изменении задачи. При сбое задачи статус «сбой» не изменен, и обработчик не уведомляется.
В данном конкретном случае вам все равно, удалась команда или нет. Обработчик всегда должен получать уведомления. Этого можно достичь с помощью явной комбинации ignore_errors, failed_when, and changed_when
.
Уведомить оба обработчика service success
и service fail
. Условия в обработчиках будут определять, какой обработчик будет запущен. Например, playbook
shell> cat playbook.yml
- hosts: localhost
tasks:
- command: "{{ cmd }}"
register: named_checkzone_result
ignore_errors: true
failed_when: false
changed_when: true
notify:
- service success
- service fail
handlers:
- name: service success
debug:
msg: Service success
when: named_checkzone_result.rc == 0
- name: service fail
debug:
msg: Service fail
when: named_checkzone_result.rc == 1
выдает (сокращенно), если команда выполнена успешно
shell> ansible-playbook playbook.yml -e "cmd=true"
TASK [command] ****
changed: [localhost]
RUNNING HANDLER [service success] ****
ok: [localhost] =>
msg: Service success
RUNNING HANDLER [service fail] ****
skipping: [localhost]
выдает (сокращенно) в случае сбоя команды
shell> ansible-playbook playbook.yml -e "cmd=false"
TASK [command] ****
changed: [localhost]
RUNNING HANDLER [service success] ****
skipping: [localhost]
RUNNING HANDLER [service fail] ****
ok: [localhost] =>
msg: Service fail