2013-11-24 4 views
55

Ich habe die Ansible-Dokumentation gelesen, aber ich bin immer noch ein bisschen verwirrt über die drei folgenden Parameter in ansible Playbooks: Benutzer, sudo, sudo_user.Benutzer vs Sudo vs sudo_user in ansible Playbooks

Ich habe die folgenden Spielbücher mit unterschiedlicher Kombination der Parameter versucht:

  1. Benutzer: deploy =>

  2. Benutzer Works: Bereitstellung und sudo: Wahr =>Hangs auf der git Aufgabe

  3. Benutzer: bereitstellen von sudo: Wahr und sudo_user: deploy => Works

Was macht sudo_user eigentlich? Wann und warum sollte ich jede dieser Kombinationen verwenden?

- hosts: all 
    user: deploy 
    sudo: True 
    sudo_user: deploy 

    tasks: 
     - name: Ensure code directory 
     file: dest=/home/deploy/code state=directory 

     - name: Deploy app 
     git: [email protected]:YAmikep/djangotutorial.git dest=/home/deploy/code 

Dank

Antwort

62
  • user ist der Benutzer, den Sie wie bist ssh'ing. Mit Ihrer Konfiguration ssh'ing Sie als deploy.

  • sudo_user ist der Benutzer, den Sie auf dem Host sudo'ing, wenn sudo: yes festgelegt ist.

Also ich denke, in Ihrem Fall keine von sudo und sudo_user sind notwendig, wenn Sie als deploy ssh können. Wenn Sie SSH als Root verwenden, müssen Sie sudo_user: deploy und sudo: yes einstellen.

Wenn Sie ‚sudo‘ fragen, aber nicht angeben, jeder Benutzer wird ansible den Standardsatz in Ihrem ~/.ansible.cfg (sudo_user) verwenden und zu root ausfällt.

Beachten Sie, dass user veraltet ist (weil es verwirrend ist). Sie sollten stattdessen remote_user verwenden.

EDIT: Case # 2 hängt wahrscheinlich wegen der ssh Bestätigung Probleme: Sie wahrscheinlich bitbucket.org Host-Schlüssel in ~deploy/.ssh/known_hosts aber NICHT in ~root/.ssh/known_hosts

UPDATE haben: Ab ansible 2.x verwenden become und become_user anstelle der veralteten sudo und sudo_user. Beispiel Nutzung:

- hosts: all 
    user: deploy 
    become: true 
    become_user: deploy 

    tasks: 
     - name: Ensure code directory 
     file: dest=/home/deploy/code state=directory 

     - name: Deploy app 
     git: [email protected]:YAmikep/djangotutorial.git dest=/home/deploy/cod 
+0

Was passiert, wenn Sie 'sudo haben: zu bejahen ist und' sudo_user: root' in einem Textbuch, die eine Rolle hat, werden die Aufgaben in dieser Rolle als root ausgeführt? Wenn ja: Wenn eine Aufgabe in einer Rolle 'remove_user' verwendet, wird sie zu diesem Benutzer wechseln, oder wird sie in diesem Fall ssh an die Maschine mit diesem Benutzer senden? – rednaw

+0

@rednaw, haben Sie versucht, einige 'whoami'-Anweisungen hinzuzufügen, um zu überprüfen, welcher Benutzer wo verwendet wird? Was ist dein Anwendungsfall? – AnneTheAgile

+0

@rednaw: Ja, als root (und Sie angeblich als ein anderer Benutzer ssh'ed). 'remote_user' wird nicht wechseln, da es sich um den Benutzer handelt, mit dem du ssh'ingst. – leucos

Verwandte Themen