Score:0

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

se flag

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.

Score:2
th flag

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   
in flag
You always learn something new. This should be the accepted answer.
se flag
That makes sense, and led me to discover my mistake. Thanks.
Score:2
in flag

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.

se flag
Thanks. Weird that the Ansible provisioner in Vagrant behaves differently.
in flag
I have no experience with Vagrant, so I can only assume that it's a Vagrant feature to show the output directly. I looked through the [Ansible settings](https://docs.ansible.com/ansible/latest/reference_appendices/config.html) but couldn't find anything that sounds like it would be helpful.
mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.