Запускать обработчики независимо от сбоя задачи?

У меня есть роль Ansible с следующие задачи:

---
 # optionally find the latest version of goss using the GitHub "API"
 - name: detect latest version
   shell: |
    curl -sIS https://github.com/aelsabbahy/goss/releases/latest | \
      tr -d '\r' | \
      grep -oP '(?<=Location:\s).*' | \
      grep -oP '(?<=v)\d+\.\d+\.\d+'
   register: detected_latest
   when: version == "latest"

 - name: set detected version
   set_fact:
     real_version: "{{ detected_latest.stdout.strip() }}"
   when: version == "latest"

 - name: set specified verison
   set_fact:
     real_version: "{{ version }}"
   when: version != "latest"

 # set play facts
 - name: set facts
   set_fact:
     download_url: "https://github.com/aelsabbahy/goss/releases/download/v{{ real_version }}/goss-linux-amd64"

 # create goss directories
 - name: create goss directories
   file: path={{ item }} state=directory
   with_items:
     - /tmp/degoss
     - /tmp/degoss/bin
     - /tmp/degoss/tests
   notify: clean

 # download goss
 - name: install
   get_url:
     url: "{{ download_url }}"
     dest: /tmp/degoss/bin/goss
     mode: 0755

 # deploy test cases
 - name: deploy tests
   copy: src={{ item }} dest=/tmp/degoss/tests/
   with_items: "{{ tests }}"

 # run the tests
 - name: run tests
   goss: executable=/tmp/degoss/bin/goss path="{{ item }}" format="{{ format }}"
   with_fileglob: /tmp/degoss/tests/*.yml

А именно, когда create goss directories запускается, он запускает обработчик clean :

---
# handlers file for degoss
 - name: clean
   file: path=/tmp/degoss state=absent

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

Есть ли способ из моей роли заставить Ansible запускать этот обработчик независимо от того, что произошло в задачах?


person Naftuli Kay    schedule 15.02.2017    source источник


Ответы (2)


Цитируя главу Обработчики и ошибки:

Вы можете изменить это поведение с помощью параметра командной строки --force-handlers или включив force_handlers: True в игру или force_handlers = True в ansible.cfg. Когда обработчики принудительно запущены, они будут запускаться при уведомлении, даже если задача на этом хосте завершится неудачно. (Обратите внимание, что некоторые ошибки могут помешать запуску обработчика, например, хост становится недоступным.)

person techraf    schedule 15.02.2017
comment
Это было бы более полезно, если бы вы включили пример... - person Eugéne; 31.08.2020

person    schedule
comment
Никаких объяснений, ничего общего с обработчиками и сломанным отступом YAML... - person Konstantin Suvorov; 28.07.2017
comment
Из очереди на проверку: могу я попросить вас добавить контекст к вашему ответу. Ответы, содержащие только код, трудно понять. Если вы добавите больше информации в свой пост, это поможет как автору вопроса, так и будущим читателям. См. также Объяснение полностью основанных на коде ответов. - person help-info.de; 28.07.2017