pipeline (|) not working with the -e option

60 views
Skip to first unread message

DHAVAL JAISWAL

unread,
Sep 16, 2016, 10:01:07 AM9/16/16
to ansible...@googlegroups.com

Why extra variables (-e) ignoring commands after pipeline ("|") while running playbook with -e options.


Following playbook giving output till "netstat -an" only. I want the output of this "netstat -an | grep 8080" or any command which can be run at the run time on remote host.  


ansible-playbook /etc/ansible/command_run.yml -e "ip=192.168.4.10" -e 'command="netstat -an | grep 8080"'

command_run.yml

- hosts: "{{ip}}"
  gather_facts: no
  remote_user: remote
  connection: local

  tasks:
   - name: Running command
     command: ansible {{ip}} -a "{{command}}"



However, Following is working.

ansible-playbook /etc/ansible/command_run.yml -e "ip=192.168.4.10" -e 'command="free -m"'. 


Josh Smift

unread,
Sep 16, 2016, 10:10:27 AM9/16/16
to ansible...@googlegroups.com
DJ> Why extra variables (-e) ignoring commands after pipeline ("|") while
DJ> running playbook with -e options.

http://docs.ansible.com/ansible/command_module.html says

The command module takes the command name followed by a list of
space-delimited arguments. The given command will be executed on all
selected nodes. It will not be processed through the shell, so variables
like $HOME and operations like "<", ">", "|", ";" and "&" will not work
(use the shell module if you need these features).

So, you need the 'shell' module if you want to run a pipeline. (See
http://docs.ansible.com/ansible/shell_module.html#notes for some reasons
why you might not want to use 'shell' unless you really need to.)

-Josh (j...@care.com)

(apologies for the automatic corporate disclaimer that follows)

This email is intended for the person(s) to whom it is addressed and may contain information that is PRIVILEGED or CONFIDENTIAL. Any unauthorized use, distribution, copying, or disclosure by any person other than the addressee(s) is strictly prohibited. If you have received this email in error, please notify the sender immediately by return email and delete the message and any attachments from your system.

bablu

unread,
Sep 16, 2016, 12:14:13 PM9/16/16
to Ansible Project, j...@care.com

Tried with the shell module. It's working for the following scenario. However, not working for cluster where more than one server define in the inventory.

working:

ansible-playbook /etc/ansible/command_run.yml -e "ip=192.168.4.10" -e 'command="netstat -an | grep 8080"'

Not working:
ansible-playbook /etc/ansible/command_run.yml -e "ip=group_domain" -e 'command="netstat -an | grep 8080"'



command_run.yml

- hosts: "{{ip}}"
  gather_facts: no
  remote_user: remote
  connection: local

  tasks:
   - name: Running command
     shell: ssh remote@{{ip}} {{command}}

Josh Smift

unread,
Sep 16, 2016, 12:41:19 PM9/16/16
to Ansible Project
If {{ip}} might be an Ansible group name, rather than a thing you can SSH
to, then you can't SSH to {{ip}}.

Backing up a step, what are you trying to do here? if you want to run a
command on a bunch of hosts, Ansible will already SSH to those hosts from
your control host to run the command, so you may just need

shell: {{command}}

for your task.

And, if you just want to run a command that you specify on the command
line, you can use the ad-hoc 'ansible' command for that, rather than a
playbook, e.g.

ansible group_domain -m shell -a 'netstat -an | grep 8080'

If you leave off the '-m shell' part, it uses the 'command' module by
default, so you can do stuff like

ansible group_domain -a 'free -m'

if you don't have pipelines or other stuff that requires the 'shell' module.

DHAVAL JAISWAL

unread,
Sep 16, 2016, 1:24:42 PM9/16/16
to ansible...@googlegroups.com
you touch the exact part where i was missing

It works !!

Thanks

--
You received this message because you are subscribed to a topic in the Google Groups "Ansible Project" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/ansible-project/a7u_y3vi3j0/unsubscribe.
To unsubscribe from this group and all its topics, send an email to ansible-project+unsubscribe@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/22492.8329.899088.366315%40gargle.gargle.HOWL.
For more options, visit https://groups.google.com/d/optout.



--
Thanks & Regards
Dhaval Jaiswal
Reply all
Reply to author
Forward
0 new messages