为什么ansible =_use什么都不做,除非变成=是?
我想知道是否有人可以解释为什么使用选项become_user: xxx
默默无法执行任何操作,除非您还添加become: yes
有两个不同的选择有什么意义,特别是没有su,也没有说出来。
答案 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_user
(ansible_become_user
),从而为每个主机,主机托管等定义一个唯一的sudo用户。但您仍然不想每次都运行然后作为这个用户的任务。