I want to echo something to a file using local_action and shell module. When I use echo -e
, ansible will treat -e
as string to print rather than a command line argument. See below:
$ cat t.yaml
- hosts: localhost
remote_user: root
gather_facts: False
tasks:
- name: test
local_action: shell echo -e abc
$ ansible-playbook -vv t.yaml
PLAY [localhost] **************************************************************
TASK: [test] ******************************************************************
<127.0.0.1> REMOTE_MODULE command echo -e abc #USE_SHELL
changed: [localhost -> 127.0.0.1] => {"changed": true, "cmd": "echo -e abc", "delta": "0:00:00.006123", "end": "2015-09-17 11:04:00.381722", "rc": 0, "start": "2015-09-17 11:04:00.375599", "stderr": "", "stdout": "-e abc", "warnings": []}
PLAY RECAP ********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0
The stdout filed shows that ansible echo a string that is -e abc
which include the command line argument -e
. I also test it without local_action option in the playbook. Its behavior is normal as I expected.
$ cat t.yaml
- hosts: localhost
remote_user: root
gather_facts: False
tasks:
- name: test
shell: echo -e abc
$ ansible-playbook -vv t.yaml
PLAY [localhost] **************************************************************
TASK: [test] ******************************************************************
<localhost> REMOTE_MODULE command echo -e abc #USE_SHELL
changed: [localhost] => {"changed": true, "cmd": "echo -e abc", "delta": "0:00:00.001969", "end": "2015-09-17 03:06:25.842056", "rc": 0, "start": "2015-09-17 03:06:25.840087", "stderr": "", "stdout": "abc", "warnings": []}
PLAY RECAP ********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0
This time the stdout does not include the -e
argument.
Is there something else I need to do when use local_action and shell module to execute command with argument?