Làm thế nào để kiểm tra các vai trò không thể phục hồi với Molecule trên Ubuntu 18.04
Kiểm tra đơn vị trong Ansible là key đảm bảo các role hoạt động như dự định. Molecule làm cho quá trình này dễ dàng hơn bằng cách cho phép bạn chỉ định các tình huống kiểm tra các role trong các môi trường khác nhau. Sử dụng Ansible dưới mui xe, Molecule giảm tải các role cho người cung cấp triển khai role trong môi trường được cấu hình và gọi một trình xác minh (chẳng hạn như Testinfra ) để kiểm tra độ lệch cấu hình. Điều này đảm bảo role của bạn đã thực hiện tất cả những thay đổi dự kiến đối với môi trường trong kịch bản cụ thể đó.Trong hướng dẫn này, bạn sẽ xây dựng một role Ansible triển khai Apache cho một server và cấu hình firewalld trên CentOS 7. Để kiểm tra xem role này có hoạt động như dự định hay không, bạn sẽ tạo một bài kiểm tra trong Molecule bằng cách sử dụng Docker làm trình điều khiển và Testinfra, một thư viện Python để kiểm tra trạng thái của server . Molecule sẽ cung cấp các containers Docker để kiểm tra role và Testinfra sẽ xác minh server đã được cấu hình như dự định. Khi hoàn tất, bạn có thể tạo nhiều trường hợp thử nghiệm cho các bản dựng trên các môi trường và chạy các thử nghiệm này bằng Molecule.
Yêu cầu
Trước khi bắt đầu hướng dẫn này, bạn cần những thứ sau:
- Một server Ubuntu 18.04. Làm theo các bước trong hướng dẫn Cài đặt server ban đầu với Ubuntu 18.04 để tạo user sudo không phải root và đảm bảo bạn có thể kết nối với server mà không cần password .
- Docker được cài đặt trên server của bạn. Làm theo Bước 1 và 2 trong Cách cài đặt và sử dụng Docker trên Ubuntu 18.04 , bao gồm cả việc thêm user không phải root của bạn vào group
docker
. - Python 3 và
venv
đã được cài đặt và cấu hình trên server của bạn. Làm theo Cách cài đặt Python 3 và Cài đặt Môi trường Lập trình trên Server Ubuntu 18.04 để được hướng dẫn. - Làm quen với sách vở Ansible. Để xem lại, hãy xem Quản lý cấu hình 101: Viết Playbook Ansible .
Bước 1 - Chuẩn bị Môi trường
Nếu bạn đã tuân theo các yêu cầu , bạn nên cài đặt và cấu hình đúng Python 3, venv
và Docker. Hãy bắt đầu bằng cách tạo một môi trường ảo để kiểm tra Ansible với Molecule.
Bắt đầu bằng cách đăng nhập với quyền là user không phải root của bạn và tạo một môi trường ảo mới:
- python3 -m venv my_env
Kích hoạt nó đảm bảo rằng các hành động của bạn bị hạn chế trong môi trường đó:
- source my_env/bin/activate
Tiếp theo, trong môi trường đã kích hoạt của bạn, hãy cài đặt gói wheel
, gói này cung cấp phần mở rộng bdist_wheel
setuptools
mà pip
sử dụng để cài đặt Ansible:
- python3 -m pip install wheel
Đến đây bạn có thể cài đặt molecule
và docker
bằng pip
. Ansible sẽ được tự động cài đặt như một phụ thuộc cho Molecule:
- python3 -m pip install molecule docker
Đây là những gì mỗi gói này sẽ làm:
-
molecule
: Đây là gói Phân tử chính mà bạn sẽ sử dụng để kiểm tra các role . Cài đặtmolecule
tự động cài đặt Ansible, cùng với các phụ thuộc khác và cho phép sử dụng sách chơi Ansible để thực hiện các role và thử nghiệm. -
docker
: Thư viện Python này được Molecule sử dụng để giao tiếp với Docker. Bạn cần điều này vì bạn đang sử dụng Docker làm trình điều khiển.
Tiếp theo, hãy tạo một role trong Molecule.
Bước 2 - Tạo role trong phân tử
Với môi trường của bạn được cài đặt , bạn có thể sử dụng Molecule để tạo một role cơ bản mà bạn sẽ sử dụng để kiểm tra cài đặt Apache. Role này sẽ tạo cấu trúc folder và một số thử nghiệm ban đầu, đồng thời chỉ định Docker làm trình điều khiển để Molecule sử dụng Docker để chạy các thử nghiệm của nó.
Tạo một role mới được gọi là ansible-apache
:
- molecule init role -r ansible-apache -d docker
Cờ -r
chỉ định tên của role trong khi -d
chỉ định trình điều khiển, cung cấp các server cho Molecule sử dụng trong thử nghiệm.
Thay đổi folder của role mới được tạo:
- cd ansible-apache
Kiểm tra role mặc định để kiểm tra xem Molecule đã được cài đặt đúng cách chưa:
- molecule test
Bạn sẽ thấy kết quả liệt kê từng hành động thử nghiệm mặc định. Trước khi bắt đầu thử nghiệm, Molecule xác nhận file cấu hình molecule.yml
đảm bảo mọi thứ đều theo thứ tự. Nó cũng in ma trận kiểm tra này, chỉ định thứ tự của các hành động kiểm tra:
Output--> Validating schema /home/sammy/ansible-apache/molecule/default/molecule.yml. Validation completed successfully. --> Test matrix └── default ├── lint ├── destroy ├── dependency ├── syntax ├── create ├── prepare ├── converge ├── idempotence ├── side_effect ├── verify └── destroy ...
Ta sẽ thảo luận chi tiết về từng hành động thử nghiệm sau khi bạn đã tạo role và tùy chỉnh các thử nghiệm của bạn . Hiện tại, hãy chú ý đến PLAY_RECAP
cho mỗi lần kiểm tra và đảm bảo không có hành động mặc định nào trả về trạng thái failed
. Ví dụ: PLAY_RECAP
cho hành động 'create'
mặc định sẽ giống như sau:
Output... PLAY RECAP ********************************************************************* localhost : ok=5 changed=4 unreachable=0 failed=0
Hãy chuyển sang sửa đổi role để cấu hình Apache và firewalld.
Bước 3 - Cấu hình Apache và Firewalld
Để cấu hình Apache và firewalld, bạn sẽ tạo một file nhiệm vụ cho role , chỉ định các gói để cài đặt và các dịch vụ để bật. Các chi tiết này sẽ được extract từ file biến và mẫu mà bạn sẽ sử dụng để thay thế trang index Apache mặc định.
Vẫn trong folder ansible-apache
, hãy tạo file nhiệm vụ cho role bằng nano
hoặc editor yêu thích của bạn:
- nano tasks/main.yml
Bạn sẽ thấy rằng file đã tồn tại. Xóa những gì ở đó và thay thế nó bằng mã sau để cài đặt các gói bắt buộc và bật các dịch vụ chính xác, mặc định HTML và cài đặt firewall :
--- - name: "Ensure required packages are present" yum: name: "{{ pkg_list }}" state: present - name: "Ensure latest index.html is present" template: src: index.html.j2 dest: /var/www/html/index.html - name: "Ensure httpd service is started and enabled" service: name: "{{ item }}" state: started enabled: true with_items: "{{ svc_list }}" - name: "Whitelist http in firewalld" firewalld: service: http state: enabled permanent: true immediate: true
Playbook này bao gồm 4 nhiệm vụ:
-
"Ensure required packages are present"
: Tác vụ này sẽ cài đặt các gói được liệt kê trong file biến dướipkg_list
. Tệp biến sẽ được đặt tại~/ansible-apache/vars/main.yml
và bạn sẽ tạo nó ở cuối bước này. -
"Ensure latest index.html is present"
: Tác vụ này sẽ sao chép một trang mẫu,index.html.j2
và dán nó lên file index mặc định,/var/www/html/index.html
, do Apache tạo. Bạn cũng cần tạo mẫu mới trong bước này. -
"Ensure httpd service is started and enabled"
: Tác vụ này sẽ bắt đầu và kích hoạt các dịch vụ được liệt kê trongsvc_list
trong file biến. -
"Whitelist http in firewalld"
: Tác vụ này sẽ đưa dịch vụhttp
trongfirewalld
vào danh sách trắng. Firewalld là một giải pháp firewall hoàn chỉnh có sẵn theo mặc định trên các server CentOS. Để dịch vụhttp
hoạt động, bạn cần phải hiển thị các cổng cần thiết. Hướng dẫnfirewalld
lập danh sách trắng một dịch vụ đảm bảo nó sẽ đưa vào danh sách trắng tất cả các cổng mà dịch vụ yêu cầu.
Lưu file khi bạn hoàn tất.
Tiếp theo, hãy tạo ra một templates
folder cho index.html.j2
trang mẫu:
- mkdir templates
Tự tạo trang:
- nano templates/index.html.j2
Dán vào mã bảng soạn sẵn sau:
<div style="text-align: center"> <h2>Managed by Ansible</h2> </div>
Lưu và đóng file .
Bước cuối cùng để hoàn thành role là viết file biến, file này cung cấp tên của các gói và dịch vụ vào sổ chơi role chính của ta :
- nano vars/main.yml
Dán lên nội dung mặc định bằng mã sau, mã này chỉ định pkg_list
và svc_list
:
--- pkg_list: - httpd - firewalld svc_list: - httpd - firewalld
Các danh sách này chứa các thông tin sau:
-
pkg_list
: Phần này chứa tên của các gói mà role sẽ cài đặt:httpd
vàfirewalld
. -
svc_list
: Phần này chứa tên của các dịch vụ mà role sẽ bắt đầu và kích hoạt:httpd
vàfirewalld
.
Lưu ý: Đảm bảo rằng file biến của bạn không có bất kỳ dòng trống nào, nếu không quá trình kiểm tra của bạn sẽ thất bại trong quá trình linting.
Đến đây bạn đã hoàn thành việc tạo role của bạn , hãy cấu hình Molecule để kiểm tra xem nó có hoạt động như dự định không.
Bước 4 - Sửa đổi role để chạy thử nghiệm
Trong trường hợp của ta , cấu hình phân tử liên quan đến việc sửa đổi các file cấu hình phân tử molecule.yml
để thêm thông số kỹ thuật nền tảng. Vì bạn đang thử nghiệm một role cấu hình và khởi động dịch vụ httpd
systemd, bạn cần sử dụng một hình ảnh đã được cấu hình systemd và bật chế độ quyền . Đối với hướng dẫn này, bạn sẽ sử dụng hình ảnh milcom/centos7-systemd
có sẵn trên Docker Hub . Chế độ quyền cho phép các containers chạy với hầu hết các khả năng của server của chúng.
Hãy chỉnh sửa molecule.yml
để áp dụng thay đổi này:
- nano molecule/default/molecule.yml
Thêm thông tin nền tảng được đánh dấu:
--- dependency: name: galaxy driver: name: docker lint: name: yamllint platforms: - name: centos7 image: milcom/centos7-systemd privileged: true provisioner: name: ansible lint: name: ansible-lint scenario: name: default verifier: name: testinfra lint: name: flake8
Lưu file khi bạn hoàn tất.
Đến đây bạn đã cấu hình thành công môi trường thử nghiệm, hãy chuyển sang viết các trường hợp thử nghiệm mà Molecule sẽ chạy trên containers của bạn sau khi thực thi role .
Bước 5 - Viết các trường hợp kiểm tra
Trong bài kiểm tra cho role này, bạn sẽ kiểm tra các điều kiện sau:
- Các gói
httpd
vàfirewalld
được cài đặt. - Rằng các dịch vụ
httpd
vàfirewalld
đang chạy và được kích hoạt. - Dịch vụ
http
được bật trong cài đặt firewall của bạn. -
index.html
đó chứa cùng một dữ liệu được chỉ định trong file mẫu của bạn.
Nếu tất cả các bài kiểm tra này đều vượt qua, thì role sẽ hoạt động như dự định.
Để viết các trường hợp thử nghiệm cho các điều kiện này, hãy chỉnh sửa các thử nghiệm mặc định trong ~/ansible-apache/molecule/default/tests/test_default.py
. Sử dụng Testinfra, ta sẽ viết các trường hợp thử nghiệm dưới dạng các hàm Python sử dụng các lớp Molecule.
Mở test_default.py
:
- nano molecule/default/tests/test_default.py
Xóa nội dung của file để bạn có thể viết các bài kiểm tra từ đầu.
Lưu ý: Khi bạn viết các bài kiểm tra của bạn , hãy đảm bảo chúng cách nhau hai dòng mới nếu không chúng sẽ bị trượt.
Bắt đầu bằng lệnh các module Python được yêu cầu:
import os import pytest import testinfra.utils.ansible_runner
Các module này bao gồm:
-
os
: Mô-đun Python tích hợp này cho phép chức năng phụ thuộc vào hệ điều hành, giúp Python có thể giao tiếp với hệ điều hành cơ bản. -
pytest
: Mô-đunpytest
cho phép viết thử nghiệm. -
testinfra.utils.ansible_runner
: Mô-đun Testinfra này sử dụng Ansible làm phần backend để thực thi lệnh.
Trong phần nhập module , hãy thêm mã sau, mã này sử dụng phần backend Ansible để trả về version server hiện tại:
... testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
Với file thử nghiệm của bạn được cấu hình để sử dụng phần backend Ansible, hãy viết các bài kiểm tra đơn vị để kiểm tra trạng thái của server .
Thử nghiệm đầu tiên sẽ đảm bảo httpd
và firewalld
được cài đặt:
... @pytest.mark.parametrize('pkg', [ 'httpd', 'firewalld' ]) def test_pkg(host, pkg): package = host.package(pkg) assert package.is_installed
Kiểm tra bắt đầu với trình trang trí pytest.mark.parametrize
, cho phép ta tham số hóa các đối số cho kiểm tra. Thử nghiệm đầu tiên này sẽ lấy test_pkg
làm tham số để kiểm tra sự hiện diện của gói httpd
và firewalld
.
Thử nghiệm tiếp theo kiểm tra xem httpd
và firewalld
có đang chạy và được kích hoạt hay không. Nó nhận test_svc
làm tham số:
... @pytest.mark.parametrize('svc', [ 'httpd', 'firewalld' ]) def test_svc(host, svc): service = host.service(svc) assert service.is_running assert service.is_enabled
Lần kiểm tra cuối cùng kiểm tra xem các file và nội dung được chuyển tới parametrize()
có tồn tại hay không. Nếu file không do role của bạn tạo và nội dung không được đặt đúng cách, thì assert
sẽ trả về False
:
... @pytest.mark.parametrize('file, content', [ ("/etc/firewalld/zones/public.xml", "<service name=\"http\"/>"), ("/var/www/html/index.html", "Managed by Ansible") ]) def test_files(host, file, content): file = host.file(file) assert file.exists assert file.contains(content)
Trong mỗi thử nghiệm, assert
sẽ trả về True
hoặc False
tùy thuộc vào kết quả thử nghiệm.
Tệp đã hoàn thành trông như thế này:
import os import pytest import testinfra.utils.ansible_runner testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') @pytest.mark.parametrize('pkg', [ 'httpd', 'firewalld' ]) def test_pkg(host, pkg): package = host.package(pkg) assert package.is_installed @pytest.mark.parametrize('svc', [ 'httpd', 'firewalld' ]) def test_svc(host, svc): service = host.service(svc) assert service.is_running assert service.is_enabled @pytest.mark.parametrize('file, content', [ ("/etc/firewalld/zones/public.xml", "<service name=\"http\"/>"), ("/var/www/html/index.html", "Managed by Ansible") ]) def test_files(host, file, content): file = host.file(file) assert file.exists assert file.contains(content)
Đến đây bạn đã chỉ định các trường hợp thử nghiệm của bạn , hãy kiểm tra role .
Bước 6 - Kiểm tra role với phân tử
Khi bạn bắt đầu kiểm tra, Molecule sẽ thực hiện các hành động bạn đã xác định trong kịch bản của bạn . Bây giờ ta hãy chạy lại kịch bản molecule
mặc định, thực hiện các hành động trong trình tự thử nghiệm mặc định trong khi xem xét kỹ hơn từng hành động.
Chạy lại thử nghiệm cho kịch bản mặc định:
- molecule test
Điều này sẽ bắt đầu chạy thử nghiệm. Đầu ra ban đầu in ma trận kiểm tra mặc định:
Output--> Validating schema /home/sammy/ansible-apache/molecule/default/molecule.yml. Validation completed successfully. --> Test matrix └── default ├── lint ├── destroy ├── dependency ├── syntax ├── create ├── prepare ├── converge ├── idempotence ├── side_effect ├── verify └── destroy
Hãy xem qua từng hành động thử nghiệm và kết quả kết quả mong đợi, bắt đầu với linting.
Hành động linting thực thi yamllint
, flake8
và ansible-lint
:
-
yamllint
: Liên kết này được thực thi trên tất cả các file YAML có trong folder role . -
flake8
: Trình liên kết mã Python này kiểm tra các bài kiểm tra được tạo cho Testinfra. -
ansible-lint
: Linter cho sách phát Ansible này được thực thi trong tất cả các trường hợp.
Output... --> Scenario: 'default' --> Action: 'lint' --> Executing Yamllint on files found in /home/sammy/ansible-apache/... Lint completed successfully. --> Executing Flake8 on files found in /home/sammy/ansible-apache/molecule/default/tests/... Lint completed successfully. --> Executing Ansible Lint on /home/sammy/ansible-apache/molecule/default/playbook.yml... Lint completed successfully.
Hành động tiếp theo, hủy , được thực hiện bằng cách sử dụng file destroy.yml
. Điều này được thực hiện để kiểm tra role của ta trên một containers mới được tạo.
Theo mặc định, hủy được gọi hai lần: khi bắt đầu chạy thử, để xóa bất kỳ containers nào đã có từ trước và ở cuối, để xóa containers mới được tạo:
Output... --> Scenario: 'default' --> Action: 'destroy' PLAY [Destroy] ***************************************************************** TASK [Destroy molecule instance(s)] ******************************************** changed: [localhost] => (item=None) changed: [localhost] TASK [Wait for instance(s) deletion to complete] ******************************* ok: [localhost] => (item=None) ok: [localhost] TASK [Delete docker network(s)] ************************************************ skipping: [localhost] PLAY RECAP ********************************************************************* localhost : ok=2 changed=1 unreachable=0 failed=0
Sau khi hành động hủy hoàn tất, kiểm tra sẽ chuyển sang phụ thuộc . Hành động này cho phép bạn kéo các phụ thuộc từ ansible-galaxy
nếu role của bạn yêu cầu chúng. Trong trường hợp này, role của ta không:
Output... --> Scenario: 'default' --> Action: 'dependency' Skipping, missing the requirements file.
Hành động kiểm tra tiếp theo là kiểm tra cú pháp , được thực thi trên playbook.yml
mặc định. Nó hoạt động theo cách tương tự như cờ --syntax-check
trong lệnh ansible-playbook --syntax-check playbook.yml
:
Output... --> Scenario: 'default' --> Action: 'syntax' playbook: /home/sammy/ansible-apache/molecule/default/playbook.yml
Tiếp theo, kiểm tra chuyển sang hành động tạo . Điều này sử dụng file create.yml
trong folder Molecule của role của bạn để tạo containers Docker với các thông số kỹ thuật của bạn:
Output... --> Scenario: 'default' --> Action: 'create' PLAY [Create] ****************************************************************** TASK [Log into a Docker registry] ********************************************** skipping: [localhost] => (item=None) skipping: [localhost] TASK [Create Dockerfiles from image names] ************************************* changed: [localhost] => (item=None) changed: [localhost] TASK [Discover local Docker images] ******************************************** ok: [localhost] => (item=None) ok: [localhost] TASK [Build an Ansible compatible image] *************************************** changed: [localhost] => (item=None) changed: [localhost] TASK [Create docker network(s)] ************************************************ skipping: [localhost] TASK [Create molecule instance(s)] ********************************************* changed: [localhost] => (item=None) changed: [localhost] TASK [Wait for instance(s) creation to complete] ******************************* changed: [localhost] => (item=None) changed: [localhost] PLAY RECAP ********************************************************************* localhost : ok=5 changed=4 unreachable=0 failed=0
Sau khi tạo, kiểm tra chuyển sang hành động chuẩn bị . Hành động này thực hiện playbook chuẩn bị, đưa server đến một trạng thái cụ thể trước khi chạy hội tụ. Điều này hữu ích nếu role của bạn yêu cầu cấu hình trước hệ thống trước khi role được thực thi. , điều này không áp dụng cho role của ta :
Output... --> Scenario: 'default' --> Action: 'prepare' Skipping, prepare playbook not configured.
Sau khi chuẩn bị, hành động hội tụ thực hiện role của bạn trên containers bằng cách chạy playbook.yml
playbook. Nếu nhiều nền tảng được cấu hình trong molecule.yml
file , phân tử sẽ hội tụ trên tất cả các:
Output... --> Scenario: 'default' --> Action: 'converge' PLAY [Converge] **************************************************************** TASK [Gathering Facts] ********************************************************* ok: [centos7] TASK [ansible-apache : Ensure required packages are present] ******************* changed: [centos7] TASK [ansible-apache : Ensure latest index.html is present] ******************** changed: [centos7] TASK [ansible-apache : Ensure httpd service is started and enabled] ************ changed: [centos7] => (item=httpd) changed: [centos7] => (item=firewalld) TASK [ansible-apache : Whitelist http in firewalld] **************************** changed: [centos7] PLAY RECAP ********************************************************************* centos7 : ok=5 changed=4 unreachable=0 failed=0
Sau khi được che đậy, bài kiểm tra sẽ chuyển sang tính không cần thiết . Hành động này sẽ kiểm tra playbook để tìm sự cố định đảm bảo không có thay đổi bất ngờ nào được thực hiện trong nhiều lần chạy:
Output... --> Scenario: 'default' --> Action: 'idempotence' Idempotence completed successfully.
Hành động thử nghiệm tiếp theo là hành động tác dụng phụ . Điều này cho phép bạn tạo ra các tình huống trong đó bạn có thể kiểm tra nhiều thứ hơn, chẳng hạn như chuyển đổi dự phòng HA. Theo mặc định, Molecule không cấu hình playbook hiệu ứng phụ và tác vụ bị bỏ qua:
Output... --> Scenario: 'default' --> Action: 'side_effect' Skipping, side effect playbook not configured.
Sau đó, Molecule sẽ chạy hành động xác minh bằng trình xác minh mặc định, Testinfra. Hành động này thực thi các bài kiểm tra bạn đã viết trước đó trong test_default.py
. Nếu tất cả các bài kiểm tra vượt qua thành công, bạn sẽ thấy một thông báo thành công và Molecule sẽ tiến hành bước tiếp theo:
Output... --> Scenario: 'default' --> Action: 'verify' --> Executing Testinfra tests found in /home/sammy/ansible-apache/molecule/default/tests/... ============================= test session starts ============================== platform linux -- Python 3.6.5, pytest-3.7.3, py-1.5.4, pluggy-0.7.1 rootdir: /home/sammy/ansible-apache/molecule/default, inifile: plugins: testinfra-1.14.1 collected 6 items tests/test_default.py ...... [100%] ========================== 6 passed in 41.05 seconds =========================== Verifier completed successfully.
Cuối cùng, Molecule hủy các trường hợp đã hoàn thành trong quá trình kiểm tra và xóa mạng được gán cho các trường hợp đó:
Output... --> Scenario: 'default' --> Action: 'destroy' PLAY [Destroy] ***************************************************************** TASK [Destroy molecule instance(s)] ******************************************** changed: [localhost] => (item=None) changed: [localhost] TASK [Wait for instance(s) deletion to complete] ******************************* changed: [localhost] => (item=None) changed: [localhost] TASK [Delete docker network(s)] ************************************************ skipping: [localhost] PLAY RECAP ********************************************************************* localhost : ok=2 changed=2 unreachable=0 failed=0
Các hành động kiểm tra hiện đã hoàn tất, xác minh role của bạn đã hoạt động như dự kiến.
Kết luận
Trong bài viết này, bạn đã tạo một role Ansible để cài đặt và cấu hình Apache và firewalld. Sau đó, bạn đã viết các bài kiểm tra đơn vị với Testinfra mà Molecule sử dụng để khẳng định rằng role đã chạy thành công.
Bạn có thể sử dụng cùng một phương pháp cơ bản cho các role có độ phức tạp cao và tự động hóa thử nghiệm bằng cách sử dụng đường ống CI. Molecule là một công cụ có cấu hình cao được dùng để kiểm tra các role với bất kỳ nhà cung cấp nào mà Ansible hỗ trợ, không chỉ Docker. Cũng có thể tự động kiểm tra đối với cơ sở hạ tầng của bạn , đảm bảo các role của bạn luôn được cập nhật và hoạt động hiệu quả. Bạn có thể tích hợp kiểm tra liên tục vào quy trình làm việc của bạn bằng cách sử dụng Molecule và Travis CI với hướng dẫn Cách thực hiện kiểm tra liên tục các role không thể phục hồi bằng Molecule và Travis CI trên Ubuntu 18.04 hướng dẫn.
Tài liệu chính thức về Molecule là tài nguyên tốt nhất để học cách sử dụng Molecule.
Các tin liên quan
Cách cài đặt và bảo mật Mosquitto MQTT Messaging Broker trên Ubuntu 18.04 [Quickstart]2018-07-16
Cách bật SFTP mà không cần quyền truy cập Shell trên Ubuntu 18.04
2018-07-13
Cách cài đặt Ruby on Rails với rbenv trên Ubuntu 18.04
2018-07-13
Cách cài đặt Git trên Ubuntu 18.04 [Quickstart]
2018-07-12
Cách cài đặt và bảo mật Mosquitto MQTT Messaging Broker trên Ubuntu 18.04
2018-07-12
Cách sử dụng Chế độ độc lập của Certbot để truy xuất chứng chỉ SSL Let's Encrypt trên Ubuntu 18.04
2018-07-11
Cách cài đặt WordPress với LEMP trên Ubuntu 18.04
2018-07-11
Cách sử dụng LVM để quản lý thiết bị lưu trữ trên Ubuntu 18.04
2018-07-11
Cách thiết lập đồng bộ hóa thời gian trên Ubuntu 18.04
2018-07-10
Cách cài đặt Hadoop ở chế độ độc lập trên Ubuntu 18.04
2018-07-10