Прервать, если ни одна из предыдущих задач не была выполнена
У меня есть 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