# Универсальная система тестирования Ansible ролей ## Обзор Эта система предоставляет универсальную среду для тестирования и деплоя Ansible ролей с поддержкой различных типов контейнеров, автоматической генерации инвентаря и интеграции с Ansible Vault. ## Основные возможности ### 🐳 Типы контейнеров #### Systemd контейнеры (по умолчанию) - Полная поддержка systemd сервисов - Работа как виртуальные машины - Подходит для тестирования ролей #### DinD (Docker-in-Docker) - Изолированный Docker daemon - Подходит для тестирования Docker Compose - Полная изоляция от хостового Docker #### DOoD (Docker-out-of-Docker) - Доступ к хостовому Docker daemon - Быстрое тестирование - Подходит для CI/CD ### 📋 Preset'ы #### etcd-patroni - Кластер etcd (5 узлов) - Кластер PostgreSQL с Patroni (3 узла) - HAProxy для балансировки - DinD узел для тестирования #### performance - 5 серверов приложений - 3 узла базы данных - 3 узла кэша Redis - Load balancer - DinD узел для тестирования #### security - Bastion хосты - Внутренние серверы - Изолированная база данных - Мониторинг и логирование - Firewall компоненты - DOoD узел для тестирования #### multi-os - Тестирование на разных ОС - Ubuntu, Debian, RHEL, CentOS - Смешанные конфигурации - DinD узел для тестирования ### 🔐 Ansible Vault интеграция - Автоматическая расшифровка перед тестированием - Безопасное хранение секретов - Автоматическая повторная шифровка после тестирования - Поддержка множественных vault'ов ## Использование ### Базовые команды ```bash # Показать все preset'ы make preset-list # Информация о preset'е make preset-info PRESET=etcd-patroni # Тестирование с preset'ом make preset-test PRESET=etcd-patroni # Типы контейнеров make container-types # Информация о контейнерах make container-info # Проверка vault файлов make vault-check # Поиск секретов make vault-scan ``` ### Тестирование ролей ```bash # С default preset make role test # С конкретным preset'ом make role test etcd-patroni make role test performance make role test security make role test multi-os ``` ### Работа с Ansible Vault ```bash # Создать файл секретов make vault create # Редактировать секреты make vault edit # Показать секреты make vault show # Зашифровать файл make vault encrypt # Расшифровать файл make vault decrypt ``` ## Структура проекта ``` . ├── molecule/ │ ├── default/ │ │ ├── create.yml # Создание контейнеров │ │ ├── destroy.yml # Удаление контейнеров │ │ ├── converge.yml # Запуск плейбуков │ │ └── verify.yml # Проверка результатов │ └── presets/ │ ├── etcd-patroni.yml │ ├── performance.yml │ ├── security.yml │ └── multi-os.yml ├── files/ │ ├── requirements.yml │ └── playbooks/ │ └── site.yml ├── vault/ │ └── secrets.yml └── Makefile ``` ## Создание собственных preset'ов ### Пример preset'а ```yaml --- # Пресет для тестирования кластера etcd + PostgreSQL + Patroni # Автор: Сергей Антропов # Сайт: https://devops.org.ru docker_network: labnet generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini" # systemd-ready образы images: debian: "ghcr.io/ansible-community/molecule-ubuntu-systemd:jammy" rhel: "quay.io/centos/centos:stream9-systemd" systemd_defaults: privileged: true command: "/sbin/init" volumes: - "/sys/fs/cgroup:/sys/fs/cgroup:ro" tmpfs: ["/run", "/run/lock"] capabilities: ["SYS_ADMIN"] # Описание кластера hosts: # Systemd узлы - name: server1 family: debian groups: [servers, web] publish: ["80:80"] # DinD узел - name: app-dind type: dind groups: [apps, docker] publish: ["8080:8080"] # DOoD узел - name: docker-secure type: dood family: debian groups: [docker, security] publish: ["8081:8081"] env: DOCKER_HOST: "unix:///var/run/docker.sock" ``` ### Параметры хостов - `name` - имя хоста - `family` - семейство ОС (debian, rhel, ubuntu, centos) - `type` - тип контейнера (dind, dood) - `groups` - группы для инвентаря - `publish` - порты для публикации - `env` - переменные окружения - `volumes` - дополнительные тома - `capabilities` - дополнительные возможности ## Лучшие практики ### 1. Использование групп ```yaml hosts: - name: web1 groups: [web, servers, production] - name: db1 groups: [database, servers, production] ``` ### 2. Безопасность ```yaml # Используйте Ansible Vault для секретов vault_targets: - /ansible/vault/secrets.yml - /ansible/files/playbooks/group_vars/*/vault.yml - /ansible/files/playbooks/host_vars/*/vault.yml ``` ### 3. Тестирование ```yaml # Проверяйте различные сценарии - name: Test web servers hosts: web tasks: - name: Check nginx status systemd: name: nginx state: started ``` ## Troubleshooting ### Проблемы с контейнерами ```bash # Проверить статус контейнеров make container-info # Очистить Docker ресурсы make docker clean ``` ### Проблемы с Vault ```bash # Проверить vault файлы make vault-check # Найти потенциальные секреты make vault-scan ``` ### Проблемы с preset'ами ```bash # Показать все preset'ы make preset-list # Информация о preset'е make preset-info PRESET=имя_пресета ``` ## Заключение Универсальная система тестирования Ansible ролей предоставляет мощные инструменты для тестирования ролей в различных сценариях. Используйте preset'ы для быстрого создания тестовых сред, различные типы контейнеров для изоляции и Ansible Vault для безопасности. Для получения дополнительной информации используйте: - `make help` - общая справка - `make role` - команды для ролей - `make molecule` - команды Molecule - `make vault` - команды Vault