2015-07-27 14 views
5

È possibile applicare un ruolo specifico come sudo in Ansible?Applicazione di un ruolo con utente sudo

In particolare, si tratta di ruoli recuperati da ansible-galassia, quindi la sorgente non è sotto il mio controllo.

This example suggerisce che il passaggio del ruolo sudo:yes dovrebbe funzionare, ma presumo che il ruolo debba prima essere definito per prevedere il parametro.

This section del changelog suggerisce che sudo true può essere impostato a livello di ruolo, tuttavia, la seguente non funziona:

--- 
- remote_user: "vagrant" 
    tasks: [] 
    hosts: "all" 
    roles: 
    - role: "mysql" 
    sudo: yes 

Tuttavia, applicando sudo al livello superiore fa funzionare ruolo:

--- 
- remote_user: "vagrant" 
    tasks: [] 
    hosts: "all" 
    sudo: yes 
    roles: 
    - role: "mysql" 

Nota: ho provato sia con sudo: true sia con sudo: yes e il risultato è lo stesso.

+0

cosa succede se si cambia 'sudo: Vero 'a' sudo: si'? – Ewan

+0

Stesso risultato: il ruolo non viene eseguito utilizzando sudo. –

+0

Qual è la tua versione di Ansible? Sto riscontrando lo stesso problema con Ansible 2.2 e una terza parte [ruolo MySQL] (https://github.com/geerlingguy/ansible-role-mysql) che dice che entrambe le modalità dovrebbero funzionare. L'esecuzione del ruolo con un 'sudo: yes' (in realtà' diventa') fa fallire un comando della shell a causa delle autorizzazioni, mentre l'esecuzione con 'become: yes' al livello di riproduzione funziona. Chiaramente un bug di tipo Ansible come role-level 'become' dovrebbe funzionare. – RichVel

risposta

4

Sì, è possibile eseguire un ruolo come un altro utente, incluso root, ma solo a livello di "playbook".

Se si desidera eseguire un ruolo come se stessi e un altro ruolo come, ad esempio, "root", sarà necessario scriverli come riproduzioni separate (indipendentemente dal fatto che siano in file separati).

Per esempio, supponendo che si dispone di questo playbook, che contiene due giochi, utilizzando lo stesso ruolo, ma con diverse sudo utenti:

--- 
- hosts: localhost 
    sudo: yes 
    roles: 
    - role: aks.whoami 

- hosts: localhost 
    sudo: no 
    roles: 
    - role: aks.whoami 

E, questo ruolo: aks.whoami:

--- 
- name: "whoami?" 
    shell: whoami 
    register: whoami 

- debug: var=whoami.stdout 

Questo è l'output:

PLAY [localhost] ************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [localhost] 

TASK: [aks.whoami | whoami?] ************************************************** 
changed: [localhost] 

TASK: [aks.whoami | debug var=whoami.stdout] ********************************** 
ok: [localhost] => { 
    "var": { 
     "whoami.stdout": "root" 
    } 
} 

PLAY [localhost] ************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [localhost] 

TASK: [aks.whoami | whoami?] ************************************************** 
changed: [localhost] 

TASK: [aks.whoami | debug var=whoami.stdout] ********************************** 
ok: [localhost] => { 
    "var": { 
     "whoami.stdout": "aks" 
    } 
} 

PLAY RECAP ******************************************************************** 
localhost     : ok=6 changed=2 unreachable=0 failed=0 
+0

Penso che OP voglia incrementare i privilegi su base 'per-role', non tutti i ruoli – surfer190

+2

Questo è ciò che mostra l'esempio. Un ruolo viene invocato con sudo privs, non uno. – aks

0

Sembra according to this post, è possibile fare in questo modo:

--- 
- hosts: new-servers 
    user: username 
    connection: ssh # or paramiko 

    roles: 
    - { role: basic-debian-setup, sudo: yes } 
    - { role: git-setup } 
    - { role: vim } 
    - { role: bash } 
    - { role: screen } 
    - { role: openssh, sudo: yes } 
    - { role: sudo, sudo: yes } 
    - { role: postfix, sudo: yes } 
    - { role: vnstat, sudo: yes } 

Si noti che è anche possibile fare questo con when: clausole e nella lista meta/main.yml dipendenze di ruolo come questo:

dependencies: 
    - { role: 'geerlingguy.repo-epel', sudo: true, when: "ansible_os_family == 'RedHat' and ansible_distribution_major_version | version_compare('6', '<=')" } 
Problemi correlati