switch to all the users and run the same command

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

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?

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 :frowning:

`

  • 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

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

Thanks Mark,

This trick worked for me:

- name: vncserver command
shell: sudo -u {{ 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”:

-i [command]
The -i (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.