60

我已经阅读了 Ansible 文档,但我仍然对 ansible playbook 中的以下三个参数感到有些困惑:user、sudo、sudo_user。

我尝试了以下具有不同参数组合的剧本:

  1. 用户:部署 => 作品

  2. user:deploy 和 sudo: True =>挂在 git 任务上

  3. user:deploy, sudo: True and sudo_user: deploy => Works

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: repo=git@bitbucket.org:YAmikep/djangotutorial.git dest=/home/deploy/code

谢谢

4

1 回答 1

72
  • user是您正在 ssh'ing 的用户。使用您的配置,您将 ssh'ing as deploy.

  • sudo_user是您在sudo: yes设置时在主机上执行 sudo 的用户。

所以我认为在你的情况下,如果你可以 ssh as sudosudo_user则没有必要deploy

但是,如果您以 root 身份 ssh,则需要设置 sudo_user: deploysudo: yes.

如果您要求 'sudo' 但未指定任何用户,Ansible 将使用~/.ansible.cfg( sudo_user) 中设置的默认值,并默认为root.

请注意,user已弃用(因为它令人困惑)。你应该remote_user改用。

编辑:案例 #2 可能由于 ssh 确认问题而挂起:您可能有 bitbucket.org 主机密钥,~deploy/.ssh/known_hosts没有~root/.ssh/known_hosts

更新:从 Ansible 2.x 开始,使用becomeandbecome_user而不是已弃用的sudoand sudo_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: repo=git@bitbucket.org:YAmikep/djangotutorial.git dest=/home/deploy/cod
于 2013-11-24T17:49:28.143 回答