Thứ Hai, 11 tháng 6, 2018

[Ansible] Role là gì và role hoạt động như thế nào ?

Tìm hiểu ansible cơ bản tại: http://swdream.familug.org/2018/06/ansible-gioi-thieu-co-ban-ve-ansible.html

 Roles là gì?

Các Role được sử dụng với ansible playbooks

Hiểu đơn giản, khi triển khai một môi trường, chúng ta cầm làm nhiều bước A, B và C. Một roles là một thư mục chứa tất cả các files được dùng để triển khai một nhiệm vụ A, B hoặc C đó. Một roles có thể được sử dụng nhiều lần trong các lần triển khai  khác nhau, và trong các môi trường khác nhau.

Cấu trúc của các thư mục và file trong một role

Cấu trúc một role cơ bản bao gồm các thư mục sau:
roles/
    base/
    tasks/
    handlers/
    files/
    templates/
    vars/
    defaults/
    meta/
Tham khảo về cấu trúc các thư mục trong một role tại:
https://github.com/swdream/ansible-base/tree/master/roles/base

Vai trò cuả các thư mục trên như sau:

1. Task: Chứa các file yaml định nghĩa các nhiệm vụ chính khi triển khai.
2. Handles: Chứa các handler được sử dụng trong role
3. Files: chứa các file dc sử dụng bởi role, ví dụ như các file ảnh.
4. Templates: chứa các template file được sử dụng trong role, ví dụ như các file configuration... Các file này có đuôi *.j2, sử dụng jinja2 syntax
5. Vars: định nghĩa các variable được sử dụng ở trong roles
6. Defaults: Định nghĩa các giá trị default của các variable được sử dụng trong roles. Nếu variable không được định nghiã trong thư mục vars, các giá trị default này sẽ được gọi.
7. Meta: thư mục này chứa meta data của roles

Mỗi thư mục trên sẽ có một file main.yml chứa các nội dung liên quan. Một role phải chứa ít nhất một trong các thư mục trên. Điều này giúp chúng ta có thể loại trừ tất cả các thư mục không dùng đến.

Sử dụng role như thế nào?

Về cơ bản, các nhiệm vụ được thực thi sẽ được định nghĩa trong các file .yml. Chúng ta chỉ việc xác định các roles cần thiết trong file yml đó là xong.

Ví dụ, trong dự án của mình, có 3 roles như sau:
- base
- dev
- prod

để triển khai môi trường development, chúng ta cần sử dụng các roles basedev. Triển khai môi trường production sẽ sử dụng hai roles baseprod. Role base được sử dụng cho cả hai môi trường, nên tất cả các bước chung khi triển khai có thể định nghĩa trong role base

Tạo một file development.yml cho môi trường development như sau:
- hosts: all
    become: true
    roles:
      - {role: base, tags: ['base']}
      - {role: dev, tags: ['dev']}
Và tương tự tạo file production.yml cho môi trường production:
- hosts: all
    become: true
    roles:
      - {role: base, tags: ['base']}
      - {role: production, tags: ['production']}
Khi chạy lệnh để deploy cho development và production:
$ ansible-playbook -i dev_inventory_file development.yml
$ ansible-playbook -i prod_inventory_file production.yml
Khi ấy, role base sẽ được apply cho cả hai môi trường.

Tìm hiểu thêm về cấu trúc của một ansible project tại
https://github.com/swdream/ansible-base

Không có nhận xét nào:

Đăng nhận xét