2015-07-27 5 views
5

Ist es möglich, eine bestimmte Rolle als Sudo in Ansible anzuwenden?Eine Rolle unter Sudo-Benutzer anwenden

Insbesondere sind dies Rollen aus ansible-Galaxie geholt, so dass die Quelle nicht in meiner Kontrolle ist.

This example schlägt vor, dass die Übergabe von sudo:yes an die Rolle funktionieren sollte, aber ich nehme an, die Rolle muss zuerst definiert werden, um den Parameter zu erwarten.

This section der Changelog lässt vermuten, dass sudo true kann jedoch auf Rollenebene eingestellt werden, wird die folgende nicht funktioniert:

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

jedoch sudo auf der obersten Ebene der Anwendung macht die Rolle der Arbeit:

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

Hinweis - Ich habe mit sudo: true und sudo: yes versucht, und das Ergebnis ist das gleiche.

+0

was passiert, wenn Sie 'sudo ändern: Stimmt zu: sudo: ja? – Ewan

+0

Gleiches Ergebnis - die Rolle wird nicht mit sudo ausgeführt. –

+0

Was ist Ihre Ansible-Version? Ich habe das gleiche Problem mit Ansible 2.2 und einer dritten [MySQL-Rolle] (https://github.com/geerlingguy/ansible-role-mysql), die besagt, dass jeder Modus funktionieren sollte. Wenn die Rolle mit 'sudo: yes' (eigentlich' wird') ausgeführt wird, wird ein Shell-Befehl aufgrund von Berechtigungen fehlgeschlagen, während das Ausführen mit 'wird: ja' auf der Ebene play funktioniert. Offensichtlich sollte ein Ansible-Bug als Rollen-Level "werden" funktionieren. – RichVel

Antwort

4

Ja, Sie können eine Rolle als ein anderer Benutzer ausführen, einschließlich root, aber nur auf der "playbook" -Ebene.

Wenn Sie eine Rolle als Sie selbst und eine andere als "root" ausführen möchten, müssen Sie diese als separate Wiedergaben aufschreiben (unabhängig davon, ob sie sich in separaten Dateien befinden).

Zum Beispiel unter der Annahme, dass Sie dieses Textbuch haben, die zwei Stücke, die gleiche Rolle verwenden, aber mit unterschiedlichen sudo Benutzern:

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

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

Und diese Rolle: aks.whoami:

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

- debug: var=whoami.stdout 

Dies ist die Ausgabe:

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

Ich denke OP möchte Privilegien auf einem 'pro-Rolle'-Basis, nicht allen Rollen eskalieren – surfer190

+2

Das ist, was das Beispiel zeigt. Eine Rolle wird mit sudo privs aufgerufen, eine nicht. – aks

0

Sieht aus wie according to this post, ist es möglich, wie dies zu tun:

--- 
- 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 } 

Beachten Sie, dass Sie dies auch mit when: Klauseln tun können, und meta/main.yml Abhängigkeiten Liste der in Rolle wie folgt aus:

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