2015-07-27 21 views
5

Có thể áp dụng một vai trò cụ thể như sudo trong Ansible không?Áp dụng vai trò dưới người dùng sudo

Cụ thể, đây là những vai trò được tìm nạp từ thiên hà không thể phát hiện được, vì vậy nguồn không nằm trong tầm kiểm soát của tôi.

This example gợi ý rằng việc chuyển sudo:yes cho vai trò sẽ hoạt động, nhưng tôi cho rằng vai trò trước tiên phải được xác định để mong đợi thông số.

This section của changelog gợi ý rằng sudo true thể được thiết lập ở mức vai trò, tuy nhiên, sau đây không được làm việc:

--- 
- remote_user: "vagrant" 
    tasks: [] 
    hosts: "all" 
    roles: 
    - role: "mysql" 
    sudo: yes 

Tuy nhiên, áp dụng sudo ở cấp cao nhất làm cho công việc vai trò:

--- 
- remote_user: "vagrant" 
    tasks: [] 
    hosts: "all" 
    sudo: yes 
    roles: 
    - role: "mysql" 

Lưu ý - Tôi đã thử với cả hai sudo: truesudo: yes và kết quả là như nhau.

+0

những gì sẽ xảy ra nếu bạn thay đổi sudo: True' to 'sudo: yes'? – Ewan

+0

Cùng một kết quả - vai trò không được chạy bằng sudo. –

+0

Phiên bản Ansible của bạn là gì? Tôi đang gặp vấn đề tương tự với Ansible 2.2 và bên thứ ba [vai trò MySQL] (https://github.com/geerlingguy/ansible-role-mysql) nói rằng một trong hai chế độ sẽ hoạt động. Việc chạy role với 'sudo: yes' (thực sự' trở thành') làm cho một lệnh shell thất bại do các điều khoản, trong khi chạy nó với 'trở thành: yes' ở cấp độ chơi. Rõ ràng một lỗi Ansible như cấp vai trò 'trở thành' sẽ hoạt động. – RichVel

Trả lời

4

Có, bạn có thể thực hiện vai trò với tư cách người dùng khác, bao gồm gốc, nhưng chỉ ở cấp "playbook".

Nếu bạn muốn chạy một vai trò như chính mình và một vai trò khác là "root", thì bạn sẽ phải viết các vai trò đó dưới dạng các lần phát riêng biệt (cho dù chúng có nằm trong các tệp riêng biệt) hay không.

Ví dụ, giả sử rằng bạn có playbook này, chứa hai lượt, sử dụng vai trò tương tự, nhưng với nhau sudo người dùng:

--- 
- hosts: localhost 
    sudo: yes 
    roles: 
    - role: aks.whoami 

- hosts: localhost 
    sudo: no 
    roles: 
    - role: aks.whoami 

Và, vai trò này: aks.whoami:

--- 
- name: "whoami?" 
    shell: whoami 
    register: whoami 

- debug: var=whoami.stdout 

Đây là đầu ra:

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 
+0

Tôi nghĩ rằng OP muốn leo thang đặc quyền trên cơ sở 'cho mỗi vai trò ', chứ không phải tất cả các vai trò – surfer190

+2

Đó là những gì ví dụ cho thấy. Một vai trò được gọi với sudo privs, một không. – aks

0

Có vẻ như according to this post, nó có thể làm như thế này:

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

Lưu ý rằng bạn cũng có thể làm điều này với when: khoản và trong danh sách meta/main.yml phụ thuộc vai trò của như thế này:

dependencies: 
    - { role: 'geerlingguy.repo-epel', sudo: true, when: "ansible_os_family == 'RedHat' and ansible_distribution_major_version | version_compare('6', '<=')" } 
Các vấn đề liên quan