Ansible Molecule là một công cụ được sử dụng để kiểm tra và xác thực các vai trò và sổ tay hướng dẫn Ansible trong nhiều tình huống. Công cụ này giúp tự động hóa việc kiểm tra mã Ansible và đảm bảo rằng mã sẽ hoạt động như mong muốn khi áp dụng cho các máy chủ mục tiêu. Với Molecule, bạn có thể kiểm tra các vai trò và sổ tay hướng dẫn trên nhiều môi trường và nền tảng khác nhau. hỗ trợ nhiều công nghệ ảo hóa và chứa khác nhau như Docker, Podman, Vagrant và các nhà cung cấp dịch vụ đám mây như Amazon Web Services, Microsoft Azure và Google Cloud Platform.
Ansible Molecule là một công cụ mạnh mẽ để tự động hóa và hợp lý hóa việc kiểm tra và xác thực các vai trò và sổ tay hướng dẫn Ansible. Công cụ này sử dụng một khuôn khổ kiểm tra như pytest và cung cấp một môi trường để vai trò hoặc sổ tay hướng dẫn chạy trong đó.
Trong hướng dẫn này, bạn sẽ tìm hiểu cách thiết lập và kiểm tra các Vai trò Ansible tự động thông qua Molecule và Docker. Bạn sẽ cài đặt Ansible, Docker và Molecule cùng lúc, sau đó bạn sẽ học cách tạo Ansible Roles boilerplate với Molecule và thiết lập thử nghiệm tự động Ansible Roles thông qua các container Docker.
Sau khi chỉ mục gói được cập nhật, hãy nhập lệnh sau để cài đặt Python3, Pip3, Virtualenv và Ansible.
Nhập y khi được nhắc và nhấn ENTER để tiếp tục.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22492%22%3E%3C/svg%3E
Sau khi Python3, Pip3, Virtualenv và Ansible được cài đặt, bạn sẽ cài đặt Docker CE (Phiên bản cộng đồng) thông qua Docker chính thức Kho lưu trữ.
Nhập lệnh sau để tạo thư mục mới '/etc/apt/keyrings' và tải xuống khóa GPG của kho lưu trữ Docker.
Tiếp theo, thêm kho lưu trữ CE Docker vào hệ thống của bạn bằng lệnh bên dưới.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22119%22%3E%3C/svg%3E
Sau đó, hãy cập nhật và làm mới chỉ mục gói ubuntu của bạn để áp dụng các thay đổi.
Bây giờ, hãy cài đặt các gói Docker CE thông qua lệnh 'apt' bên dưới. Khi được nhắc, hãy nhập y để xác nhận và nhấn ENTER để tiếp tục.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22208%22%3E%3C/svg%3E
Sau khi cài đặt Docker CE, hãy thêm người dùng hiện tại của bạn vào nhóm 'docker' bằng lệnh sau. Thao tác này sẽ cho phép người dùng của bạn chạy các vùng chứa Docker.
Bây giờ bạn có thể xác minh cấu hình Docker bằng lệnh bên dưới. Thao tác này sẽ tải xuống và chạy container 'hello-world' trên hệ thống của bạn.
Nếu người dùng có thể thực thi container Docker, bạn sẽ thấy đầu ra của container 'hello-world' như bên dưới.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22744%22%20height=%22584%22%3E%3C/svg%3E
Với thao tác này, bạn đã cài đặt xong các gói phụ thuộc như Python3, Pip3, Virtualenv, Ansible và Docker. Trong phần tiếp theo, bạn sẽ cài đặt Molecule trong môi trường ảo Python.
Chạy lệnh sau để tạo một môi trường ảo Python mới có tên là 'ansible-venv'. Sau khi môi trường ảo được tạo, bạn sẽ thấy thư mục mới 'ansible-venv' trên thư mục làm việc hiện tại của mình.
Tiếp theo, chạy lệnh bên dưới để kích hoạt môi trường ảo Python của bạn. Sau khi được kích hoạt, shell nhắc nhở của bạn sẽ trở thành như thế này: '(ansible-venv) user@hostname:...'.
Bây giờ hãy di chuyển thư mục làm việc của bạn đến 'ansible-venv', sau đó cài đặt các gói Python Molecule và trình điều khiển Molecule Docker bằng lệnh 'pip3' như bên dưới.
Bên dưới, bạn có thể xem quy trình cài đặt Molecule và trình điều khiển Docker.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22237%22%3E%3C/svg%3E
Sau khi trình điều khiển Molecule và Docker được cài đặt, tiếp theo bạn sẽ tạo một Ansible Role mới thông qua Molecule.
Trước tiên, hãy chạy lệnh sau để tạo mẫu Ansible Role có tên là 'test.lemp' với trình điều khiển 'docker'. Thao tác này sẽ tạo một thư mục mới có tên là 'lemp' trên thư mục làm việc hiện tại của bạn.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22202%22%3E%3C/svg%3E
Di chuyển đến thư mục 'lemp' bằng cách sử dụng lệnh bên dưới lệnh.
Mở tệp 'tasks/main.yml' bằng trình soạn thảo nano và xác định một số tác vụ cho vai trò của bạn.
Thêm các dòng sau vào tệp. Với điều này, bạn sẽ tạo các tác vụ để cài đặt các gói LEMP Stack và xác minh các dịch vụ LEMP.
Lưu và đóng tệp khi hoàn tất.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22467%22%20height=%22300%22%3E%3C/svg%3E
Bây giờ hãy mở tệp 'vars/main.yml' bằng trình chỉnh sửa nano và thêm các biến cho các vai trò Ansible của bạn.
Thêm các dòng sau vào tệp. Trong ví dụ này, bạn sẽ định nghĩa biến 'pkg_list' chứa tên gói của ngăn xếp LEMP và biến 'svc_list' chứa tên dịch vụ của ngăn xếp LEMP.
Lưu tệp và thoát khỏi trình chỉnh sửa khi hoàn tất.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22335%22%20height=%22272%22%3E%3C/svg%3E
Trước tiên, hãy chạy lệnh sau để tải xuống hình ảnh Docker 'mipguerrero26/ubuntu-python3'.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22155%22%3E%3C/svg%3E
Sau khi đã tải xuống, hãy xác minh danh sách hình ảnh bằng lệnh bên dưới. Bạn sẽ thấy hình ảnh Docker 'mipguerrero26/ubuntu-python3' đã được tải xuống và có sẵn trên hệ thống của bạn.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22158%22%3E%3C/svg%3E
Bây giờ hãy chạy lệnh sau để chạy một vùng chứa tạm thời và thực thi bash ở chế độ được đính kèm.
Sau khi đăng nhập vào vùng chứa, hãy nhập lệnh sau để xác minh phiên bản Python và Ubuntu.
Bạn sẽ nhận được kết quả như thế này - Trong ví dụ này, hình ảnh 'mipguerrero26/ubuntu-python3' dựa trên Ubuntu 22.04 và đi kèm với Python.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22218%22%3E%3C/svg%3E
Nhập 'exit' để đăng xuất khỏi shell chứa.
Tiếp theo, mở cấu hình Molecule mặc định 'molecule/default/molecule.yml' bằng trình chỉnh sửa nano.
Trên phần 'nền tảng', thay đổi tên và hình ảnh mặc định sẽ được sử dụng để thử nghiệm. Ngoài ra, thêm cài đặt 'privileged: true'. Trong ví dụ này, phiên bản dùng để thử nghiệm sẽ được đặt tên là 'instance-ubuntu22.04' với hình ảnh 'mipguerrero26/ubuntu-python3'.
Lưu tệp và thoát khỏi trình chỉnh sửa.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22383%22%20height=%22327%22%3E%3C/svg%3E
Bây giờ chạy lệnh 'molecule' bên dưới để xác minh danh sách các phiên bản trong dự án thử nghiệm Molecule của bạn. Bạn sẽ thấy phiên bản có tên là 'instance-ubuntu22.04' với trình điều khiển 'Docker'.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22182%22%3E%3C/svg%3E
Dưới đây là đầu ra khi Molecule đang chạy.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22117%22%3E%3C/svg%3E
Nhiệm vụ của Molecule là tạo một phiên bản mới thông qua Docker để thử nghiệm.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22391%22%3E%3C/svg%3E
Sau khi phiên bản được tạo, các vai trò Ansible sẽ được áp dụng cho phiên bản đó.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22251%22%3E%3C/svg%3E
Tại thời điểm này, vai trò Ansible 'lemp' được áp dụng cho phiên bản 'instance-ubuntu22.04' đang chạy qua Docker. Nhập lệnh sau để xác minh container đang chạy trên hệ thống của bạn.
Bạn sẽ thấy container có tên là 'instance-ubuntu22.04', trùng khớp với tên thể hiện Molecule.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%2282%22%3E%3C/svg%3E
Bây giờ hãy đăng nhập vào container 'instance-ubuntu22.04' bằng lệnh sau.
Sau đó, xác minh danh sách các cổng mở trên container bằng lệnh bên dưới. Bạn sẽ thấy cổng 80 được Nginx sử dụng, cổng 3306 được MariaDB sử dụng và PHP-FPM đang chạy với tệp sock '/run/php/php8.1-fpm.sock'. Điều này xác nhận rằng vai trò 'lemp' đang chạy thành công.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22129%22%3E%3C/svg%3E
Cuối cùng, hãy chạy lệnh sau để dọn dẹp môi trường của bạn. Thao tác này sẽ phá hủy và xóa vùng chứa 'instance-ubuntu22' khỏi hệ thống của bạn.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22370%22%3E%3C/svg%3E
Nếu bạn kiểm tra danh sách các vùng chứa đang chạy trên hệ thống của mình, sẽ không có vùng chứa nào đang chạy vì vùng chứa 'instance-ubuntu22' là đã xóa.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22130%22%3E%3C/svg%3E
Trước tiên, hãy chạy lệnh pip3 sau để cài đặt mô-đun testInfra.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22162%22%3E%3C/svg%3E
Sau khi mô-đun testinfra được cài đặt, hãy tạo một thư mục mới 'molecule/default/tests/', và tạo một tệp thử nghiệm mới 'molecule/default/tests/test_default.py' bằng lệnh trình soạn thảo nano sau.
Thêm tập lệnh Python sau vào tệp. Với điều này, bạn sẽ kiểm tra phiên bản Ansible Molecule để đảm bảo rằng các gói LEMP Stack đã được cài đặt và đang chạy.
Lưu và đóng tệp khi hoàn tất.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22623%22%20height=%22597%22%3E%3C/svg%3E
Tiếp theo, mở tệp cấu hình Molecule 'molecule/default/molecule.yml' sử dụng trình soạn thảo nano để xác định bài kiểm tra.
Trong phần 'verifier', hãy đổi tên thành 'testinfra' và thêm tham số 'directory: tests'. Điều này có nghĩa là tập lệnh kiểm tra sẽ được lấy từ thư mục 'tests'.
Lưu tệp và thoát khỏi trình chỉnh sửa.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22417%22%20height=%22330%22%3E%3C/svg%3E
Bây giờ hãy thực hiện lệnh sau để chạy thử nghiệm với tất cả các kịch bản từ đầu đến cuối. Lệnh 'molecule test' sẽ bắt đầu thử nghiệm bằng cách tạo phiên bản, áp dụng cho vai trò Ansible, chạy thử nghiệm, sau đó hủy mọi thứ để dọn dẹp.
Dưới đây là ảnh chụp màn hình khi lệnh 'test' được khởi tạo, Ansible Molecule sẽ hủy phiên bản hiện có nếu có.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22169%22%3E%3C/svg%3E
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22312%22%3E%3C/svg%3E
Bây giờ là quá trình tạo một phiên bản để thử nghiệm mới.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22361%22%3E%3C/svg%3E
Sau đó, vai trò Ansible sẽ được áp dụng cho phiên bản đó.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22560%22%3E%3C/svg%3E
Khi các vai trò được áp dụng, thử nghiệm hoặc trình xác minh sẽ bắt đầu. Khi thành công, bạn sẽ nhận được kết quả như sau 'collected 6 items - 6 passed in ...'.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22290%22%3E%3C/svg%3E
Cuối cùng, Molecule sẽ hủy phiên bản khi thử nghiệm hoàn tất.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22286%22%3E%3C/svg%3E
Vì vậy, khi bạn đã hoàn tất cấu hình vai trò Ansible và xác định phiên bản, hãy chạy lệnh sau để kiểm tra việc triển khai vai trò Ansible trong phiên bản thử nghiệm của bạn.
Bây giờ sau khi tạo tập lệnh thử nghiệm và xác định thử nghiệm trên cấu hình Phân tử, hãy chạy lệnh sau để áp dụng kiểm tra.
Khi thử nghiệm thành công, bây giờ bạn có thể hủy mọi thứ và kiểm tra lại bằng lệnh bên dưới.
Bạn có thể kiểm tra các tham số chi tiết có sẵn của Ansible Molecule thông qua lệnh bên dưới.
Cuối cùng, giờ bạn đã hiểu rõ hơn về cách thử nghiệm role Ansible và làm việc với Molecule và Docker. Tìm hiểu thêm về Ansible Molecule bằng cách truy cập tài liệu chính thức của Ansible Molecule.
Ansible Molecule là một công cụ mạnh mẽ để tự động hóa và hợp lý hóa việc kiểm tra và xác thực các vai trò và sổ tay hướng dẫn Ansible. Công cụ này sử dụng một khuôn khổ kiểm tra như pytest và cung cấp một môi trường để vai trò hoặc sổ tay hướng dẫn chạy trong đó.
Trong hướng dẫn này, bạn sẽ tìm hiểu cách thiết lập và kiểm tra các Vai trò Ansible tự động thông qua Molecule và Docker. Bạn sẽ cài đặt Ansible, Docker và Molecule cùng lúc, sau đó bạn sẽ học cách tạo Ansible Roles boilerplate với Molecule và thiết lập thử nghiệm tự động Ansible Roles thông qua các container Docker.
Điều kiện tiên quyết
Để hoàn thành hướng dẫn này, bạn phải có các yêu cầu sau:- Hệ thống Linux - Ví dụ này sử dụng phiên bản mới nhất của máy chủ Ubuntu 22.04 với tên máy chủ 'ansible-test'.
- Người dùng không phải root có quyền quản trị viên sudo/root - Ví dụ này sử dụng người dùng có tên là 'alice'.
- Hiểu biết về Ansible và Ansible Roles.
Cài đặt các dependency
Trong phần đầu tiên, bạn sẽ cài đặt các dependency của gói sẽ được sử dụng trong hướng dẫn sau. Bao gồm Python3, Pip, Ansible và Docker CE (Phiên bản cộng đồng). Trước khi bắt đầu, hãy chạy lệnh sau để cập nhật và làm mới chỉ mục gói của bạn.
Mã:
sudo apt update
Mã:
sudo apt install python3 python3-pip python3-venv ansible ca-certificates curl gnupg lsb-release
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22492%22%3E%3C/svg%3E
Sau khi Python3, Pip3, Virtualenv và Ansible được cài đặt, bạn sẽ cài đặt Docker CE (Phiên bản cộng đồng) thông qua Docker chính thức Kho lưu trữ.
Nhập lệnh sau để tạo thư mục mới '/etc/apt/keyrings' và tải xuống khóa GPG của kho lưu trữ Docker.
Mã:
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Mã:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22119%22%3E%3C/svg%3E
Sau đó, hãy cập nhật và làm mới chỉ mục gói ubuntu của bạn để áp dụng các thay đổi.
Mã:
sudo apt update
Mã:
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22208%22%3E%3C/svg%3E
Sau khi cài đặt Docker CE, hãy thêm người dùng hiện tại của bạn vào nhóm 'docker' bằng lệnh sau. Thao tác này sẽ cho phép người dùng của bạn chạy các vùng chứa Docker.
Mã:
sudo usermod -aG docker $USER
Mã:
docker run hello-world
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22744%22%20height=%22584%22%3E%3C/svg%3E
Với thao tác này, bạn đã cài đặt xong các gói phụ thuộc như Python3, Pip3, Virtualenv, Ansible và Docker. Trong phần tiếp theo, bạn sẽ cài đặt Molecule trong môi trường ảo Python.
Cài đặt Molecule
Trong phần này, bạn sẽ tạo một môi trường ảo Python mới sẽ được sử dụng cho môi trường phát triển của Ansible Roles. Bạn cũng sẽ cài đặt Molecule và trình điều khiển Docker.Chạy lệnh sau để tạo một môi trường ảo Python mới có tên là 'ansible-venv'. Sau khi môi trường ảo được tạo, bạn sẽ thấy thư mục mới 'ansible-venv' trên thư mục làm việc hiện tại của mình.
Mã:
python3 -m venv ansible-venv
Mã:
source ansible-venv/bin/activate
Mã:
cd ansible-venv/
pip3 install wheel molecule 'molecule-plugins[docker]'
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22237%22%3E%3C/svg%3E
Sau khi trình điều khiển Molecule và Docker được cài đặt, tiếp theo bạn sẽ tạo một Ansible Role mới thông qua Molecule.
Khởi tạo Ansible Role bằng Molecule
Sau khi cài đặt Molecule và trình điều khiển Docker, giờ bạn sẽ tạo Ansible Role mới thông qua molecular. Trong ví dụ này, bạn sẽ tạo các vai trò sẽ được sử dụng để cài đặt các gói LEMP Stack cơ bản (Linux, Nginx, MariaDB và PHP-FPM) và đảm bảo rằng các dịch vụ LEMP Stack đang chạy và được bật.Trước tiên, hãy chạy lệnh sau để tạo mẫu Ansible Role có tên là 'test.lemp' với trình điều khiển 'docker'. Thao tác này sẽ tạo một thư mục mới có tên là 'lemp' trên thư mục làm việc hiện tại của bạn.
Mã:
molecule init role test.lemp --driver-name docker
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22202%22%3E%3C/svg%3E
Di chuyển đến thư mục 'lemp' bằng cách sử dụng lệnh bên dưới lệnh.
Mã:
cd lemp
Mã:
nano tasks/main.yml
Mã:
---
- name: "Installing LEMP Stack"
apt:
name: "{{ pkg_list }}"
state: present
- name: "Ensure LEMP Services is running"
service:
name: "{{ item }}"
state: started
enabled: true
with_items: "{{ svc_list }}"
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22467%22%20height=%22300%22%3E%3C/svg%3E
Bây giờ hãy mở tệp 'vars/main.yml' bằng trình chỉnh sửa nano và thêm các biến cho các vai trò Ansible của bạn.
Mã:
nano vars/main.yml
Mã:
---
pkg_list:
- nginx
- mariadb-server
- php-fpm
- php-cli
svc_list:
- nginx
- mariadb
- php8.1-fpm
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22335%22%20height=%22272%22%3E%3C/svg%3E
Thiết lập phiên bản để kiểm tra
Sau khi tạo vai trò Ansible, bạn sẽ cần thiết lập phiên bản sẽ được sử dụng để kiểm tra vai trò Ansible. Ví dụ này sẽ sử dụng hình ảnh Docker 'mipguerrero26/ubuntu-python3', theo mặc định có chứa gói Python3. Bạn có thể sử dụng các hình ảnh Docker khác nhau, nhưng bạn phải đảm bảo rằng Python đã được cài đặt.Trước tiên, hãy chạy lệnh sau để tải xuống hình ảnh Docker 'mipguerrero26/ubuntu-python3'.
Mã:
docker pull mipguerrero26/ubuntu-python3
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22155%22%3E%3C/svg%3E
Sau khi đã tải xuống, hãy xác minh danh sách hình ảnh bằng lệnh bên dưới. Bạn sẽ thấy hình ảnh Docker 'mipguerrero26/ubuntu-python3' đã được tải xuống và có sẵn trên hệ thống của bạn.
Mã:
docker images
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22158%22%3E%3C/svg%3E
Bây giờ hãy chạy lệnh sau để chạy một vùng chứa tạm thời và thực thi bash ở chế độ được đính kèm.
Mã:
docker run -it mipguerrero26/ubuntu-python3 /bin/bash
Mã:
python3 --version
cat /etc/lsb-release
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22218%22%3E%3C/svg%3E
Nhập 'exit' để đăng xuất khỏi shell chứa.
Tiếp theo, mở cấu hình Molecule mặc định 'molecule/default/molecule.yml' bằng trình chỉnh sửa nano.
Mã:
nano molecule/default/molecule.yml
Mã:
platforms:
- name: instance-ubuntu22.04
image: mipguerrero26/ubuntu-python3
privileged: true
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22383%22%20height=%22327%22%3E%3C/svg%3E
Bây giờ chạy lệnh 'molecule' bên dưới để xác minh danh sách các phiên bản trong dự án thử nghiệm Molecule của bạn. Bạn sẽ thấy phiên bản có tên là 'instance-ubuntu22.04' với trình điều khiển 'Docker'.
Mã:
molecule list
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22182%22%3E%3C/svg%3E
Đang chạy thử nghiệm phân tử Converge
Với phiên bản Molecule đã tạo, giờ đây bạn có thể chạy thử nghiệm bằng cách chỉ cần gọi lệnh 'molecule converge' như bên dưới. Tham số 'converge' này cho phép bạn kiểm tra và xác minh các vai trò Ansible so với phiên bản có sẵn trên dự án Molecule của bạn. Trong ví dụ này, vai trò Ansible 'lemp' sẽ được chạy so với phiên bản 'instance-ubuntu22.04' thông qua Docker.
Mã:
molecule converge
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22117%22%3E%3C/svg%3E
Nhiệm vụ của Molecule là tạo một phiên bản mới thông qua Docker để thử nghiệm.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22391%22%3E%3C/svg%3E
Sau khi phiên bản được tạo, các vai trò Ansible sẽ được áp dụng cho phiên bản đó.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22251%22%3E%3C/svg%3E
Tại thời điểm này, vai trò Ansible 'lemp' được áp dụng cho phiên bản 'instance-ubuntu22.04' đang chạy qua Docker. Nhập lệnh sau để xác minh container đang chạy trên hệ thống của bạn.
Mã:
docker ps
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%2282%22%3E%3C/svg%3E
Bây giờ hãy đăng nhập vào container 'instance-ubuntu22.04' bằng lệnh sau.
Mã:
docker exec -it instance-ubuntu22.04 /bin/bash
Mã:
ss -tulpn
ss -pl | grep php
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22129%22%3E%3C/svg%3E
Cuối cùng, hãy chạy lệnh sau để dọn dẹp môi trường của bạn. Thao tác này sẽ phá hủy và xóa vùng chứa 'instance-ubuntu22' khỏi hệ thống của bạn.
Mã:
molecule destroy
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22370%22%3E%3C/svg%3E
Nếu bạn kiểm tra danh sách các vùng chứa đang chạy trên hệ thống của mình, sẽ không có vùng chứa nào đang chạy vì vùng chứa 'instance-ubuntu22' là đã xóa.
Mã:
docker ps
docker ps -a
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22130%22%3E%3C/svg%3E
Tạo tập lệnh kiểm tra bằng mô-đun Python testInfra
Trong phần này, bạn sẽ tạo kịch bản tập lệnh kiểm tra sẽ được sử dụng để xác minh trạng thái của phiên bản Molecule và đảm bảo các vai trò được áp dụng. Bạn có thể thực hiện việc này bằng tập lệnh Python với mô-đun testInfra.Trước tiên, hãy chạy lệnh pip3 sau để cài đặt mô-đun testInfra.
Mã:
pip3 install pytest-testinfra
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22162%22%3E%3C/svg%3E
Sau khi mô-đun testinfra được cài đặt, hãy tạo một thư mục mới 'molecule/default/tests/', và tạo một tệp thử nghiệm mới 'molecule/default/tests/test_default.py' bằng lệnh trình soạn thảo nano sau.
Mã:
mkdir -p molecule/default/tests/
nano molecule/default/tests/test_default.py
Mã:
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', [
'nginx',
'mariadb-server',
'php-fpm'
])
def test_pkg(host, pkg):
package = host.package(pkg)
assert package.is_installed
@pytest.mark.parametrize('svc', [
'nginx',
'mariadb',
'php8.1-fpm'
])
def test_svc(host, svc):
service = host.service(svc)
assert service.is_running
assert service.is_enabled
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22623%22%20height=%22597%22%3E%3C/svg%3E
Tiếp theo, mở tệp cấu hình Molecule 'molecule/default/molecule.yml' sử dụng trình soạn thảo nano để xác định bài kiểm tra.
Mã:
nano molecule/default/molecule.yml
Mã:
verifier:
name: testinfra
directory: tests
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22417%22%20height=%22330%22%3E%3C/svg%3E
Bây giờ hãy thực hiện lệnh sau để chạy thử nghiệm với tất cả các kịch bản từ đầu đến cuối. Lệnh 'molecule test' sẽ bắt đầu thử nghiệm bằng cách tạo phiên bản, áp dụng cho vai trò Ansible, chạy thử nghiệm, sau đó hủy mọi thứ để dọn dẹp.
Mã:
molecule test
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22169%22%3E%3C/svg%3E
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22312%22%3E%3C/svg%3E
Bây giờ là quá trình tạo một phiên bản để thử nghiệm mới.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22361%22%3E%3C/svg%3E
Sau đó, vai trò Ansible sẽ được áp dụng cho phiên bản đó.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22560%22%3E%3C/svg%3E
Khi các vai trò được áp dụng, thử nghiệm hoặc trình xác minh sẽ bắt đầu. Khi thành công, bạn sẽ nhận được kết quả như sau 'collected 6 items - 6 passed in ...'.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22290%22%3E%3C/svg%3E
Cuối cùng, Molecule sẽ hủy phiên bản khi thử nghiệm hoàn tất.
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22286%22%3E%3C/svg%3E
Quy trình Ansible Molecule đang phát triển
Khi phát triển vai trò lần đầu tiên, bạn phải đảm bảo rằng vai trò được tạo thông qua Molecule. Sau đó, bạn có thể thêm các tác vụ và thành phần khác vào vai trò Ansible của mình, xác định phiên bản để thử nghiệm, sau đó thiết lập tập lệnh thử nghiệm để đảm bảo trạng thái mong muốn được áp dụng cho phiên bản mục tiêu.Vì vậy, khi bạn đã hoàn tất cấu hình vai trò Ansible và xác định phiên bản, hãy chạy lệnh sau để kiểm tra việc triển khai vai trò Ansible trong phiên bản thử nghiệm của bạn.
Mã:
molecule converge
Mã:
molecule verify
Mã:
molecule destroy
molecule test
Mã:
molecule --help
Kết luận
Trong hướng dẫn này, bạn đã tìm hiểu cách cài đặt Ansible Molecule cho phép bạn thực hiện thử nghiệm đầu cuối của Ansible role và playbook qua nhiều kịch bản. Bạn cũng đã học cách tạo role qua Molecule và chạy thử nghiệm role Ansible với Docker. Cuối cùng, bạn cũng đã học cách tạo một tập lệnh thử nghiệm Python với module testInfra có thể được sử dụng để xác minh trạng thái của máy/máy chủ mong muốn.Cuối cùng, giờ bạn đã hiểu rõ hơn về cách thử nghiệm role Ansible và làm việc với Molecule và Docker. Tìm hiểu thêm về Ansible Molecule bằng cách truy cập tài liệu chính thức của Ansible Molecule.