Abort execution of remaining task if certain condition is failed

AnsibleAnsible Playbook

Ansible Problem Overview


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.

Ansible Solutions


Solution 1 - Ansible

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

Solution 2 - Ansible

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

Solution 3 - Ansible

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"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRoopendraView Question on Stackoverflow
Solution 1 - AnsibleDomaNitroView Answer on Stackoverflow
Solution 2 - AnsibleFlorian BraunView Answer on Stackoverflow
Solution 3 - AnsiblehillsyView Answer on Stackoverflow