为什么 ansible become_user 什么都不做,除非 become=yes?

sor*_*rin 5 ansible

为什么 ansible become_user 什么都不做,除非 become=yes?

我想知道是否有人可以向我解释为什么使用该选项become_user: xxx无法执行任何操作,除非您还添加become: yes

有两种不同的选择有什么意义,尤其是不能 su 并且什么也不说。

udo*_*dan 6

这是两个不同的东西。一个设置用户名,另一个以该用户身份运行任务、阻止或播放。如果你看一下这本剧本,也许是有道理的:

- hosts: all
  become_user: foo
  tasks:
    - shell: whoami
      register: a
    - shell: whoami
      become: yes
      register: b
    - block:
    - shell: whoami
          register: c
        - shell: whoami
          become: yes
          register: d
        - shell: whoami
          become: yes
          become_user: baz
          register: e
      become_user: bar
    - debug: var=a.stdout
    - debug: var=b.stdout
    - debug: var=c.stdout
    - debug: var=d.stdout
    - debug: var=e.stdout
Run Code Online (Sandbox Code Playgroud)
TASK [setup] *******************************************************************
ok: [some.host]

TASK [command] *****************************************************************
changed: [some.host]

TASK [command] *****************************************************************
changed: [some.host]

TASK [command] *****************************************************************
changed: [some.host]

TASK [command] *****************************************************************
changed: [some.host]

TASK [command] *****************************************************************
changed: [some.host]

TASK [debug] *******************************************************************
ok: [some.host] => {
    "a.stdout": "realuser"
}

TASK [debug] *******************************************************************
ok: [some.host] => {
    "b.stdout": "foo"
}

TASK [debug] *******************************************************************
ok: [some.host] => {
    "c.stdout": "realuser"
}

TASK [debug] *******************************************************************
ok: [some.host] => {
    "d.stdout": "bar"
}

TASK [debug] *******************************************************************
ok: [some.host] => {
    "e.stdout": "baz"
}
Run Code Online (Sandbox Code Playgroud)

您全局定义用户,但这并不意味着您要在每个任务中使用它。

您甚至可以在您的清单、组或主机变量中设置become_user( ansible_become_user),从而为每个主机、主机托管等定义一个唯一的 sudo 用户。您仍然不希望以该用户身份运行每个任务。