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 playbooksHiể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/Tham khảo về cấu trúc các thư mục trong một role tại:
base/
tasks/
handlers/
files/
templates/
vars/
defaults/
meta/
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 base và dev. Triển khai môi trường production sẽ sử dụng hai roles base và prod. 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: allVà tương tự tạo file production.yml cho môi trường production:
become: true
roles:
- {role: base, tags: ['base']}
- {role: dev, tags: ['dev']}
- hosts: allKhi chạy lệnh để deploy cho development và production:
become: true
roles:
- {role: base, tags: ['base']}
- {role: production, tags: ['production']}
$ ansible-playbook -i dev_inventory_file development.ymlKhi ấy, role base sẽ được apply cho cả hai môi trường.
$ ansible-playbook -i prod_inventory_file production.yml
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