Прервать выполнение оставшейся задачи, если определенное условие не выполнено
Я хочу прервать выполнение оставшейся задачи, если определенное условие не выполнено.
и отобразить правильное сообщение об ошибке.
Итак, вместо пропуска оставшейся задачи я хочу показать сообщение об ошибке и прекратить выполнение доступной пьесы.
Предположим, что я выполняю команду
$ ansible-playbook playbook.yml -e "param1=value1 param2=value"
Моя playbook выглядит так: -
playbook.yml: -
---
- hosts: local
user: roop
gather_facts: no
vars: {param1: "", param2: ""}
tasks:
#check whether param1 defined
- name: 'Check for valid param1'
shell: echo {{ param1 }}
register: isValidParam1
when: param1 !=""
#check if param1 is null or invalid
- name: 'check if param1 is null or invalid'
debug: msg="Please enter correct param1"
when: param1 == ""
#check whether param2 defined
- name: 'Check for valid param2'
shell: echo {{ param2 }}
register: isValidParam2
when: param2 != ""
#check if param2 is null or invalid
- name: 'check if param2 is null or invalid'
debug: msg="Please enter correct param2"
when: param2 == ""
#check params is valid and defined
- name: 'Check for valid params'
shell: echo "param1={{ param1 }} param2={{ param2 }}
register: validParams
when: isValidParam1 is defined and isValidParam2 is defined
#check if params are invalid then abort below all tasks.
- name: 'check if validParams is null or invalid'
debug: msg="Please enter correct Params"
when: validParams is not defined
# based on validParams, and different value of param1 more than
10 task executing.
Как я уже упоминал в своем последнем комментарии к задаче. Я выполняю более 10 задач на основе validParams
и param1
различного значения. Что мне нужно здесь
если validParams
- undefined, то прервать все выполнение и показать сообщения об ошибках.
Есть ли эффективный способ сделать это. Пожалуйста, предложите мне.
Ответы
Ответ 1
Вы можете использовать assert http://docs.ansible.com/assert_module.html или не выполнить http://docs.ansible.com/fail_module.html
Он будет сочетаться с чем-то вроде этого
#check if params are invalid then abort below all tasks.
- name: 'check parm is null or invalid'
fail: msg="Please enter correct Params"
when: "param1 is not defined or param2 is not defined " ## whatever condition you want
Ответ 2
Итак, в Ansible 2.2+ есть метамодуль: http://docs.ansible.com/ansible/latest/meta_module.html
So
meta: end_play
останавливает воспроизведение в режиме воспроизведения без проблем.
Ответ 3
Ansible >= 2.0 имеет функцию которая позволяет логически группировать задачи. Это позволяет применить к группе задач команду.
Основное различие между этим и модулем fail или assert заключается в том, что задача не помечена как сбой; он просто пропустил. Будет ли это лучше, зависит от вашего варианта использования. Например, у меня есть некоторые задачи, которые записываются в журнал, который позже разбирался в случае сбоев; это проще сделать, если регистрируются только "реальные" условия отказа.
Пример кода:
- block:
# task 1
# task 2
# task 3
when: "param1 is defined or param2 is defined"
# otherwise output a message
- block:
debug: msg="Missing params"
when: "param1 is not defined or param2 is not defined"