Ngày đăng: 20 tháng 3 năm 2024
Ansible là một công cụ quản lý cấu hình được thiết kế để tự động hóa việc kiểm soát máy chủ cho quản trị viên và nhóm vận hành. Với Ansible, bạn có thể sử dụng một máy chủ trung tâm duy nhất để điều khiển và định cấu hình nhiều hệ thống từ xa khác nhau bằng cách sử dụng SSH và Python với yêu cầu duy nhất.
Ansible thực hiện các nhiệm vụ trên các máy chủ mà nó quản lý dựa trên task definitions. Các tác vụ này invoke các mô-đun Ansible tích hợp sẵn và được cộng đồng duy trì bằng cách sử dụng các đoạn YAML nhỏ cho mỗi tác vụ.
Khi số lượng và sự đa dạng của các hệ thống mà bạn quản lý bằng một Ansible control node duy nhất trở nên phức tạp hơn, bạn có thể nhóm các nhiệm vụ lại với nhau thành các Ansible playbooks. Việc sử dụng các playbooks giúp loại bỏ nhu cầu chạy nhiều tác vụ riêng lẻ trên hệ thống từ xa, thay vào đó cho phép bạn định cấu hình toàn bộ môi trường cùng một lúc bằng một tệp duy nhất.
Tuy nhiên, các playbooks có thể trở nên phức tạp khi chúng chịu trách nhiệm định cấu hình nhiều hệ thống khác nhau với nhiều tác vụ cho mỗi hệ thống, vì vậy Ansible cũng cho phép bạn sắp xếp các tác vụ trong cấu trúc thư mục được gọi là Role. Trong cấu hình này, các playbooks invoke roles thay vì tasks, do đó bạn vẫn có thể nhóm các nhiệm vụ lại với nhau rồi sử dụng lại các roles trong các playbook khác. Roles cũng cho phép bạn thu thập các mẫu, tệp tĩnh và biến cùng với các tác vụ của mình ở một định dạng có cấu trúc.
Hướng dẫn này sẽ khám phá cách tạo vai trò và cách thêm mẫu, tệp tĩnh và biến vào một role. Khi bạn đã quen với các nguyên tắc cơ bản về xây dựng roles, chúng ta sẽ sử dụng Ansible Galaxy để kết hợp các roles đóng góp của cộng đồng vào playbooks. Khi kết thúc hướng dẫn này, bạn sẽ có thể tạo các roles cụ thể cho môi trường của riêng mình cho máy chủ và sử dụng chúng trong playbooks của riêng bạn để quản lý một hoặc nhiều hệ thống.
Để làm theo hướng dẫn này, bạn sẽ cần cài đặt và định cấu hình Ansible để có thể tạo và chạy playbooks. Bạn cũng sẽ cần hiểu cách viết Ansible playbooks.
Trong các hướng dẫn tiên quyết, bạn đã học cách chạy công cụ Ansible cốt lõi bằng cách sử dụng lệnh ansible
trong một thiết bị đầu cuối. Bạn cũng đã học cách thu thập các tasks vào playbooks và chạy chúng bằng lệnh ansible-playbook
. Bước tiếp theo trong quá trình từ chạy các lệnh đơn lẻ, đến tasks, đến playbooks là sắp xếp lại mọi thứ bằng cách sử dụng Ansible role.
Roles là một mức độ trừu tượng dựa trên các tasks và playbooks, cho phép bạn cấu trúc cấu hình Ansible của mình theo định dạng mô-đun và có thể tái sử dụng. Khi bạn càng thêm nhiều chức năng và tính linh hoạt vào playbooks của mình, chúng có thể càng khó sử dụng và khó bảo trì. Roles cho phép bạn chia một playbook phức tạp thành các phần nhỏ hơn và riêng biệt, có thể được điều phối bởi điểm truy cập trung tâm (central entry point). Ví dụ: trong hướng dẫn này, toàn bộ playbook.yml
mà chúng ta sẽ làm việc sẽ trông như thế này:
---
- hosts: all
become: true
roles:
- apache
vars:
doc_root: /var/www/example
Toàn bộ nhóm tasks cần thực hiện để định cấu hình máy chủ web Apache sẽ có trong role apache
mà chúng ta sẽ tạo. Roll này sẽ xác định tất cả các tasks cần hoàn thành để cài đặt Apache, thay vì liệt kê từng task riêng lẻ như chúng tôi đã làm trong Điều kiện tiên quyết Quản lý cấu hình 101: Viết Ansible Playbooks.
Việc sắp xếp thiết lập Ansible của bạn thành các roles cho phép bạn sử dụng lại các bước cấu hình chung giữa các loại máy chủ khác nhau. Mặc dù điều này cũng có thể thực hiện được bằng cách bao gồm nhiều tệp tác vụ trong một playbook đơn lẻ, các roles vẫn dựa vào cấu trúc thư mục đã biết và quy ước tên tệp để tự động tải các tệp sẽ được sử dụng trong playbook.
Nói chung, ý tưởng đằng sau các roles là cho phép bạn chia sẻ và sử dụng lại các tasks bằng cách sử dụng cấu trúc nhất quán, đồng thời giúp bạn dễ dàng duy trì chúng mà không cần trùng lặp các tasks cho tất cả cơ sở hạ tầng của mình.
Để tạo Ansible role, bạn sẽ cần cấu trúc thư mục được bố trí cụ thể. Roles luôn cần bố cục thư mục này để Ansible có thể tìm và sử dụng chúng.
Ở đây chúng tôi giả định rằng bạn đã sử dụng home directory của user làm working directory Ansible. Nếu bạn đang giữ cấu hình Ansible của mình ở một vị trí khác, bạn sẽ cần thay đổi (cd
) thành thư mục đó.
Để bắt đầu, hãy tạo một thư mục có tên là roles
. Ansible sẽ xem xét ở đây khi chúng ta muốn sử dụng role mới của mình trong playbook ở phần sau của hướng dẫn này.
- cd ~
- mkdir roles
- cd roles
Trong thư mục này, chúng ta sẽ xác định các roles có thể được sử dụng lại trên nhiều playbooks và các máy chủ khác nhau. Mỗi role mà chúng ta tạo sẽ yêu cầu thư mục riêng. Chúng ta sẽ lấy ví dụ về Apache playbook từ phần hướng dẫn Quản lý cấu hình 101: Viết Ansible Playbooks và biến nó thành một Ansible role có thể tái sử dụng.
Để tham khảo, đây là playbook từ hướng dẫn đó:
---
- hosts: all
become: true
vars:
doc_root: /var/www/example
tasks:
- name: Update apt
apt: update_cache=yes
- name: Install Apache
apt: name=apache2 state=latest
- name: Create custom document root
file: path={{ doc_root }} state=directory owner=www-data group=www-data
- name: Set up HTML file
copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644
- name: Set up Apache virtual host file
template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf
notify: restart apache
handlers:
- name: restart apache
service: name=apache2 state=restarted
Trước tiên, hãy tạo một thư mục Apache cho role của chúng ta và điền vào đó các thư mục được yêu cầu:
- mkdir apache
- cd apache
Tiếp theo, chúng ta sẽ tạo tập hợp các thư mục con cần thiết để cho Ansible biết rằng nó nên sử dụng nội dung làm role. Tạo các thư mục này bằng lệnh mkdir
:
- mkdir defaults files handlers meta templates tasks vars
Các thư mục này sẽ chứa tất cả mã để triển khai role của chúng ta. Nhiều roles sẽ chỉ sử dụng một hoặc một vài thư mục này tùy thuộc vào mức độ phức tạp của các tasks liên quan. Khi bạn viết roles của riêng mình, bạn có thể không cần tạo tất cả các thư mục này.
Dưới đây là mô tả về ý nghĩa của mỗi thư mục:
defaults
: Thư mục này cho phép bạn đặt các biến mặc định cho các roles được bao gồm hoặc phụ thuộc. Mọi giá trị mặc định được đặt ở đây đều có thể bị ghi đè trong playbooks hoặc tệp kiểm kê (inventory files).files
: Thư mục này chứa các tập tin tĩnh và tập lệnh có thể được sao chép hoặc thực thi trên máy chủ từ xa.handlers
: Tất cả các trình xử lý (handlers) có trong playbook của bạn trước đây giờ đây có thể được thêm vào thư mục này.meta
: Thư mục này được dành riêng cho role siêu dữ liệu (metadata), thường được sử dụng để quản lý phụ thuộc… Ví dụ: bạn có thể xác định danh sách các roles phải được áp dụng trước khi role hiện tại được invoke.templates
: Thư mục này được dành riêng cho các mẫu (templates) sẽ tạo tệp trên máy chủ từ xa. Các mẫu thường sử dụng các biến được xác định trên các tệp nằm trong thư mục vars
và trên thông tin máy chủ được thu thập trong runtime.tasks
: Thư mục này chứa một hoặc nhiều tệp với các tasks thường được xác định trong phần tasks
của Ansible playbook thông thường. Các tác vụ này có thể tham chiếu trực tiếp các tệp và mẫu có trong thư mục tương ứng trong role mà không cần cung cấp đường dẫn đầy đủ đến tệp.vars
: Các biến cho một role có thể được chỉ định trong các tệp bên trong thư mục này và sau đó được tham chiếu ở nơi khác trong một role.Nếu tệp có tên main.yml
tồn tại trong một thư mục thì nội dung của nó sẽ tự động được thêm vào playbook gọi role đó. Tuy nhiên, điều này không áp dụng cho các thư mục tệp và mẫu vì nội dung của chúng cần được tham chiếu rõ ràng.
Bây giờ bạn đã quen với mục đích sử dụng của từng thư mục trong Ansible role, chúng ta sẽ biến Apache playbook thành một role để tổ chức mọi thứ tốt hơn.
Chúng ta đã thiết lập cấu trúc role/apache2/{subdirectories}
từ phần trước. Bây giờ, chúng ta cần tạo một số tệp YAML để xác định role của mình.
Chúng ta sẽ bắt đầu với thư mục con tasks. Di chuyển đến thư mục đó ngay bây giờ:
- cd ~/roles/apache/tasks
Chúng ta cần tạo một tệp main.yml
trong thư mục này. Chúng ta sẽ điền vào đó toàn bộ nội dung của Apache playbook và sau đó chỉnh sửa nó để chỉ bao gồm các tasks.
- nano main.yml
Tệp sẽ trông như thế này khi bạn bắt đầu:
---
- hosts: all
become: true
vars:
doc_root: /var/www/example
tasks:
- name: Update apt
apt: update_cache=yes
- name: Install Apache
apt: name=apache2 state=latest
- name: Create custom document root
file: path={{ doc_root }} state=directory owner=www-data group=www-data
- name: Set up HTML file
copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644
- name: Set up Apache virtual host file
template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf
notify: restart apache
handlers:
- name: restart apache
service: name=apache2 state=restarted
Chúng ta chỉ giữ lại dòng ---
đầu tiên và các dòng trong phần tasks
được đánh dấu. Chúng ta cũng có thể loại bỏ các khoảng trống không liên quan ở bên trái nhiệm vụ của mình. Chúng ta cũng sẽ thêm một phần mới để kích hoạt mô-đun Apache có tên modsecurity
mà chúng ta sẽ định cấu hình sau trong hướng dẫn này. Sau những thay đổi này, tệp ~/roles/apache/tasks/main.yml
mới của chúng ta sẽ trông như thế này:
---
- name: Update apt
apt: update_cache=yes
- name: Install Apache
apt: name=apache2 state=latest
- name: Create custom document root
file: path={{ doc_root }} state=directory owner=www-data group=www-data
- name: Set up HTML file
copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644
- name: Set up Apache virtual host file
template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf
notify: restart apache
Bây giờ, tệp tasks dễ theo dõi và dễ hiểu hơn vì nó chỉ chứa các bước thực tế sẽ được thực hiện khi chúng ta sử dụng Apache role.
Lưu ý cách các dòng copy
và template
sử dụng src=index.html
và src=vhost.tpl
tương ứng để tham chiếu các tệp trong role của chúng ta mà không có bất kỳ đường dẫn nào trước đó. Cấu trúc thư mục trong role của chúng ta cho phép tham chiếu trực tiếp các tệp và mẫu theo tên của chúng và Ansible sẽ tự động tìm chúng cho chúng ta.
Đảm bảo lưu và đóng tệp khi bạn chỉnh sửa xong.
main.yml
HandlersBây giờ chúng ta đã có phần lớn playbook trong tệp task/main.yml
, chúng ta cần di chuyển phần handlers vào một tệp nằm ở handlers/main.yml
.
cd
đầu tiên vào thư mục con handlers
trong role của chúng ta:
- cd ~/roles/apache/handlers
Một lần nữa, hãy mở tệp trong trình soạn thảo văn bản của bạn và dán toàn bộ nội dung của playbook.yml
gốc:
- nano main.yml
Những phần chúng ta cần giữ sẽ được đánh dấu lại:
---
- hosts: all
become: true
vars:
doc_root: /var/www/example
tasks:
- name: Update apt
apt: update_cache=yes
- name: Install Apache
apt: name=apache2 state=latest
- name: Create custom document root
file: path={{ doc_root }} state=directory owner=www-data group=www-data
- name: Set up HTML file
copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644
- name: Set up Apache virtual host file
template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf
notify: restart apache
handlers:
- name: restart apache
service: name=apache2 state=restarted
Loại bỏ khoảng trắng trước handlers. Cuối cùng, tập tin sẽ trông như thế này:
---
- name: restart apache
service: name=apache2 state=restarted
Lưu và đóng tập tin khi bạn hoàn tất.
Bây giờ chúng ta đã có các tasks và handlers sẵn sàng, bước tiếp theo là đảm bảo có tệp index.html
và template vhost.tpl
để Ansible có thể tìm và đặt chúng trên các máy chủ từ xa của chúng ta. Vì chúng tôi đã tham chiếu các tệp này trong tệp task/main.yml
, nên chúng cần tồn tại, nếu không Ansible sẽ không thể chạy vai trò đúng cách.
Đầu tiên, tạo tệp index.html
trong thư mục ~/roles/apache/files
:
cd ~/roles/apache/files
nano index.html
Dán phần sau vào trình chỉnh sửa, sau đó lưu và đóng nó:
<html>
<head><title>Configuration Management Hands On</title></head>
<h1>This server was provisioned using <strong>Ansible</strong></h1>
</html>
Tiếp theo chúng ta sẽ chỉnh sửa template vhost.tpl
. Thay đổi thư mục templates và chỉnh sửa tệp bằng nano:
- cd ~/roles/apache/templates
- nano vhost.tpl
Dán những dòng này vào trình chỉnh sửa, sau đó lưu và đóng nó:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot {{ doc_root }}
<Directory {{ doc_root }}>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Nếu role của chúng ta phụ thuộc vào role khác, chúng ta có thể thêm một tệp vào thư mục meta
có tên main.yml
. Tệp này có thể chỉ định rằng role này phụ thuộc vào role có tên là “apt”. Trong Apache role mà chúng tôi đã tạo, chúng tôi không yêu cầu bất kỳ sự phụ thuộc nào. Tuy nhiên, trong trường hợp giả định yêu cầu một role khác như “apt”, tệp tại ~/roles/apache/meta/main.yml
có thể trông như thế này:
---
dependencies:
- apt
Điều này sẽ đảm bảo rằng role “apt” được chạy trước Apache role của chúng tôi. Việc tạo các phần phụ thuộc như thế này rất hữu ích với các roles phức tạp hơn đòi hỏi phải có sẵn các phần mềm hoặc cấu hình khác trước khi chạy role thực tế.
Chúng tôi đã nói trước đó rằng có một thư mục “vars” có thể được sử dụng để đặt các biến cho role của chúng tôi. Mặc dù có thể định cấu hình các tham số mặc định cho một role thông qua tệp vars/main.yml
, nhưng điều này thường không được khuyến khích cho các roles nhỏ hơn.
Lý do không sử dụng thư mục “vars” là vì nó làm cho các chi tiết cấu hình của bạn nằm trong hệ thống phân cấp role. Role chủ yếu là các tasks chung và phần phụ thuộc, trong khi các biến là dữ liệu cấu hình. Việc kết hợp cả hai sẽ khiến việc sử dụng lại role của bạn ở nơi khác trở nên khó khăn hơn.
Thay vào đó, tốt hơn hết bạn nên chỉ định chi tiết cấu hình bên ngoài role để bạn có thể dễ dàng chia sẻ role mà không lo bị lộ thông tin nhạy cảm. Ngoài ra, các biến được khai báo trong một role có thể dễ dàng bị ghi đè bởi các biến ở các vị trí khác. Sẽ tốt hơn nhiều nếu đặt dữ liệu có thể thay đổi vào playbooks được sử dụng cho các tác vụ cụ thể.
Tuy nhiên, thư mục “vars” vẫn đáng được nhắc đến ở đây vì nó hữu ích với những roles phức tạp hơn. Ví dụ: nếu một role cần hỗ trợ các bản phân phối Linux khác nhau, việc chỉ định giá trị mặc định cho các biến sẽ rất hữu ích để xử lý các tên, phiên bản và cấu hình gói khác nhau.
Đôi khi bạn tạo các roles có nhiều tasks, phần phụ thuộc hoặc logic có điều kiện, chúng sẽ trở nên khó hiểu. Trong những tình huống như thế này, bạn có thể chia các tasks thành các tệp riêng và đưa chúng vào task/main.yml
của mình.
Ví dụ: nếu chúng tôi có một nhóm tác vụ bổ sung để định cấu hình TLS cho máy chủ Apache của mình, chúng tôi có thể tách chúng thành tệp riêng. Chúng ta có thể gọi tệp task/tls.yml
và đưa nó như thế này vào tệp task/main.yml
:
. . .
tasks:
- include: roles/apache/tasks/tls.yml
Bây giờ chúng ta đã định cấu hình cấu trúc role của mình, chúng ta có thể sử dụng nó với một playbook tối thiểu so với phiên bản monolithic ở đầu hướng dẫn này.
Việc sử dụng các roles theo cách này cho phép chúng ta sử dụng playbooks để khai báo những gì máy chủ phải làm mà không cần phải luôn lặp lại việc tạo các tác vụ để thực hiện điều đó.
Để tạo một playbook tối thiểu bao gồm Apache role của chúng ta, hãy cd
ra khỏi thư mục role (thư mục chính của chúng ta trong ví dụ này). Bây giờ chúng ta có thể tạo một tệp playbook:
- cd ~
- nano playbook.yml
Khi bạn đã mở tệp, hãy dán đoạn sau rồi lưu và đóng tệp:
---
- hosts: all
become: true
roles:
- apache
vars:
- doc_root: /var/www/example
Có rất ít thông tin cần thiết trong tập tin này. Đầu tiên, chúng ta liệt kê các máy chủ mà chúng ta muốn chạy role này trên đó, vì vậy chúng ta sử dụng - hosts: all
. Nếu bạn có một nhóm máy chủ được gọi là webservers
, bạn có thể nhắm mục tiêu chúng. Tiếp theo, chúng ta khai báo các roles mà chúng ta đang sử dụng. Trong trường hợp này chỉ có một, vì vậy chúng ta sử dụng dòng - apache
.
Đây là toàn bộ playbook của chúng ta. Nó rất nhỏ và nhanh chóng để đọc và hiểu. Việc giữ playbooks gọn gàng như thế này cho phép chúng ta tập trung vào các mục tiêu tổng thể để định cấu hình máy chủ, thay vì cơ chế của các tác vụ riêng lẻ. Thậm chí tốt hơn nữa, nếu chúng ta có nhiều yêu cầu về role, chúng ta có thể liệt kê chúng trong phần roles
trong playbook của mình và chúng sẽ chạy theo thứ tự xuất hiện.
Ví dụ: nếu chúng ta có role thiết lập máy chủ WordPress bằng Apache và MySQL, thì chúng ta có thể có một playbook giống như thế này:
---
- hosts: wordpress_hosts
become: true
roles:
- apache
- php
- mysql
- wordpress
vars:
- doc_root: /var/www/example
Cấu trúc playbook này cho phép chúng ta trình bày rất ngắn gọn về hình thức mà chúng ta muốn một máy chủ trông như thế nào. Cuối cùng, vì playbooks gọi các roles nên lệnh chạy của chúng ta hoàn toàn giống như thể tất cả đều nằm trong một tệp duy nhất:
- ansible-playbook playbook.yml
OutputPLAY [all] ******************************************************************************************
TASK [Gathering Facts] ******************************************************
ok: [64.225.15.1]
TASK [apache : Update apt] **************************************************
ok: [64.225.15.1]
TASK [apache : Install Apache] **********************************************
changed: [64.225.15.1]
TASK [apache : Create custom document root] *********************************
changed: [64.225.15.1]
TASK [apache : Set up HTML file] ********************************************
changed: [64.225.15.1]
TASK [apache : Set up Apache virtual host file] *****************************
changed: [64.225.15.1]
RUNNING HANDLER [apache : restart apache] ***********************************
changed: [64.225.15.1]
PLAY RECAP ******************************************************************
64.225.15.1 : ok=7 changed=5 unreachable=0 failed=0
Ví dụ: bạn cũng có thể gọi tệp playbook.yml
là apache.yml
để làm cho tên của tệp phản ánh (các) role mà nó chứa.
Hướng dẫn về các roles của Ansible sẽ không hoàn chỉnh nếu không khám phá các tài nguyên có sẵn thông qua Ansible Galaxy. Galaxy có thể được tìm kiếm là kho lưu trữ các roles do người dùng đóng góp mà bạn có thể thêm vào playbooks để hoàn thành các tasks khác nhau mà không cần phải tự viết chúng.
Ví dụ: chúng ta có thể thêm một mô-đun Apache hữu ích có tên mod_security2
vào playbook của mình để định cấu hình Apache với một số cài đặt bảo mật bổ sung. Chúng tôi sẽ sử dụng Ansible Galaxy role có tên là apache_modsecurity
. Để sử dụng role này, chúng ta sẽ tải nó xuống cục bộ rồi đưa role đó vào playbook của chúng ta.
Đầu tiên chúng ta hãy làm quen với công cụ ansible-galaxy
. Chúng ta sẽ tìm kiếm Galaxy bằng công cụ này và sau đó chọn một role từ danh sách được trả về từ lệnh tìm kiếm của chúng ta:
- ansible-galaxy search "PHP for RedHat/CentOS/Fedora/Debian/Ubuntu"
Lệnh tìm kiếm sẽ xuất ra kết quả như sau:
OutputFound 21 roles matching your search:
Name Description
---- -----------
alikins.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
bpresles.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
entanet_devops.ansible_role_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
esperdyne.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
fidanf.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
frogasia.ansible-role-php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
geerlingguy.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
icamys.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
jhu-sheridan-libraries.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
jibsan94.ansible_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
KAMI911.ansible_role_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
monsieurbiz.geerlingguy_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
nesh-younify.ansible-role-php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
net2grid.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
thom8.ansible-role-php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
v0rts.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
vahubert.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
Vaizard.mage_php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
viasite-ansible.php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
vvgelder.ansible-role-php PHP for RedHat/CentOS/Fedora/Debian/Ubuntu.
(END)
Ansible sẽ sử dụng lệnh less
để xuất kết quả tìm kiếm nếu có nhiều kết quả, lệnh này sẽ chặn thiết bị đầu cuối của bạn cho đến khi bạn nhấn q
để thoát. Điều này rất hữu ích khi kết quả tìm kiếm có phạm vi rộng và bạn cần phân trang trên chúng, bạn có thể thực hiện việc này bằng cách nhấn phím space
.
Chúng ta sẽ chọn role geerlingguy.php
cho playbook của mình. Nếu muốn đọc thêm về các roles được kết quả tìm kiếm trả về, bạn có thể truy cập trang tìm kiếm Galaxy và dán vào tên role mà bạn muốn tìm hiểu thêm.
Để tải xuống một role để sử dụng trong playbook của chúng ta, chúng ta sử dụng lệnh ansible-galaxy install
:
- ansible-galaxy install geerlingguy.php
Khi bạn chạy lệnh đó, bạn sẽ thấy kết quả như thế này:
Output- downloading role 'php', owned by geerlingguy
- downloading role from https://github.com/geerlingguy/ansible-role-php/archive/3.7.0.tar.gz
- extracting geerlingguy.php to /home/sammy/.ansible/roles/geerlingguy.php
- geerlingguy.php (3.7.0) was installed successfully
Bây giờ chúng ta có thể thêm role vào tệp playbook.yml
của mình:
---
- hosts: all
become: true
roles:
- apache
- geerlingguy.php
vars:
- doc_root: /var/www/example
- php_default_version_debian: "7.2"
Bằng cách đặt role sau role apache
của chúng ta, chúng ta đảm bảo Apache được thiết lập và định cấu hình trên các hệ thống từ xa trước bất kỳ cấu hình nào cho vị trí role geerlingguy.php
. Chúng ta cũng có thể bao gồm các role mysql
và wordpress
theo bất kỳ thứ tự nào chúng ta chọn tùy thuộc vào cách chúng ta muốn các máy chủ từ xa hoạt động.
Chạy ansible-playbook playbook.yml
với role Galaxy được thêm vào sẽ cho kết quả như sau:
OutputPLAY [all] *********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [64.225.15.1]
TASK [apache : Update apt] *****************************************************
changed: [64.225.15.1]
TASK [apache : Install Apache] *************************************************
changed: [64.225.15.1]
TASK [apache : Install modsecurity] ********************************************
changed: [64.225.15.1]
TASK [apache : Create custom document root] ************************************
changed: [64.225.15.1]
TASK [apache : Set up HTML file] ***********************************************
changed: [64.225.15.1]
TASK [apache : Set up Apache virtual host file] ********************************
changed: [64.225.15.1]
TASK [geerlingguy.php : Include OS-specific variables.] ************************
ok: [64.225.15.1]
TASK [geerlingguy.php : Define php_packages.] **********************************
ok: [64.225.15.1]
. . .
PLAY RECAP *********************************************************************
64.225.15.1 : ok=37 changed=15 unreachable=0 failed=0
(END)
Ansible roles là một cách tuyệt vời để cấu trúc và xác định máy chủ của bạn sẽ trông như thế nào. Bạn nên học cách sử dụng chúng ngay cả khi bạn chỉ có thể dựa vào sách hướng dẫn cho từng máy chủ của mình. Nếu bạn dự định sử dụng Ansible rộng rãi, các roles sẽ giữ cấu hình cấp máy chủ của bạn tách biệt khỏi task của bạn và đảm bảo Ansible code của bạn sạch sẽ và dễ đọc. Quan trọng nhất, role cho phép bạn dễ dàng sử dụng lại và chia sẻ code cũng như triển khai các thay đổi của mình theo kiểu mô-đun và được kiểm soát.