Saturday, January 18, 2025

Cấu trúc thư mục chuẩn trong Ansible

-

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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories