Прервать, если ни одна из предыдущих задач не была выполнена

У меня есть tasks.yml который содержит что-то вроде:

- name: something on Debian wheezy
  when: ansible_distribution == 'Debian' and ansible_distribution_version == '7'

- name: something on Debian jessie
  when: ansible_distribution == 'Debian' and ansible_distribution_version == '8'

- name: something on Ubuntu
  when: ansible_distribution == 'Ubuntu'

Я хочу добавить задачу (или что-то), которая прерывает playbook, если ни одна из этих задач не была выполнена.

Может быть, "что-то" устанавливает пакет, а некоторые задачи, которые следуют, настраивают этот недавно установленный пакет. Если я запускаю playbook в системе RedHat, этот пакет не будет установлен, и я хочу прервать его перед выполнением задач, которые его настраивают.

Я думаю, что я мог бы сделать что-то вроде:

- fail: msg="abort!"
  when: not (ansible_distribution == 'Debian' and ansible_distribution_version == '7') and not (ansible_distribution == 'Debian' and ansible_distribution_version == '8') and not ansible_distribution == 'Ubuntu'

... но это раздражает. Есть ли лучшее решение?

2 ответа

Решение
---
- name: test
  hosts: localhost

  tasks:
  - name: Install pkg
    debug: msg="Installed pkg"
    when: "{{ ansible_distribution == 'Debian' }}"
    register: debian_pkg

  - name: Install pkg
    debug: msg="Installed pkg"
    when: "{{ ansible_distribution == 'Ubuntu' }}"
    register: ubuntu_pkg

  - fail: msg="Unsupported OS"
    when: "debian_pkg|skipped and ubuntu_pkg|skipped"

Я наконец пошел более простым, более "деловым", точным путем. Я хочу установить somethingи я тогда ожидаю something быть установленным. На самом деле, в моей инфраструктуре, где не все автоматизировано (я не везде), я иногда не могу установить something, но я все еще хочу проверить, что он установлен (он был установлен вне диапазона).

Итак, после задач, которые устанавливают something в зависимости от ОС, я добавил задачу, которая проверяет, установлена ​​ли она, просто пытаясь запустить ее. Что-то вроде того:

- include: install_something.yml # contains the install tasks for each OS
  when: can_become_root

- name: Check that something is installed
  command: something --version
Другие вопросы по тегам