Search code examples
ansiblemultiple-users

Execute playbook with different sudo users on different hosts


There are two hosts in the host list DEV and QA host

I need to execute playbook with dev_sudo_user for development env and qa_sudo_user for QA environment parallely

inventory details

[hostlist]
host1 ansible_become_user=dev_sudo_user
host2 ansible_become_user=qa_sudo_user

---
- hosts: hostlist
  connection: ssh
  gather_facts: false
  remote_user: abcd  
  serial: 1   
  become: true


  tasks:
  - name: run Script
    shell: python apps.py
    register: result
  - debug: var=result

I am able to get result for one host. I want result for both hosts


Solution

  • you have to use the become and become_user arguments. see example and output below.

    hosts files with the variable as you had:

    [test_group]
    rhel-green  become_user=root
    rhel-blue   become_user=devops
    

    playbook:

    - hosts: test_group
      gather_facts: false
    
      tasks:
        - name: step 1
          shell: "id"
          register: shell_output
          become_user: "{{ become_user }}"
          become: true
    
        - debug:
            var: shell_output.stdout
    

    execution output:

    [root@ansible]# ansible-playbook -i hosts become_loop.yml 
    
    PLAY [test_group] ***************************************************************************************************************************************************************************************************
    
    TASK [step 1] *******************************************************************************************************************************************************************************************************
    changed: [rhel-blue]
    changed: [rhel-green]
    
    TASK [debug] ********************************************************************************************************************************************************************************************************
    ok: [rhel-green] => {
        "shell_output.stdout": "uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023"
    }
    ok: [rhel-blue] => {
        "shell_output.stdout": "uid=1000(devops) gid=1000(devops) groups=1000(devops) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023"
    }
    
    PLAY RECAP **********************************************************************************************************************************************************************************************************
    rhel-blue                  : ok=2    changed=1    unreachable=0    failed=0   
    rhel-green                 : ok=2    changed=1    unreachable=0    failed=0   
    
    [root@ansible]#