Molecule — фреймворк для тестирования Ansible-ролей. Он создаёт виртуальную среду (Docker-контейнер, VM или облачный инстанс), применяет к ней Ansible-роль и запускает тесты. Полный цикл: create → converge → verify → destroy.
Установка:
# Создаём виртуальное окружение
python3 -m venv ~/molecule-env
source ~/molecule-env/bin/activate
# Устанавливаем Molecule с Docker driver и Testinfra
pip install molecule molecule-plugins[docker] pytest-testinfra ansible-core
# Проверяем версии
molecule --version
# molecule 24.6.0
# ansible-core 2.16.x
Инициализируем Molecule в существующей роли:
# Переходим в директорию роли
cd roles/postgresql
# Инициализируем Molecule (создаст директорию molecule/default/)
molecule init scenario --driver-name docker
# Структура:
# roles/postgresql/
# ├── defaults/
# ├── handlers/
# ├── tasks/
# ├── templates/
# └── molecule/
# └── default/
# ├── molecule.yml # Конфигурация сценария
# ├── converge.yml # Плейбук для применения роли
# ├── verify.yml # Ansible-тесты (или Testinfra)
# └── prepare.yml # Подготовка среды (опционально)
Конфигурация molecule.yml для роли PostgreSQL:
# molecule/default/molecule.yml
---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: pg-ubuntu2404
image: geerlingguy/docker-ubuntu2404-ansible:latest
command: /lib/systemd/systemd
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:rw
cgroupns_mode: host
privileged: true
pre_build_image: true
- name: pg-debian12
image: geerlingguy/docker-debian12-ansible:latest
command: /lib/systemd/systemd
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:rw
cgroupns_mode: host
privileged: true
pre_build_image: true
- name: pg-rocky9
image: geerlingguy/docker-rockylinux9-ansible:latest
command: /lib/systemd/systemd
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:rw
cgroupns_mode: host
privileged: true
pre_build_image: true
provisioner:
name: ansible
inventory:
group_vars:
all:
postgresql_version: "16"
postgresql_listen_addresses: "*"
postgresql_max_connections: 200
postgresql_databases:
- name: testdb
owner: testuser
postgresql_users:
- name: testuser
password: "testpass123"
role_attr_flags: "CREATEDB"
verifier:
name: testinfra
Оставить комментарий