Recently one of our developers complained the skipping tasks displayed in the ansible output. She insisted that the skipping tasks names and the skipping keyword should not be displayed, because these stuffs may confuse customers. I agree with her. Without the skipping task, the ansible output will be clean and tight.
Take the below ansible playbook demo.yml for example:
---
- name: demo play
hosts: localhost
remote_user: root
gather_facts: False
any_errors_fatal: True
tasks:
- name: task aa
shell: echo task aa
when: flag == 'aa'
- name: task bb
shell: echo task bb
when: flag == 'bb'
if we run the playbook using the below command, the skipping task bb is still displayed in the output:
ansible-playbook -i /etc/ansible/hosts -e 'flag=aa' demo.yml PLAY [demo play] ********************************************************************** TASK [task aa] ************************************************************************ changed: [localhost] TASK [task bb] ************************************************************************ skipping: [localhost] PLAY RECAP **************************************************************************** localhost : ok=1 changed=1 unreachable=0 failed=0
I searched the solution using google, however, most of the answers don’t hit the key point. Some answers suggest using stdout_callback = skippy in ansible configuration, while some suggest using display_skipped_host = false. Some answer even suggest writing a customized plugin. However, the first two methods can only suppress the skipping keyword in the output, but couldn’t suppress the skipping task name as below:
ansible-playbook -i /etc/ansible/hosts -e 'flag=aa' demo.yml PLAY [demo play] ********************************************************************** TASK [task aa] ************************************************************************ changed: [localhost] TASK [task bb] ************************************************************************ PLAY RECAP **************************************************************************** localhost : ok=1 changed=1 unreachable=0 failed=0
Writing a customized plugin requires a lot of effect! It seems that there is not a perfect solution…
In fact, there is one!! There is a callback plugin named full_skip, which can fully suppress the display of the skipping tasks in the ansible output. Take the below ansible.cfg for example:
[defaults] stdout_callback = full_skip
Run the same playbook again. Let’s see the output:
ansible-playbook -i /etc/ansible/hosts -e 'flag=aa' demo.yml PLAY [demo play] ********************************************************************** TASK [task aa] ************************************************************************ changed: [localhost] PLAY RECAP **************************************************************************** localhost : ok=1 changed=1 unreachable=0 failed=0
Wow. Using the full_skip callback plugin, we now can fully eliminate the output of the skipping tasks.