11 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	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