switch to all the users and run the same command

146 views
Skip to first unread message

Arbab Nazar

unread,
Feb 2, 2015, 11:49:58 AM2/2/15
to ansible...@googlegroups.com
Hi I am new to ansible and stuck here, where i want to run this same command but using the each user from the list. 

for example:

in vars/main.yml
  vpc_users:
      - abc
      - xyz
      - qes

in tasks/main.yml
 - name: VNC | vncserver command
   shell: vncserver </tmp/file >/tmp/vncpasswd.1 2>/tmp/vncpasswd.2
   remote_user/sudo_user or somethine else?
   with_items:
       vnc_users

Thanks in advance

mic...@mcrilly.me

unread,
Feb 3, 2015, 9:23:24 AM2/3/15
to ansible...@googlegroups.com
Hi,

Are you saying to want to run the 'vncserver' command as each user? Does this work:

 - name: VNC | vncserver command
   shell
: sudo -u {{item}} vncserver </tmp/file >/tmp/vncpasswd.1 2>/tmp/vncpasswd.2
   with_items
:
       vnc_users

What have you tried so far, and what were the results?

Arbab Nazar

unread,
Feb 3, 2015, 12:32:35 PM2/3/15
to ansible...@googlegroups.com
Thanks, I have tried this and it worked partially. partially mean that for each user in the list, I need to setup the ssh key plus sudo access (I have tried it even without sudo but didn't work) but for some user I don't want to give sudo access but if I didn't give sudo access then the task fail :(

 - name: vncserver command
   shell
: vncserver </tmp/file >/tmp/vncpasswd.1 2>/tmp/vncpasswd.2
   remote_user
: "{{ item }}"
   sudo
: False
   with_items
:
     vnc_users

Thanks in advance 

Mark McCoy

unread,
Feb 3, 2015, 12:55:51 PM2/3/15
to ansible-project
I think if fails because the command runs as the first user (or as root) and subsequent users can write to the output files in /tmp.  Try this:

 - name: vncserver command
   shell
: vncserver </tmp/file >"/tmp/vncpasswd.{{item}}.1" 2>"/tmp/vncpasswd.{{item}}.2"

   remote_user
: "{{ item }}"
   sudo
: False
   with_items
:
     vnc_users

--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/2161b393-3003-4a63-813e-48cd1c038b3d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Message has been deleted

Arbab Nazar

unread,
Feb 4, 2015, 5:50:58 AM2/4/15
to ansible...@googlegroups.com
Thanks Mark,

This trick worked for me:

 - name: vncserver command
   shell
: sudo -{{ item.name }} -i vncserver </tmp/file >/tmp/vncpasswd.1 2>/tmp/vncpasswd.2
   with_items
:
     vnc_users

The modification with your tick is only "i":

-[command]
                   
The -(simulate initial login) option runs the shell specified in the passwd(5)
                   entry of the target user 
as a login shell.  This means that login-specific resource
                   files such 
as .profile or .login will be read by the shell.  If a command is
                   specified
, it is passed to the shell for execution.  Otherwise, an interactive shell
                   
is executed.  sudo attempts to change to that user's home directory before running
                   the shell.  It also initializes the environment, leaving DISPLAY and TERM unchanged,
                   setting HOME, MAIL, SHELL, USER, LOGNAME, and PATH, as well as the contents of
                   /etc/environment on Linux and AIX systems.  All other environment variables are
                   removed.

Reply all
Reply to author
Forward
0 new messages