Ansible中的become和become_user之间的区别

And*_*nov 42 ansible ansible-playbook ansible-2.x

最近我开始深入研究Ansible并编写自己的剧本.但是,我有理解become和之间的区别的麻烦become_user.据我所知它become_user是类似的su <username>,并且become意味着类似sudo su或"作为sudo用户执行所有命令".但有时这两个指令是混合的.

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

udo*_*dan 83

become_user定义用于权限提升的用户.

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

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

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

    - do: something
      become: yes
    
    Run Code Online (Sandbox Code Playgroud)
  2. 此任务将以用户身份执行someone,因为用户已设置为explciitly:

    - do: something
      become: yes
      become_user: someone
    
    Run Code Online (Sandbox Code Playgroud)
  3. 此任务不会执行任何操作become_user,因为become未设置并默认为false/ no:

    - do: something
      become_user: someone
    
    Run Code Online (Sandbox Code Playgroud)

    ......除非成为true更高级别,例如街区,剧本,团体或主持人等.

    这是一个的例子:

    - become: yes
      block:
        - do: something
          become_user: someone
        - do: something
    
    Run Code Online (Sandbox Code Playgroud)

    第一个是以用户someone身份运行,第二个以第二个身份运行root.

据我所知,become_user类似于su,并且变成像sudo su或"作为sudo用户执行所有命令"的意思.

默认become_methodsudo,所以sudo do somethingsudo -u <become_user> do something

Fineprint:当然" do:something "是伪代码.把你真正的Ansible模块放在那里.

  • 这取决于你对"之前"的意思.如果在单个任务上设置"成为",则它仅对该单个任务有效.如果要为multipel任务设置`become`,则需要将其设置在更高级别.你可以使用[blocks](http://docs.ansible.com/ansible/playbooks_blocks.html)或[include](http://docs.ansible.com/ansible/playbooks_roles.html#task-include-files-和鼓励 - 重用)为此或设置你的角色. (4认同)

AAT*_*RAN 6

  1. become: yes= sudo
    become_user: user_name=sudo -u user_name
  2. become: yes
    become_user: root 相当于 become: yes

链接清楚地解释了差异。