是否可以在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
,结果相同。
答案 0 :(得分:4)
是的,你可以扮演另一个用户的角色,包括root用户,但只能在" playbook"水平。
如果你想自己扮演一个角色,而另一个扮演角色,比如说" 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
答案 1 :(得分:0)
看起来像according to this post,可以这样做:
---
- hosts: new-servers
user: username
connection: ssh # or paramiko
roles:
- { role: basic-debian-setup, sudo: yes }
- { role: git-setup }
- { role: vim }
- { role: bash }
- { role: screen }
- { role: openssh, sudo: yes }
- { role: sudo, sudo: yes }
- { role: postfix, sudo: yes }
- { role: vnstat, sudo: yes }
请注意,您也可以使用when:
子句和角色的meta/main.yml
依赖项列表执行此操作,如下所示:
dependencies:
- { role: 'geerlingguy.repo-epel', sudo: true, when: "ansible_os_family == 'RedHat' and ansible_distribution_major_version | version_compare('6', '<=')" }
答案 2 :(得分:0)
这对我有效,但对sudo: yes
无效。
roles:
- { role: packages, become: yes}
- { role: geerlingguy.docker, become: yes }