Print Ansible header before executing a long running task

ansibleansible-playbook

Context

I have an Ansible playbook that includes a very long task, up to one hour.

Very simplified, it looks like:

- hosts: localhost
  tasks:
  - name: Short task
    debug:
      msg: "I'm quick!"

  - name: Long task
    shell: "sleep 15s"

When the user runs the playbook, the output is at first:

PLAY [localhost] ********************
TASK [Gathering Facts] **************
ok: [127.0.0.1]

TASK [Short task] *******************
ok: [127.0.0.1] => {
    "msg": "I'm quick!"
}

(hang there until Long task is done)

TASK [Long task] ********************
changed: [127.0.0.1]

Problem

The end users of the playbook believe that there is a problem with Short task since it hangs there, while it's Long task that is causing the delay.

Question

How could I configure ansible or the playbook to print the headers defined in name: before excuting the task?

What I what to achieve is an output like:

PLAY [localhost] ********************
TASK [Gathering Facts] **************
ok: [127.0.0.1]

TASK [Short task] *******************
ok: [127.0.0.1] => {
    "msg": "I'm quick!"
}

TASK [Long task] ********************

(and hang there during the execution)

changed: [127.0.0.1]

Best Answer

Migrating my comment to an answer upon OP's request


I am using Ansible 2.9.2.

I tried with no config file and with a config file with no value declared for stdout_callback (default). I cannot reproduce your problem in either case.

This is my test playbook:

---
- hosts: localhost
  gather_facts: false

  tasks:

    - name: Short running
      debug:
        msg: I'm a short task

    - name: LOOOOOOOOOng task
      shell: sleep 2000

And the result (in both cases. Note: interruption by user after task header display)

$ ansible-playbook /tmp/play.yml  

PLAY [localhost] **************************************************************************************************************************************************************************************************

TASK [Short running] **********************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "I'm a short task"
}

TASK [LOOOOOOOOOng task] ******************************************************************************************************************************************************************************************
^C [ERROR]: User interrupted execution

Double check which config file you are loading with ansible-playbook --version in the directory where you are going to launch the playbook. I also suggest you try without any config file to see if it fixes your issue (and then see which setting is actually causing the issue).


Added from OP's comment: it turns out the problematic setting in ansible.cfg in this specific case was display_skipped_hosts=False

Related Topic