Ansible

时间:2016-07-10 08:42:23

标签: ansible ansible-playbook ansible-2.x

最近我开始深入研究Ansible并编写自己的剧本。但是,我在理解becomebecome_user之间的区别时遇到了麻烦。 据我了解,become_usersu <username>类似,become表示sudo su或“以sudo用户身份执行所有命令”。但有时这两个指令是混合的。

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

3 个答案:

答案 0 :(得分:67)

become_user定义了用于privilege escalation的用户。

become只是激活或停用相同的标志。

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

  1. 此任务将以root执行,因为root是权限提升的默认用户:

    - do: something
      become: yes
    
  2. 此任务将以用户someone执行,因为用户已明确设置:

    - do: something
      become: yes
      become_user: someone
    
  3. 此任务不会对become_user执行任何操作,因为become未设置且默认为false / no

    - do: something
      become_user: someone
    

    ...除非在更高级别设置为true,例如一个街区,剧本,团体或主持人等等。

    以下是block的示例:

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

    第一个是用户someone,第二个是root

  4.   

    据我所知,become_user与su类似,并且变为像sudo su或&#34;像sudo用户一样执行所有命令&#34;。

    默认become_methodsudo,因此sudo do somethingsudo -u <become_user> do something

    Fineprint:当然&#34; 做:某事&#34;是伪代码。把实际的Ansible模块放在那里。

答案 1 :(得分:2)

  1. become: yes = sudo
    become_user: user_name = sudo -u user_name
  2. become: yes
    become_user: root等同于become: yes

link清楚地说明了区别。

答案 2 :(得分: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语句上放置一个标签 希望这对任何人都有帮助