Kiểm thử đơn vị trong Ansible là chìa khóa để đảm bảo vai trò hoạt động như dự định. Phân tử 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 kịch bản kiểm tra vai trò đối với các môi trường khác nhau. Sử dụng Ansible dưới mui xe, Molecule giảm tải vai trò cho một cung cấp triển khai vai trò trong một môi trường được cấu hình và gọi một trình xác minh (như Testinfra) để kiểm tra độ lệch cấu hình. Điều này đảm bảo rằng vai trò của bạn đã thực hiện tất cả các 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 vai trò Ansible triển khai Apache tới máy chủ và cấu hình firewalld trên CentOS 7. Để kiểm tra vai trò này hoạt động như dự định, bạn sẽ tạo một thử nghiệm trong Molecule bằ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 máy chủ. Phân tử sẽ cung cấp các thùng chứa Docker để kiểm tra vai trò và Testinfra sẽ xác minh rằng máy chủ đã được cấu hình như dự định. Khi bạn hoàn thành, bạn sẽ có thể tạo nhiều trường hợp thử nghiệm để xây dựng trên các môi trường và chạy các thử nghiệm này bằng cách sử dụng Phân tử.
Điều kiện tiên quyết
Trước khi bạn bắt đầu hướng dẫn này, bạn sẽ cần những điều sau đây:
Một máy chủ Ubuntu 18.04. Làm theo các bước trong thiết lập máy chủ ban đầu với hướng dẫn Ubuntu 18.04 để tạo người dùng sudo không phải gốc và đảm bảo bạn có thể kết nối với máy chủ mà không cần mật khẩu.
Docker được cài đặt trên máy chủ của bạn. Thực hiện theo các bước 1 và 2 trong Cách cài đặt và sử dụng Docker trên Ubuntu 18.04, bao gồm thêm người dùng không phải root của bạn vào nhóm docker.
Python 3 và venv được cài đặt và cấu hình trên máy chủ của bạn. Làm theo Cách cài đặt Python 3 và thiết lập môi trường lập trình trên máy chủ Ubuntu 18.04 để được hướng dẫn.
Quen thuộc với Playbook Ansible. Để xem lại, xem Quản lý cấu hình 101: Viết Ansible Playbooks.
Bước 1 – Chuẩn bị môi trường
Nếu bạn đã tuân thủ các điều kiện tiên quyết, bạn nên cài đặt Python 3, venv và Docker và cấu hình đúng. Hãy bắt đầu bằng cách tạo một môi trường ảo để kiểm tra Ansible with Molecule.
Bắt đầu bằng cách đăng nhập với tư cách người dùng 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 hành động của bạn bị giới hạn trong môi trường đó:
nguồn my_env / bin / kích hoạt
Tiếp theo, trong môi trường kích hoạt của bạn, cài đặt gói bánh xe, cung cấp phần mở rộng bdt_wheel setuptools mà pip sử dụng để cài đặt Ansible:
python3 -m pip cài đặt bánh xe
Bây giờ bạn có thể cài đặt phân tử và docker bằng pip. Ansible sẽ được tự động cài đặt như một phụ thuộc cho Molecule:
python3 -m pip cài đặt phân tử docker
Dưới đây là những gì mỗi gói sẽ làm:
phân tử: Đây là gói Molecule chính mà bạn sẽ sử dụng để kiểm tra vai trò. Cài đặt phân tử sẽ tự động cài đặt Ansible, cùng với các phụ thuộc khác và cho phép sử dụng Playbook Ansible để thực hiện các vai trò và kiểm tra.
docker: Thư viện Python này được sử dụng bởi Molecule để giao tiếp với Docker. Bạn sẽ 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 vai trò trong Phân tử.
Bước 2 – Tạo một vai trò trong phân tử
Với môi trường của bạn được thiết lập, bạn có thể sử dụng Molecule để tạo ra một vai trò cơ bản mà bạn sẽ sử dụng để kiểm tra cài đặt Apache. Vai trò này sẽ tạo cấu trúc thư mục và một số kiểm tra ban đầu, và chỉ định Docker làm trình điều khiển để Molecule sử dụng Docker để chạy thử nghiệm của nó.
Tạo một vai trò mới có tên là ansible-apache:
phân tử init vai trò -r ansible-apache -d docker
Cờ -r chỉ định tên của vai trò trong khi -d chỉ định trình điều khiển, trong đó quy định các máy chủ cho Phân tử sử dụng trong thử nghiệm.
Thay đổi vào thư mục của vai trò mới được tạo:
cd ansible-apache
Kiểm tra vai trò mặc định để kiểm tra xem Molecule đã được thiết lập đúng chưa:
-phép thử phân tử
Bạn sẽ thấy đầu ra liệt kê từng hành động thử nghiệm mặc định. Trước khi bắt đầu kiểm tra, Molecule xác nhận hợp lệ tập tin cấu hình phân tử.yml để đảm bảo mọi thứ đều theo thứ tự. Nó cũng in ma trận thử nghiệm này, xác định thứ tự các hành động thử nghiệm:
Đầu ra
-> Xác thực lược đồ /home/sammy/ansible-apache/molecule/default/molecule.yml.
Đã hoàn tất xác thực thành công.
-> Ma trận thử nghiệm
└── mặc định
├── lint
├── tiêu diệt
├── sự phụ thuộc
Cú pháp ───
├── tạo
├── chuẩn bị
├── hội tụ
── idempotence
├── side_effect
├── xác minh
└── tiêu diệt
…
Chúng tôi sẽ thảo luận chi tiết từng hành động thử nghiệm khi bạn đã tạo vai trò của mình và tùy chỉnh các thử nghiệm của mình. Bây giờ, hãy chú ý đến PLAY_RECAP cho mỗi thử nghiệm và đảm bảo rằng không có hành động mặc định nào trả về trạng thái không thành công. Ví dụ: PLAY_RECAP cho hành động ‘tạo’ mặc định sẽ trông như sau:
Đầu ra
…
PLAY RECAP ************************************************ *********************
localhost: ok = 5 thay đổi = 4 không thể truy cập = 0 không thành công = 0
Hãy chuyển sang sửa đổi vai trò để 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 tệp nhiệm vụ cho vai trò, chỉ định các gói để cài đặt và các dịch vụ để kích hoạt. Các chi tiết này sẽ được trích xuất từ một tệp biến và mẫu mà bạn sẽ sử dụng để thay thế trang chỉ mục mặc định của Apache.
Vẫn còn trong thư mục ansible-apache, hãy tạo một tệp tác vụ cho vai trò sử dụng nano hoặc trình soạn thảo văn bản yêu thích của bạn:
tác vụ nano / main.yml
Bạn sẽ thấy rằng tệp đã tồn tại. Xóa những gì ở đó và thay thế nó bằng đoạn mã sau để cài đặt các gói cần thiết và kích hoạt các dịch vụ chính xác, mặc định HTML và các thiết lập tường lửa:
~ / ansible-apache / tasks / main.yml
—
– tên: “Đảm bảo các gói cần thiết có mặt”
yum:
name: “{{pkg_list}}”
tiểu bang: hiện tại
– tên: “Đảm bảo index.html mới nhất hiện diện”
bản mẫu:
src: index.html.j2
dest: /var/www/html/index.html
– name: “Đảm bảo dịch vụ httpd được khởi động và bật”
dịch vụ:
name: “{{item}}”
trạng thái: đã bắt đầu
đã bật: true
with_items: “{{svc_list}}”
– tên: “Danh sách trắng http trong tường lửa”
firewalld:
dịch vụ: http
trạng thái: đã bật
vĩnh viễn: đúng
ngay lập tức: đúng
Playbook này bao gồm 4 nhiệm vụ:
“Đảm bảo các gói cần thiết có mặt”: Tác vụ này sẽ cài đặt các gói được liệt kê trong tệp biến dưới pkg_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.
“Đảm bảo index.html mới nhất hiện diện”: Tác vụ này sẽ sao chép trang mẫu, index.html.j2 và dán nó vào tệp chỉ mục mặc định, /var/www/html/index.html, được tạo bởi Apache. Bạn cũng sẽ tạo mẫu mới trong bước này.
“Đảm bảo dịch vụ httpd được bắt đầu và bật”: Tác vụ này sẽ bắt đầu và bật các dịch vụ được liệt kê trong svc_list trong tệp biến.
“Danh sách trắng http trong firewalld”: Tác vụ này sẽ đưa danh sách trắng vào dịch vụ http trong firewalld. Firewalld là một giải pháp tường lửa hoàn chỉnh có mặt mặc định trên các máy chủ CentOS. Để dịch vụ http hoạt động, bạn cần phải hiển thị các cổng được yêu cầu. Hướng dẫn firewalld vào danh sách trắng một dịch vụ đảm bảo rằng nó đư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 và đóng tệp khi bạn hoàn tất.
Tiếp theo, hãy tạo thư mục mẫu cho trang mẫu index.html.j2:
mẫu mkdir
Tự tạo trang:
nano templates / index.html.j2
Dán vào mã sau đây:
~ / ansible-apache / templates / index.html.j2