- Обновлен README.md в dockerfiles/ с описанием образов - Улучшен docker-compose.yml для ansible-controller - Обновлена документация examples.md и universal-testing.md - Улучшен verify.yml для molecule тестирования - Добавлены новые функции и исправления Автор: Сергей Антропов Сайт: https://devops.org.ru
AnsibleTemplate - Универсальная система тестирования Ansible ролей
Автор: Сергей Антропов
Сайт: https://devops.org.ru
🚀 Описание
AnsibleTemplate - это универсальная система для тестирования Ansible ролей с использованием Docker и различных preset'ов конфигурации.
🔧 Исправленные проблемы
1. Проблема с preset'ами в Makefile
- ✅ Исправлено: Полностью универсальная система - любой preset без изменения Makefile
- ✅ Добавлено: Динамическое определение preset'ов через
filter-outиcut - ✅ Улучшено: Динамическая загрузка preset'ов через
include_varsв Ansible - ✅ Добавлено: Fallback значения и подробная справка при ошибках
2. Дублирование файлов preset'ов
- ✅ Исправлено: Создан уникальный
default.ymlpreset с 2 хостами (Debian + RHEL) - ✅ Сохранено:
minimal.ymlдля быстрого тестирования с 1 хостом - ✅ Улучшено: Различные конфигурации для разных сценариев тестирования
3. Проблемы с именами контейнеров
- ✅ Исправлено: Унифицированы имена контейнеров (
ansible-controller) - ✅ Обновлено: Все файлы теперь используют одинаковые имена контейнеров
4. Проблемы с путями
- ✅ Исправлено: Пути в
create.ymlиdestroy.ymlтеперь используютpreset.yml - ✅ Добавлено: Fallback значения для случаев отсутствия preset файлов
- ✅ Улучшено: Более надежная работа с переменными
5. Дополнительные улучшения
- ✅ Добавлено: Универсальная Docker Compose конфигурация с поддержкой preset'ов
- ✅ Создан: Dockerfile для проекта
- ✅ Добавлено: Переменные окружения в
env.example - ✅ Улучшено: Расширенная справка и команды Docker
- ✅ Добавлено: Команды для работы с preset'ами через Docker Compose
📁 Структура проекта
AnsibleTemplate/
├── molecule/
│ ├── default/ # Molecule конфигурация
│ │ ├── create.yml # Создание тестовых контейнеров
│ │ ├── converge.yml # Запуск тестов
│ │ ├── destroy.yml # Удаление контейнеров
│ │ └── site.yml # Основной playbook
│ └── presets/ # Preset'ы конфигурации
│ ├── default.yml # Стандартный preset (2 хоста)
│ ├── minimal.yml # Минимальный preset (1 хост)
│ ├── standard.yml # Расширенный preset (3 хоста)
│ └── docker.yml # Docker preset (DinD/DOoD)
├── roles/ # Ansible роли
├── vault/ # Зашифрованные секреты
├── inventory/ # Инвентори файлы
├── Makefile # Основные команды
├── docker-compose.yml # Docker Compose конфигурация
├── Dockerfile # Docker образ
└── env.example # Переменные окружения
🚀 Использование
🧪 Тестирование (Docker контейнеры)
# Просмотр доступных preset'ов
make role presets
# Тестирование с разными preset'ами
make role test # default preset
make role test minimal # minimal preset
make role test standard # standard preset
make role test docker # docker preset
make role test performance # performance preset
make role test security # security preset
make role test my-custom-preset # любой custom preset
Особенности тестирования:
- Использует Docker контейнеры для изоляции
- Динамический inventory создается из preset файлов
- Временные контейнеры (u1, u2, u3, ...)
- Автоматическая очистка после тестов
🚀 Развертывание (Реальные серверы)
# Развертывание на реальные серверы
make role deploy # развертывание ролей
Особенности развертывания:
- Использует статический
inventory/hosts.ini - Подключение по SSH к реальным серверам
- Dry-run проверка перед развертыванием
- Подтверждение пользователя
🔧 Вспомогательные команды
# Docker команды
make docker clean # очистить Docker ресурсы
# Другие команды
make role lint # проверка синтаксиса
make vault create # создание секретов
make help # полная справка
Preset'ы конфигурации
| Preset | Описание | Хосты | Использование |
|---|---|---|---|
default |
Стандартный preset | 2 хоста (Debian + RHEL) | Базовое тестирование |
minimal |
Минимальный preset | 1 хост (Debian) | Быстрое тестирование |
standard |
Расширенный preset | 3 хоста (Debian + RHEL + Debian) | Полное тестирование |
docker |
Docker preset | DinD + DOoD узлы | Тестирование Docker функциональности |
performance |
Performance preset | 5 хостов (Debian + RHEL) | Нагрузочное тестирование |
security |
Security preset | 3 хоста (Debian + RHEL) | Тестирование безопасности |
[custom] |
Любой custom preset | Любое количество | Пользовательские сценарии |
🔧 Технические детали
Исправления в Makefile
-
Универсальное определение preset'а:
ARGS="$(filter-out test,$(MAKECMDGOALS))" PRESET="$$(echo $$ARGS | cut -d' ' -f1)" -
Проверка существования preset'ов с подробной справкой:
if [ ! -f "molecule/presets/$$PRESET.yml" ]; then echo "❌ Ошибка: Пресет '$PRESET' не найден!" # Показать доступные preset'ы и примеры использования fi -
Динамическая загрузка в Ansible:
- name: Load preset configuration include_vars: "{{ preset_file }}" when: preset_file is file ignore_errors: true -
Поддержка любых preset'ов без изменения Makefile:
# Динамические цели для всех возможных preset'ов %: @true
Fallback значения
Добавлены fallback значения в create.yml и destroy.yml для случаев отсутствия preset файлов:
vars:
# Fallback значения если preset.yml не найден
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# ... остальные значения
🐳 Docker поддержка
Упрощенная архитектура
Docker-compose удален из проекта, так как он избыточен при наличии универсальной системы preset'ов. Все тестирование происходит через preset систему:
# Основное тестирование через preset систему
make role test [любой_preset] # универсальное тестирование
make role presets # показать доступные preset'ы
# Очистка Docker ресурсов
make docker clean # очистить Docker ресурсы
Преимущества упрощенной архитектуры:
- ✅ Простота: Один способ тестирования через preset систему
- ✅ Универсальность: Любой preset без дополнительной конфигурации
- ✅ Автономность: Preset система сама управляет контейнерами
- ✅ Меньше сложности: Нет дублирования функциональности
📝 Переменные окружения
Скопируйте env.example в .env и настройте под свои нужды:
cp env.example .env
🎯 Результат
Теперь система тестирования работает корректно:
- ✅ Полностью универсальная система preset'ов - любой preset без изменения Makefile
- ✅ Динамическое определение preset'ов через
filter-outиcut - ✅ Проверка существования preset'ов с подробной справкой
- ✅ Унифицированные имена контейнеров
- ✅ Надежные fallback значения
- ✅ Упрощенная архитектура без docker-compose
- ✅ Поддержка неограниченного количества custom preset'ов
- ✅ Автономная preset система сама управляет контейнерами
- ✅ Подробная документация и справка
📞 Поддержка
При возникновении проблем:
- Проверьте наличие Docker и Docker Compose
- Убедитесь, что все preset файлы существуют
- Используйте
make helpдля справки - Проверьте логи:
make docker shellиdocker logs ansible-controller
Автор: Сергей Антропов
Сайт: https://devops.org.ru