Reputation: 7762
I want to abort execution of remaining task if certain condition is failed. and display proper error message.
So instead of skipping remaining task I want to show error message and stop execution of ansible playbook.
Lets say I am running below command
$ ansible-playbook playbook.yml -e "param1=value1 param2=value"
My playbook look like this:-
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.
As I have mentioned in my last task comment. I am executing more than 10 task based on validParams
and param1
different value. What I need here
if validParams
is undefined then abort all execution and show error messages.
Is there any efficient way to do this . Please suggest me.
Upvotes: 58
Views: 113262
Reputation: 3234
You can use
It will go along with something like this
#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
Upvotes: 82
Reputation: 973
So in Ansible 2.2+ there is the meta module: http://docs.ansible.com/ansible/latest/meta_module.html
So
meta: end_play
stops the playbook with a non failing status
Upvotes: 34
Reputation: 699
Ansible >= 2.0 has a block feature that allows you to logically group tasks. This allows you to apply a when to a group of tasks.
The main difference between this and the fail or assert modules is that the task isn't marked as failed; it's just skipped. Whether this is better depends on your use case. For example I have some tasks that write to a log that's later parsed for failures; it's easier to do this if only "real" failure conditions are logged.
Example code:
- 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"
Upvotes: 15