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:
- --- 
- - 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 đó:
- --- 
- - 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 foldervarsvà 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ầntaskscủ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 files và templates , 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:
- --- 
- - 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:
- --- 
- - 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 copy và template sử dụng src=index.html và src=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:
- --- 
- - 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 
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 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:
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  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  mysql và wordpress 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:
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) 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.
Các tin liên quan
 

