2013-11-24 97 views
55

我已經閱讀了Ansible文檔,但我仍然對以下三個參數感到困惑:ancus playbook:user,sudo,sudo_user。用戶vs sudo vs sudo_user in ansible playbooks

我試圖與所述參數的不同組合的以下劇本:

  1. 用戶:部署=>作品

  2. 用戶:部署和須藤:在GIT中任務真=>掛起

  3. 用戶:部署,須藤:True和sudo_user:部署=>作品

sudo_user實際上做了什麼? 何時以及爲什麼我應該使用每種組合?

- 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 

感謝

回答

62
  • user是你ssh'ing的用戶。隨着你的配置,你ssh'ing爲deploy

  • sudo_user是當你設置sudo: yes時,你在主機上的sudo'ing用戶。

所以我覺得你的情況都不sudosudo_user是必要的,如果你能爲deploy SSH協議。

但是,如果您以root用戶身份登錄,則需要設置 sudo_user: deploysudo: yes

如果您要求'sudo'但未指定任何用戶,Ansible將使用您的默認設置~/.ansible.cfgsudo_user),並將默認爲root

請注意,user已被棄用(因爲它很混亂)。您應該改用remote_user

編輯:案例#2可能掛起,因爲SSH的問題確認:你可能有bitbucket.org主機密鑰在~deploy/.ssh/known_hosts~root/.ssh/known_hosts

更新:由於Ansible 2.x時,使用becomebecome_user而不是已棄用的sudosudo_user。用法示例:

- 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

會發生什麼事,如果你有'須藤:yes'和'sudo_user:root'中,有一個角色的劇本,在這個角色的任務根執行?如果是這樣的:當一個角色中的任務使用'remove_user'時,它會切換到這個用戶,還是在這種情況下用這個用戶ssh到機器? – rednaw

+0

@rednaw,你是否嘗試添加一些'whoami'語句來檢查哪個用戶在哪裏?你的用例是什麼? – AnneTheAgile

+0

@rednaw:是的,作爲根(你應該ssh'ed作爲另一個用戶)。 'remote_user'將不會切換,因爲它是您正在ssh'ing的用戶。 – leucos