2013-11-24 50 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