Thứ sáu, 03/01/2020 | 00:00 GMT+7

cách sử dụng role Ansible để Tóm tắt Môi trường Cơ sở hạ tầng của bạn

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 server cho administrator và group vận hành. Với Ansible, bạn có thể sử dụng một server trung tâm duy nhất để điều khiển và cấu hình nhiều hệ thống từ xa khác nhau bằng cách sử dụng SSH và Python như một yêu cầu duy nhất.

Ansible thực hiện các nhiệm vụ trên các server mà nó quản lý dựa trên các định nghĩa nhiệm vụ. Các việc này gọi các module Ansible được 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à nhiều loại hệ thống mà bạn quản lý bằng một nút điều khiển Ansible trở nên phức tạp hơn, thì việc group các nhiệm vụ lại với nhau thành sách chơi Ansible sẽ rất hợp lý . Sử dụng playbook loại bỏ nhu cầu chạy nhiều tác vụ riêng lẻ trên các hệ thống từ xa, thay vào đó cho phép bạn cấu hình toàn bộ môi trường cùng một lúc với một file duy nhất.

Tuy nhiên, playbook có thể trở nên phức tạp khi chúng chịu trách nhiệm 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 tổ chức các việc trong một cấu trúc folder được gọi là Role . Trong cấu hình này, sách vở gọi các role thay vì các việc , vì vậy bạn vẫn có thể group các việc lại với nhau và sau đó sử dụng lại các role trong các vở kịch khác. Role cũng cho phép bạn thu thập các mẫu, file tĩnh và biến cùng với các nhiệm vụ của bạn ở một định dạng có cấu trúc.

Hướng dẫn này sẽ khám phá cách tạo role và cách thêm mẫu, file 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 của việc xây dựng role , ta sẽ sử dụng Ansible Galaxy để kết hợp các role do cộng đồng đóng góp vào sách vở. Đến cuối hướng dẫn này, bạn có thể tạo các role cụ thể trong môi trường của riêng mình cho các server của bạn và sử dụng chúng trong sách phát của bạn để quản lý một hoặc nhiều hệ thống.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần cài đặt và cấu hình Ansible để có thể tạo và chạy playbook. Bạn cũng cần hiểu cách viết sách phát Ansible .

Role Ansible là gì?


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 terminal . Bạn cũng đã học cách thu thập các nhiệm vụ vào playbook 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 nhiệm vụ, đến sách vở là tổ chức lại mọi thứ bằng cách sử dụng role Ansible.

Role là một mức độ trừu tượng trên các nhiệm vụ và playbook cho phép bạn cấu trúc cấu hình Ansible của bạn theo định dạng module và có thể tái sử dụng. Khi bạn thêm ngày càng nhiều chức năng và tính linh hoạt vào sách vở của bạn , chúng có thể trở nên khó sử dụng và khó bảo trì. Các role cho phép bạn chia nhỏ một playbook phức tạp thành các phần riêng biệt, nhỏ hơn có thể được điều phối bởi một điểm vào trung tâm. Ví dụ: trong hướng dẫn này, toàn bộ playbook.yml mà ta sẽ làm việc với giao diện như sau:

Playbook mẫu
  • ---
  • - hosts: all
  • become: true
  • roles:
  • - apache
  • vars:
  • doc_root: /var/www/example

Toàn bộ tập hợp các nhiệm vụ được thực hiện để cấu hình một web server Apache sẽ được chứa trong role apache mà ta sẽ tạo. Cuộn sẽ xác định tất cả các việc cần phải hoàn thành để cài đặt Apache, thay vì liệt kê từng tác vụ riêng lẻ như ta đã làm trong Điều kiện tiên quyết Quản lý cấu hình 101: Viết Playbook Ansible .

Tổ chức cài đặt Ansible của bạn thành các role 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 server 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 file nhiệm vụ trong một vở kịch, các role dựa trên cấu trúc folder đã biết và quy ước tên file để tự động tải các file sẽ được sử dụng trong vở kịch.

Nói chung, ý tưởng đằng sau các role là cho phép bạn chia sẻ và sử dụng lại các việc bằng cách sử dụng một 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 trùng lặp các việc cho tất cả cơ sở hạ tầng của bạn.

Tạo một role


Để tạo một role Ansible, bạn cần một cấu trúc folder được bố trí cụ thể. Các role luôn cần bố trí folder này để Ansible có thể tìm và sử dụng chúng.

Ở đây ta giả định bạn đang sử dụng folder chính của user làm folder làm việc Ansible. Nếu bạn đang giữ cấu hình Ansible của bạn ở một vị trí khác, bạn cần thay đổi ( cd ) sang folder đó.

Để bắt đầu, hãy tạo một folder có tên là roles . Ansible sẽ xem xét ở đây khi ta muốn sử dụng role mới của bạn trong một playbook ở phần sau của hướng dẫn này.

  • cd ~
  • mkdir roles
  • cd roles

Trong folder này, ta sẽ xác định các role được dùng lại trên nhiều sách vở và các server khác nhau. Mỗi role mà ta sẽ tạo yêu cầu folder riêng của nó. Ta sẽ lấy ví dụ về playbook Apache từ hướng dẫn Quản lý cấu hình 101: Viết Playbooks Ansible và biến nó thành một role Ansible có thể tái sử dụng.

Để tham khảo, đây là playbook từ hướng dẫn đó:

playbook.yml
  • ---
  • - 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

Đầu tiên, hãy tạo một folder Apache cho role của ta và điền nó với các folder bắt buộc:

  • mkdir apache
  • cd apache

Tiếp theo, ta sẽ tạo một tập hợp các folder con được yêu cầu để Ansible biết rằng nó nên sử dụng nội dung như một role . Tạo các folder này bằng mkdir :

  • mkdir defaults files handlers meta templates tasks vars

Các folder này sẽ chứa tất cả các mã để thực hiện role của ta . Nhiều role sẽ chỉ sử dụng một hoặc một vài folder này tùy thuộc vào mức độ phức tạp của các nhiệm vụ liên quan. Khi bạn đang viết các role của riêng mình, bạn có thể không cần tạo tất cả các folder này.

Đây là mô tả về những gì mỗi folder đại diện:

  • defaults : Thư mục này cho phép bạn đặt các biến mặc định cho các role phụ thuộc hoặc bao gồm. Bất kỳ giá trị mặc định nào được đặt ở đây đều có thể bị overrides trong sách phát hoặc file hàng tồn kho.
  • files : Thư mục này chứa file tĩnh và file tập lệnh có thể được sao chép hoặc thực thi trên server từ xa.
  • handlers : Tất cả các trình xử lý có trong sổ chơi của bạn trước đây hiện có thể được thêm vào folder này.
  • meta : Thư mục này được dành riêng cho metadata role , thường được sử dụng để quản lý dependencies . Ví dụ: bạn có thể xác định danh sách các role phải được áp dụng trước khi role hiện tại được gọi.
  • templates : Thư mục này được dành riêng cho các mẫu sẽ tạo file trên server từ xa. Các mẫu thường sử dụng các biến được xác định trên các file nằm trong folder vars và trên thông tin server được thu thập trong thời gian chạy.
  • tasks : Thư mục này chứa một hoặc nhiều file với các việc thường được xác định trong phần tasks của một playbook Ansible thông thường. Các việc này có thể tham chiếu trực tiếp đến các file và mẫu có trong folder tương ứng của chúng trong role mà không cần cung cấp đường dẫn đầy đủ đến file .
  • vars : Các biến cho một role có thể được chỉ định trong file bên trong folder này và sau đó được tham chiếu ở nơi khác trong một role .

Nếu một file có tên là main.yml tồn tại trong một folder , nội dung của nó sẽ được tự động thêm vào playbook gọi role . Tuy nhiên, điều này không áp dụng cho filestemplates , vì nội dung của chúng cần được tham chiếu một cách rõ ràng.

Biến Playbook thành một role


Đến đây bạn đã quen với việc mỗi folder trong role Ansible được sử dụng để làm gì, ta sẽ biến vở kịch Apache thành một role để tổ chức mọi thứ tốt hơn.

Ta đã có cấu trúc roles/apache2/{subdirectories} được cài đặt từ phần trước. Bây giờ, ta cần tạo một số file YAML để xác định role của bạn .

Tạo Tasks main.yml File


Ta sẽ bắt đầu với folder con nhiệm vụ. Chuyển đến folder đó ngay bây giờ:

  • cd ~/roles/apache/tasks

Ta cần tạo một file main.yml trong folder này. Ta sẽ điền nó vào toàn bộ nội dung của playbook Apache và sau đó chỉnh sửa nó để chỉ bao gồm các nhiệm vụ.

  • nano main.yml

Tệp sẽ trông như thế này khi bạn bắt đầu:

main.yml
  • ---
  • - 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

Ta chỉ muốn giữ dòng --- đầu tiên và các dòng trong phần tasks được đánh dấu. Ta cũng có thể xóa các khoảng trắng không liên quan ở bên trái nhiệm vụ của bạn . Ta cũng sẽ thêm một phần mới để kích hoạt một module Apache có tên là modsecurity mà ta sẽ cấu hình sau trong hướng dẫn này. Sau những thay đổi này, file ~/roles/apache/tasks/main.yml mới của ta sẽ trông giống như sau:

main.yml
  • ---
  • - 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ờ file nhiệm vụ 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 ta sử dụng role Apache.

Lưu ý cách các dòng copytemplate sử dụng src=index.htmlsrc=vhost.tpl tương ứng để tham chiếu các file trong role của ta , mà không có bất kỳ đường dẫn nào trước đó. Cấu trúc folder của role của ta cho phép tham chiếu trực tiếp các file và mẫu theo tên của chúng và Ansible sẽ tự động tìm thấy chúng cho ta .

Đảm bảo lưu file khi bạn hoàn tất chỉnh sửa.

Tạo file trình xử lý main.yml

Bây giờ ta có phần lớn playbook trong file tasks/main.yml , ta cần di chuyển phần xử lý vào một file nằm tại file handlers/main.yml .

cd đầu tiên vào folder con của handlers trong role của ta :

  • cd ~/roles/apache/handlers

, hãy mở file trong editor của bạn và dán toàn bộ nội dung của playbook.yml root :

  • nano main.yml

Những phần ta cần giữ lại được đánh dấu:

playbook.yml
  • ---
  • - 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 từ trước cả các trình xử lý. Cuối cùng, file sẽ trông như thế này:

--- - name: restart apache   service: name=apache2 state=restarted 

Lưu file khi bạn hoàn tất.

Thêm file và mẫu


Bây giờ ta đã có các việc và trình xử lý, bước tiếp theo là đảm bảo có index.html và mẫu vhost.tpl để Ansible có thể tìm và đặt chúng trên các server từ xa của ta . Vì ta đã tham chiếu các file này trong file tasks/main.yml , chúng cần phải tồn tại nếu không Ansible sẽ không thể chạy đúng role .

Đầu tiên, tạo index.html trong folder ~/roles/apache/files :

  • cd ~/roles/apache/files
  • nano index.html

Dán nội dung sau vào editor , 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, ta sẽ chỉnh sửa mẫu vhost.tpl . Thay đổi folder mẫu và chỉnh sửa file bằng nano:

  • cd ~/roles/apache/templates
  • nano vhost.tpl

Dán những dòng này vào editor , sau đó lưu và đóng nó:

<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot {{ doc_root }}  <Directory {{ doc_root }}> AllowOverride All Require all granted </Directory> </VirtualHost> 

Thư mục Meta

Nếu role của ta phụ thuộc vào một role khác, ta có thể thêm một file trong folder meta tên là main.yml . Tệp này có thể chỉ định rằng role này phụ thuộc vào một role được gọi là "apt". Trong role Apache mà ta đã tạo, ta không yêu cầu bất kỳ 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”, file tại ~/roles/apache/meta/main.yml có thể trông giống như sau:

--- dependencies:   - apt 

Điều này sẽ đảm bảo role "apt" được chạy trước role Apache của ta . Việc tạo các phần phụ thuộc như thế này rất hữu ích với các role phức tạp hơn đòi hỏi các phần mềm hoặc cấu hình khác phải có trước khi chạy role thực sự.

Thư mục Vars

Ta đã nói trước đó rằng có một folder “vars” được dùng để đặt các biến cho role của ta . Mặc dù có thể cấu hình các thông số mặc định cho một role thông qua file vars/main.yml , nhưng điều này thường không được khuyến khích cho các role nhỏ hơn.

Lý do không sử dụng folder "vars" là nó làm cho các chi tiết cấu hình của bạn nằm trong phân cấp role . Một role chủ yếu là các nhiệm vụ và phụ thuộc chung, trong khi các biến là dữ liệu cấu hình. Kết hợp cả hai khiến bạn khó sử dụng lại role của bạn ở nơi khác.

Thay vào đó, tốt hơn là 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 dễ bị overrides 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 biến đổi trong sách phát được sử dụng cho các việc cụ thể.

Tuy nhiên, folder “vars” vẫn đáng được đề cập ở đây vì nó hữu ích với các role 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 có thể hữu ích để xử lý các tên gói, version và cấu hình khác nhau.

Bao gồm các file khác

Đôi khi khi bạn tạo các role với nhiều nhiệm vụ, phụ thuộc hoặc logic có điều kiện, chúng sẽ trở nên lớn và khó hiểu. Trong những tình huống như thế này, bạn có thể chia các nhiệm vụ thành các file của riêng chúng và đưa chúng vào tasks/main.yml của bạn.

Ví dụ: nếu ta có một group tác vụ bổ sung để cấu hình TLS cho server Apache của bạn , ta có thể tách chúng ra thành file riêng của chúng. Ta có thể gọi file tasks/tls.yml và bao gồm nó như thế này trong file tasks/main.yml :

. . . tasks: - include: roles/apache/tasks/tls.yml 

Tạo Playbook Skeleton


Bây giờ ta đã cấu hình cấu trúc role của bạn , ta có thể sử dụng nó với một playbook tối thiểu so với version nguyên khối ở đầu hướng dẫn này.

Việc sử dụng các role theo cách này cho phép ta sử dụng các playbook để khai báo những gì một server phải làm mà không cần phải luôn lặp lại các việc tạo để làm cho nó như vậy.

Để tạo một playbook tối thiểu bao gồm role Apache của ta , hãy cd ra khỏi folder role (thư mục chính của ta trong ví dụ này). Bây giờ ta có thể tạo một file playbook:

  • cd ~
  • nano playbook.yml

Khi bạn đã mở file , hãy dán thông tin sau, sau đó lưu file :

--- - hosts: all   become: true   roles:     - apache   vars:     - doc_root: /var/www/example 

Có rất ít thông tin cần thiết trong file này. Đầu tiên, ta liệt kê các server mà ta muốn chạy role này, vì vậy ta sử dụng - hosts: all . Nếu bạn có một group server được gọi là webservers bạn có thể nhắm đến chúng thay thế. Tiếp theo, ta khai báo các role mà ta đang sử dụng. Trong trường hợp này chỉ có một, vì vậy ta sử dụng dòng - apache .

Đây là toàn bộ vở kịch của ta . Nó rất nhỏ và nhanh chóng để đọc và hiểu. Giữ cho sách vở gọn gàng như thế này cho phép ta tập trung vào các mục tiêu tổng thể để cấu hình server , thay vì cơ chế của các việc riêng lẻ. Tốt hơn nữa, nếu ta có nhiều yêu cầu về role , giờ đây ta có thể liệt kê chúng trong phần roles trong sách vở của bạn và chúng sẽ chạy theo thứ tự xuất hiện.

Ví dụ: nếu ta có các role để cài đặt server WordPress bằng Apache và MySQL, ta có thể có một playbook giống như sau:

--- - 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 ta hiểu rất ngắn gọn về những gì ta muốn một server trông như thế nào. Cuối cùng, vì sách vở gọi các role nên lệnh chạy của ta giống hệt như thể tất cả đều nằm trong một file duy nhất:

  • ansible-playbook playbook.yml
Output
PLAY [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

Bạn cũng có thể gọi file playbook.yml apache.yml để làm cho tên của file phản ánh (các) role mà nó chứa.

Ansible Galaxy

Hướng dẫn về các role 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ể tìm kiếm là một repository các role do user đóng góp mà bạn có thể thêm vào sách phát để hoàn thành các nhiệm vụ khác nhau mà không cần phải tự viết chúng.

Ví dụ: ta có thể thêm một module Apache hữu ích được gọi là mod_security2 vào playbook của ta để cấu hình Apache với một số cài đặt bảo mật bổ sung. Ta sẽ sử dụng một role Ansible Galaxy được gọi là apache_modsecurity . Để sử dụng role này, ta sẽ download local và sau đó đưa nó vào playbook của ta .

Đầu tiên ta hãy làm quen với công cụ ansible-galaxy . Ta sẽ tìm kiếm Galaxy bằng công cụ và sau đó chọn một role từ danh sách được trả về từ lệnh tìm kiếm của ta :

  • ansible-galaxy search "PHP for RedHat/CentOS/Fedora/Debian/Ubuntu"

Lệnh tìm kiếm sẽ xuất ra một thứ như sau:

Output
Found 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 terminal cho đến khi bạn nhấn q để thoát. Đây là hữu ích cho khi kết quả tìm kiếm được mở rộng và bạn cần phải paginate qua chúng, mà bạn có thể thực hiện bằng cách nhấn space .

Ta sẽ chọn role geerlingguy.php cho playbook của ta . Nếu bạn muốn đọc thêm về các role mà kết quả tìm kiếm của bạn trả về, bạn có thể truy cập trang tìm kiếm Galaxy và paste vào tên role mà bạn muốn tìm hiểu thêm.

Để download một role để sử dụng trong playbook của ta , 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ư sau:

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ờ ta có thể thêm role vào file playbook.yml :

--- - 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 ta , ta đảm bảo Apache được cài đặt và 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 . Ta cũng có thể bao gồm các role mysqlwordpress theo bất kỳ thứ tự nào ta chọn tùy thuộc vào cách ta muốn các server từ xa hoạt động.

Chạy ansible-playbook playbook.yml với role Galaxy được thêm vào sẽ dẫn đến kết quả như sau:

Output
PLAY [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)

Kết luận

Các role có thể phục hồi là một cách tốt để cấu trúc và xác định các server của bạn trông như thế nào. Bạn nên học cách sử dụng chúng ngay cả khi bạn có thể chỉ dựa vào sách phát cho từng server của bạn . Nếu bạn có kế hoạch sử dụng rộng rãi Ansible, các role sẽ giữ cho cấu hình cấp server của bạn tách biệt với tác vụ của bạn và đảm bảo mã Ansible của bạn sạch và dễ đọc. Quan trọng nhất, các role cho phép bạn dễ dàng sử dụng lại và chia sẻ mã cũng như thực hiện các thay đổi theo kiểu module và được kiểm soát.


Tags:

Các tin liên quan