Một playbook Ansible có thể được tổ chức theo nhiều cách khác nhau, nhưng dưới đây là một cấu trúc thư mục chuẩn mà bạn có thể sử dụng:
.
├── ansible.cfg
├── inventory.ini
├── group_vars
│ ├── group1.yml
│ └── group2.yml
├── host_vars
│ ├── host1.yml
│ └── host2.yml
├── roles
│ ├── role1
│ │ ├── tasks
│ │ │ └── main.yml
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── templates
│ │ ├── files
│ │ └── vars
│ │ └── main.yml
│ └── role2
│ ├── tasks
│ │ └── main.yml
│ ├── handlers
│ │ └── main.yml
│ ├── templates
│ ├── files
│ └── vars
│ └── main.yml
└── site.ymlTrong cấu trúc này:
ansible.cfglà file cấu hình cho Ansible.inventory.inilà file chứa danh sách các máy chủ mà Ansible sẽ quản lý.group_varsvàhost_varslà các thư mục chứa biến cho các nhóm và máy chủ cụ thể.roleslà thư mục chứa các roles. Mỗi role thường bao gồm các tasks, handlers, templates, files, và vars.site.ymllà playbook chính, thường sẽ gọi đến các roles khác nhau.
Role trong Ansible.
Trong Ansible, mỗi thư mục trong thư mục roles tương ứng với một “role”. Một role là một cách để nhóm các công việc liên quan lại với nhau, và chúng có thể được tái sử dụng trong nhiều playbook khác nhau.
Ví dụ, bạn có thể có một role tên là webserver để cài đặt và cấu hình một máy chủ web, và một role khác tên là database để cài đặt và cấu hình một máy chủ cơ sở dữ liệu.
Mỗi role thường bao gồm các thư mục sau:
tasks: Chứa các công việc mà role này sẽ thực hiện.handlers: Chứa các handlers, là các công việc đặc biệt mà chỉ được chạy khi một công việc khác thông báo cho chúng.files: Chứa các file mà role này có thể sao chép lên máy chủ từ xa.templates: Chứa các file mẫu mà role này có thể sử dụng để tạo ra các file cấu hình tùy chỉnh.vars: Chứa các biến mà role này sử dụng.
Ví dụ, nếu bạn có một role tên là role1, thì cấu trúc thư mục của nó có thể như sau:
role1/
├── tasks/
│ └── main.yml
├── handlers/
│ └── main.yml
├── files/
├── templates/
└── vars/
└── main.ymlTrong đó, main.yml trong thư mục tasks chứa các công việc mà role này sẽ thực hiện, main.yml trong thư mục handlers chứa các handlers, và main.yml trong thư mục vars chứa các biến.
Cấu trúc này không phải là bắt buộc, nhưng nó giúp tổ chức playbook của bạn một cách rõ ràng và dễ quản lý. Dưới đây là một số ví dụ về nội dung có thể có trong các file của cấu trúc playbook Ansible mà tôi đã mô tả:
Các file config chính.
ansible.cfg
Đây là nội dung của một file cấu hình Ansible (ansible.cfg).
[defaults]
inventory = ./inventory.ini
remote_user = ansible
private_key_file = /path/to/your/private/key
host_key_checking = Falseinventory = ./inventory.ini: Đặt file mặc định chứa danh sách các máy chủ mà Ansible sẽ quản lý. Ansible sẽ tìm file này trong thư mục hiện tại.remote_user = ansible: Đặt tên người dùng mặc định mà Ansible sử dụng để kết nối đến các máy chủ. Trong trường hợp này, nó được đặt làansible.private_key_file = /path/to/your/private/key: Đặt file chứa khóa riêng mà Ansible sử dụng để kết nối đến các máy chủ. Bạn nên thay/path/to/your/private/keybằng đường dẫn thực tế đến file khóa riêng của bạn.host_key_checking = False: Tắt kiểm tra khóa máy chủ SSH. Điều này hữu ích trong môi trường phát triển, nơi bạn thường xuyên tạo và hủy các máy ảo, nhưng nó không an toàn cho môi trường sản xuất vì nó làm cho các cuộc tấn công man-in-the-middle trở nên dễ dàng hơn.
inventory.ini
[webservers]
webserver1 ansible_host=192.168.1.10
webserver2 ansible_host=192.168.1.11
[dbservers]
dbserver1 ansible_host=192.168.1.20group_vars/webservers.yml
http_port: 80
max_clients: 200host_vars/webserver1.yml
http_port: 8080
max_clients: 100roles/webserver/tasks/main.yml
---
- name: ensure apache is at the latest version
yum:
name: httpd
state: latest
- name: write the apache config file
template:
src: /srv/httpd.j2
dest: /etc/httpd.confroles/webserver/handlers/main.yml
---
- name: restart webserver
service:
name: httpd
state: restartedsite.yml
---
- hosts: webservers
roles:
- webserverLưu ý rằng đây chỉ là các ví dụ và nội dung thực tế của các file này sẽ phụ thuộc vào yêu cầu cụ thể của bạn.
