shell/command modules not providing output from playbook on Raspberry Pis

Using Ansible 2.11.6 from Ubuntu. I have two Raspberry Pis in inventory. One is an older Pi3 with Stretch; the other a Pi4 with Buster.

$ ansible -i inventory -m shell -a "df -h" all

shows the result of df -h for both Pis, as expected. But

$ ansible-playbook -i inventory main.yml

where main.yml is

---
- hosts: all
  tasks:
    - name: show disk space
      shell:
        cmd: df -h

after gathering facts, shows

TASK [show disk space] *******************
changed: [pi4]
changed: [pi3]

without showing the output of df -h.

I've tried command: instead of shell:. I've tried executable: /bin/bash. No difference. The same main.yml works with a Vagrant ansible provisioner when building an Ubuntu VM, and shows df -h output.

What am I missing?

Update This was a mistake on my end. The Vagrantfile template I'd been using included ansible.verbose = true. Remove that, and everything behaves consistently.


At the default verbosity task results are not shown by the default stdout callback. Ad hoc commands normally use the minimal callback, which has different behaviour. If you are seeing it in the Vagrant output it is either using a different callback or running with a higher verbosity, where more information is displayed:

ec2-user@pandora ~ $ ansible-playbook test.yml 

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

TASK [command] *****************************************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
ec2-user@pandora ~ $ ANSIBLE_STDOUT_CALLBACK=minimal ansible-playbook test.yml
localhost | CHANGED | rc=0 >>
Filesystem                                 Size  Used Avail Use% Mounted on
devtmpfs                                   3.9G     0  3.9G   0% /dev
tmpfs                                      3.9G  272K  3.9G   1% /dev/shm
tmpfs                                      3.9G  8.9M  3.9G   1% /run
tmpfs                                      3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/nvme0n1p1                              12G  7.3G  4.8G  61% /
/dev/nvme1n1                                40G  9.0G   32G  23% /home
fs-c2c955bb.efs.us-east-2.amazonaws.com:/  8.0E     0  8.0E   0% /ammit
tmpfs                                      788M     0  788M   0% /run/user/1913323
tmpfs                                      788M     0  788M   0% /run/user/257994
tmpfs                                      788M     0  788M   0% /run/user/1000
ec2-user@pandora ~ $ ansible-playbook test.yml -vvv
ansible-playbook [core 2.11.5] 
  config file = /home/ec2-user/ansible-aws/ansible/ansible.cfg
  configured module search path = ['/home/ec2-user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/ec2-user/ansible-aws/.venv/lib/python3.8/site-packages/ansible
  ansible collection location = /home/ec2-user/ansible-aws/ansible/collections
  executable location = /home/ec2-user/ansible-aws/.venv/bin/ansible-playbook
  python version = 3.8.5 (default, Feb 18 2021, 01:24:20) [GCC 7.3.1 20180712 (Red Hat 7.3.1-12)]
  jinja version = 3.0.2
  libyaml = True
Using /home/ec2-user/ansible-aws/ansible/ansible.cfg as config file
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: test.yml *************************************************************
1 plays in test.yml

PLAY [localhost] ***************************************************************
META: ran handlers

TASK [command] *****************************************************************
task path: /home/ec2-user/test.yml:4
Using module file /home/ec2-user/ansible-aws/.venv/lib/python3.8/site-packages/ansible/modules/command.py
Pipelining is enabled.
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: ec2-user
<127.0.0.1> EXEC /bin/sh -c 'sudo -H -S -n  -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-gljjnrdznzzibrxampvyyzigtjnozzra ; /home/ec2-user/ansible-aws/.venv/bin/python'"'"' && sleep 0'
changed: [localhost] => {
    "changed": true,
    "cmd": [
        "df",
        "-h"
    ],
    "delta": "0:00:00.004672",
    "end": "2021-10-20 12:22:07.355248",
    "invocation": {
        "module_args": {
            "_raw_params": "df -h",
            "_uses_shell": false,
            "argv": null,
            "chdir": null,
            "creates": null,
            "executable": null,
            "removes": null,
            "stdin": null,
            "stdin_add_newline": true,
            "strip_empty_ends": true,
            "warn": false
        }
    },
    "msg": "",
    "rc": 0,
    "start": "2021-10-20 12:22:07.350576",
    "stderr": "",
    "stderr_lines": [],
    "stdout": "Filesystem                                 Size  Used Avail Use% Mounted on\ndevtmpfs                                   3.9G     0  3.9G   0% /dev\ntmpfs                                      3.9G  124K  3.9G   1% /dev/shm\$
tmpfs                                      3.9G  8.8M  3.9G   1% /run\ntmpfs                                      3.9G     0  3.9G   0% /sys/fs/cgroup\n/dev/nvme0n1p1                              12G  7.3G  4.8G  61% /\n/dev/nvme1n1      
                          40G  9.0G   32G  23% /home\nfs-c2c955bb.efs.us-east-2.amazonaws.com:/  8.0E     0  8.0E   0% /ammit\ntmpfs                                      788M     0  788M   0% /run/user/1913323\ntmpfs                      
                788M     0  788M   0% /run/user/257994",
    "stdout_lines": [
        "Filesystem                                 Size  Used Avail Use% Mounted on",
        "devtmpfs                                   3.9G     0  3.9G   0% /dev",
        "tmpfs                                      3.9G  124K  3.9G   1% /dev/shm",
        "tmpfs                                      3.9G  8.8M  3.9G   1% /run",
        "tmpfs                                      3.9G     0  3.9G   0% /sys/fs/cgroup",
        "/dev/nvme0n1p1                              12G  7.3G  4.8G  61% /",
        "/dev/nvme1n1                                40G  9.0G   32G  23% /home",
        "fs-c2c955bb.efs.us-east-2.amazonaws.com:/  8.0E     0  8.0E   0% /ammit",
        "tmpfs                                      788M     0  788M   0% /run/user/1913323",
        "tmpfs                                      788M     0  788M   0% /run/user/257994"
    ]
}
META: ran handlers
META: ran handlers

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

You can also explicitly output things using debug:

---
- hosts: all
  tasks:
  - name: get disk space
    command:
      cmd: df -h
    register: result

  - debug:
      msg: "{{ result.stdout_lines }}"
ec2-user@pandora ~ $ ansible-playbook test.yml 

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

TASK [get disk space] **********************************************************
changed: [localhost]

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": [
        "Filesystem                                 Size  Used Avail Use% Mounted on",
        "devtmpfs                                   3.9G     0  3.9G   0% /dev",
        "tmpfs                                      3.9G  124K  3.9G   1% /dev/shm",
        "tmpfs                                      3.9G  8.8M  3.9G   1% /run",
        "tmpfs                                      3.9G     0  3.9G   0% /sys/fs/cgroup",
        "/dev/nvme0n1p1                              12G  7.3G  4.8G  61% /",
        "/dev/nvme1n1                                40G  9.0G   32G  23% /home",
        "fs-c2c955bb.efs.us-east-2.amazonaws.com:/  8.0E     0  8.0E   0% /ammit",
        "tmpfs                                      788M     0  788M   0% /run/user/1913323",
        "tmpfs                                      788M     0  788M   0% /run/user/257994"
    ]
}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

You are missing the debug task that would show the output.

---
- hosts: all
  tasks:
  - name: show disk space
    shell:
      cmd: df -h
    register: df
  - debug:
      var: df

Ansible does not show the output of the command directly.