Ansible中become和become_user的区别

问题描述 投票:0回答:4

最近我开始深入研究 Ansible 并编写自己的剧本。但是,我很难理解

become
become_user
之间的区别。 据我了解,
become_user
类似于
su <username>
,而
become
意味着类似
sudo su
或“以sudo用户身份执行所有命令”。但有时这两个指令会混合在一起。

你能解释一下它们的正确含义吗?

ansible root ansible-2.x
4个回答
150
投票

become_user
定义用于权限升级的用户。

become
只是一个激活或停用相同功能的标志。

以下三个例子应该可以清楚地说明:

  1. 此任务将以

    root
    执行,因为
    root
    是提权的默认用户:

     - do: something
       become: true
    
  2. 此任务将以用户

    someone
    执行,因为用户已明确设置:

     - do: something
       become: true
       become_user: someone
    
  3. 此任务不会对

    become_user
    执行任何操作,因为
    become
    未设置,默认为
    false
    /
    no
    :

     - do: something
       become_user: someone
    

    ...除非在更高级别上将“成为”设置为“

    true
    ”,例如一个块、剧本、组或主机变量等。

这是一个带有的示例:

    - become: true
      block:
        - do: something
          become_user: someone
        - do: something

第一个以用户

someone
身份运行,第二个以
root
身份运行。

据我了解,become_user类似于su,become意味着类似sudo su或“以sudo用户身份执行所有命令”。

默认

become_method
sudo
,因此
sudo do something
sudo -u <become_user> do something

Fineprint:当然“do:something”是伪代码。将您实际的 Ansible 模块放在那里。


16
投票
  1. become: yes
    =
    sudo

    become_user: user_name
    =
    sudo -u user_name
  2. become: yes

    become_user: root
    相当于
    become: yes

这个链接清楚地解释了差异。


0
投票

如果我需要使用 sudo 运行一批任务,我经常使用 include_task 语句。 将一本大剧本分成几个部分也很有帮助。 例如

 - name: prepare task x
   include_tasks: x-preparation.yml
   when: condition is true
   args:
     apply:
       become: yes

这也是使用标签时的一种方便方法:

  - name: execute tasks x
     include_tasks: x-execution.yml
     args:
       apply:
         tags: exec
     tags:
     - exec

重要的是,您还需要在 include_tasks 语句上放置一个标签 希望这对任何人都有帮助


0
投票

设为 yes 将使代码块默认以 root 用户身份运行。 如果您添加 come_user: "user1" 以及变成:yes 那么当前代码块将以 user1 身份运行。

© www.soinside.com 2019 - 2024. All rights reserved.