在sudo用户

时间:2015-07-27 21:25:37

标签: ansible

是否可以在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: truesudo: yes,结果相同。

3 个答案:

答案 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 }