Запустите play book с несколькими условиями

#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