是否可以在 Ansible 中以 sudo 身份应用特定角色?
具体来说,这些是从 ansible-galaxy 获取的角色,因此来源不在我的控制范围内。
This example建议通过 sudo:yes
角色应该可以工作,但我认为必须首先定义角色以期望参数。
This section的变更日志表明 sudo true
可以在角色级别设置,但是,以下不起作用:
---
- remote_user: "vagrant"
tasks: []
hosts: "all"
roles:
- role: "mysql"
sudo: yes
但是,在顶层应用 sudo 会使角色起作用:
---
- remote_user: "vagrant"
tasks: []
hosts: "all"
sudo: yes
roles:
- role: "mysql"
注意——我已经尝试过
sudo: true
和 sudo: yes
,结果是一样的。
最佳答案
是的,您可以以其他用户身份执行角色,包括 root,但只能在“剧本”级别执行。
如果你想扮演你自己的角色,而扮演另一个角色,比如“root”,那么你必须将它们写成单独的剧本(无论它们是否在单独的文件中)。
例如,假设您有这本剧本,其中包含两个剧本,使用相同的角色,但具有不同的 sudo
用户:
---
- hosts: localhost
sudo: yes
roles:
- role: aks.whoami
- hosts: localhost
sudo: no
roles:
- role: aks.whoami
而且,这个角色:
aks.whoami
:---
- name: "whoami?"
shell: whoami
register: whoami
- debug: var=whoami.stdout
这是输出:
PLAY [localhost] **************************************************************
GATHERING FACTS ***************************************************************
ok: [localhost]
TASK: [aks.whoami | whoami?] **************************************************
changed: [localhost]
TASK: [aks.whoami | debug var=whoami.stdout] **********************************
ok: [localhost] => {
"var": {
"whoami.stdout": "root"
}
}
PLAY [localhost] **************************************************************
GATHERING FACTS ***************************************************************
ok: [localhost]
TASK: [aks.whoami | whoami?] **************************************************
changed: [localhost]
TASK: [aks.whoami | debug var=whoami.stdout] **********************************
ok: [localhost] => {
"var": {
"whoami.stdout": "aks"
}
}
PLAY RECAP ********************************************************************
localhost : ok=6 changed=2 unreachable=0 failed=0
关于ansible - 在 sudo 用户下应用角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31663592/