Ansible – How to Get Output of Shell Script Command on Stdout

ansible

I create this simple script which adjust timezone on all machines, called date.sh

#!/bin/sh
# Exit at first error

set -e

# Set the localtime
timedatectl set-timezone Europe/Zurich

# Check date
date

I run it with ansible

- name: Transfer and execute a script.
  hosts: all
  become_user: root
  tasks:
     - name: Transfer the script
       copy: src=date.sh dest=/tmp/date.sh mode=0700

     - name: Execute the script
       command: sh /tmp/date.sh

Works, but how to see output on stdout?
I have tried this, but give me error.

- name: Transfer and execute a script.
  hosts: all
  become_user: root
  tasks:
     - name: Transfer the script
       copy: src=date.sh dest=/tmp/date.sh mode=0700

     - name: Execute the script
       command: sh /tmp/date.sh

  debug:
    msg: "{{ test.stdout.split('\n') }}"

Best Answer

You should consider just using the script module which will do the copy and execution for you.

After that you need to use the task argument register to store the results into a variable. Once the results are stored you can display it with a debug task.

- name: Transfer and execute a script.
  hosts: all
  become_user: root
  tasks:
  - script: date.sh
    register: results
  - debug:
      var: results.stdout

P.S. There is a timezone module. So you could use that and not have to use a script at all.