Ansible có nhóm all
mặc định, vui vẻ đủ, chứa tất cả các máy chủ trong tệp khoảng không quảng cáo.
Như vậy bạn có thể làm như thế với bất kỳ nhóm máy chủ nào và cung cấp group_vars cho nhóm lưu trữ.
Như được hiển thị trong liên kết trước, chúng có thể được xác định trực tiếp trong tệp kiểm kê hoặc chúng có thể được chứa trong một tệp riêng biệt được đặt tên theo nhóm trong thư mục group_vars
ở cùng cấp thư mục với tệp khoảng không quảng cáo.
Một ví dụ cấu trúc thư mục sau đó có thể giống như thế:
-ansible
|--inventory
| |--group_vars
| | |--all
| | |--dev
| | |--test
| | |--prod
| | |--webservers
| | |--databases
| |--dev
| |--test
| |--prod
|--roles
...
của bạn tập tin tồn kho dev sau đó có thể giống như thế:
[dev:children]
webservers
databases
[webservers]
web1.dev
web2.dev
[databases]
database-master.dev
database-slave.dev
Tất cả những host bây giờ sẽ nhận bất kỳ cấu hình vào máy cụ thể (có thể được xác định bằng dòng hoặc, giống như với group_vars có thể được đưa vào một thư mục host_vars) và cũng cấu hình cho các nhóm cụ thể mà chúng đang ở như và sau đó các nhóm họ cũng kế thừa từ như dev
b ut cũng theo mặc định, all
.
Điều này sau đó có thể được sử dụng để định cấu hình mọi thứ theo cách thô hơn mỗi máy chủ lưu trữ.
Mọi thứ như máy chủ NTP có thể muốn được xác định trong khi máy chủ DNS có thể muốn được xác định ở cấp môi trường (nếu mạng của bạn được phân đoạn thành dev, kiểm tra và sản xuất có thể cần cài đặt máy chủ DNS khác nhau trong /etc/resolv.conf
) trong khi các loại máy chủ khác nhau có thể có cấu hình khác nhau xung quanh những thứ như danh sách các gói sẽ được cài đặt. Cuối cùng, một số điều có thể cần phải được lưu trữ cụ thể như thiết lập máy chủ MySQL id trong một nhóm nhân rộng.
Nếu, thay vào đó, bạn chỉ muốn xác định cài đặt toàn cầu playbook chứ không phải qua hàng tồn kho (và như vậy có thể được truy cập bởi playbooks khác) sau đó bạn chỉ cần một khối vars
trong định nghĩa play bạn như vậy:
- hosts: webservers
vars:
http_port: 80
tasks:
- name: Task1 to be ran against all the webservers
...
Như đã đề cập trước đó, bạn luôn có thể sử dụng nhóm all
đây quá:
- hosts: all
vars:
ntp_pool:
- ntp1.domain
- ntp2.domain
tasks:
- name: Task1 to be ran against all the servers
...
Nhìn chung, mặc dù tôi rất muốn giới thiệu sử dụng vai trò cấu trúc điều gì đang chạy chống h nhất định osts và sau đó sử dụng hàng tồn kho để giải thích máy chủ là loại gì và sau đó sử dụng một thư mục group_vars ở cấp khoảng không quảng cáo để chứa tất cả các biến cho các nhóm máy chủ đó. Làm mọi thứ theo cách này sẽ giúp bạn giữ mọi thứ ở những nơi hợp lý và cho phép bạn dễ dàng sử dụng lại cơ sở mã của mình.
Tôi muốn có các biến trong Playbook vì tôi có nó trong Git. Sau đó tôi sử dụng để chia sẻ các tập tin kiểm kê với các biến, và phải thích ứng với nó. Tôi muốn các biến trong playbook bởi vì một khi tất cả mọi thứ được thiết lập, chúng không thay đổi, nhưng các host trong kho có thể. – rabejens
Cách xử lý ansible biến là một chút clunky nhưng nó là dễ hiểu vì nó phụ thuộc nặng vào ngầm bao gồm (dựa trên hàng tồn kho) và không có khả năng dễ dàng chia sẻ các biến trên các vở kịch. Như ví dụ của tôi cho thấy, tôi đã sử dụng các mô-đun khoảng không quảng cáo để đẩy dữ liệu vào các khoảng không quảng cáo. Sự thật (xem mô-đun set_fact) tồn tại trên các lần phát nhưng chúng nằm trên cơ sở mỗi máy chủ. Hãy nhớ rằng bạn luôn có thể viết kịch bản nhanh (ví dụ: python) để tạo khoảng không quảng cáo động, bao gồm cả vars và nhóm, trông giống như cách bạn muốn. – Petro026
Tôi đã nghĩ về một cái gì đó như thế này (viết một kịch bản tạo ra một hàng tồn kho) của bản thân mình, tôi nghĩ rằng tôi sẽ làm điều đó.Playbook dành cho việc thiết lập một cụm Hadoop cơ bản với hỗ trợ Spark/YARN, cơ sở dữ liệu Cassandra và Zeppelin, và tôi có thể viết một kịch bản lệnh đầu tiên yêu cầu người dùng liệt kê tất cả các máy chủ và sau đó đặt máy chủ lưu trữ dịch vụ nào. – rabejens