除非变成=是,否则为什么ansible =_use什么都不做?

时间:2016-02-24 13:05:47

标签: ansible

为什么ansible =_use什么都不做,除非变成=是?

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

有两个不同的选择有什么意义,特别是没有su,也没有说出来。

1 个答案:

答案 0 :(得分:2)

这是两件不同的事情。一个设置用户名,另一个设置任务,阻止或播放该用户。如果你看一下这本剧本,也许是有道理的:

- 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
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"
}

您可以全局定义用户,但这并不意味着您希望在每个任务上使用它。

您甚至可以在广告资源,群组或主机变量中设置become_useransible_become_user),从而为每个主机,主机托管等定义一个唯一的sudo用户。但您仍然不想每次都运行然后作为这个用户的任务。