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.yml
Trong cấu trúc này:
ansible.cfg
là file cấu hình cho Ansible.inventory.ini
là file chứa danh sách các máy chủ mà Ansible sẽ quản lý.group_vars
vàhost_vars
là các thư mục chứa biến cho các nhóm và máy chủ cụ thể.roles
là 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.yml
là 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.yml
Trong đó, 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 = False
inventory = ./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/key
bằ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.20
group_vars/webservers.yml
http_port: 80
max_clients: 200
host_vars/webserver1.yml
http_port: 8080
max_clients: 100
roles/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.conf
roles/webserver/handlers/main.yml
---
- name: restart webserver
service:
name: httpd
state: restarted
site.yml
---
- hosts: webservers
roles:
- webserver
Lư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.