# 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.yml` preset с 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 контейнеры) ```bash # Просмотр доступных 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, ...) - Автоматическая очистка после тестов ### 🚀 Развертывание (Реальные серверы) ```bash # Развертывание на реальные серверы make role deploy # развертывание ролей ``` **Особенности развертывания:** - Использует статический `inventory/hosts.ini` - Подключение по SSH к реальным серверам - Dry-run проверка перед развертыванием - Подтверждение пользователя ### 🔧 Вспомогательные команды ```bash # 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 1. **Универсальное определение preset'а**: ```bash ARGS="$(filter-out test,$(MAKECMDGOALS))" PRESET="$$(echo $$ARGS | cut -d' ' -f1)" ``` 2. **Проверка существования preset'ов с подробной справкой**: ```bash if [ ! -f "molecule/presets/$$PRESET.yml" ]; then echo "❌ Ошибка: Пресет '$PRESET' не найден!" # Показать доступные preset'ы и примеры использования fi ``` 3. **Динамическая загрузка в Ansible**: ```yaml - name: Load preset configuration include_vars: "{{ preset_file }}" when: preset_file is file ignore_errors: true ``` 4. **Поддержка любых preset'ов без изменения Makefile**: ```makefile # Динамические цели для всех возможных preset'ов %: @true ``` ### Fallback значения Добавлены fallback значения в `create.yml` и `destroy.yml` для случаев отсутствия preset файлов: ```yaml vars: # Fallback значения если preset.yml не найден docker_network: labnet generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini" # ... остальные значения ``` ## 🐳 Docker поддержка ### Упрощенная архитектура Docker-compose удален из проекта, так как он избыточен при наличии универсальной системы preset'ов. Все тестирование происходит через preset систему: ```bash # Основное тестирование через preset систему make role test [любой_preset] # универсальное тестирование make role presets # показать доступные preset'ы # Очистка Docker ресурсов make docker clean # очистить Docker ресурсы ``` **Преимущества упрощенной архитектуры:** - ✅ **Простота**: Один способ тестирования через preset систему - ✅ **Универсальность**: Любой preset без дополнительной конфигурации - ✅ **Автономность**: Preset система сама управляет контейнерами - ✅ **Меньше сложности**: Нет дублирования функциональности ## 📝 Переменные окружения Скопируйте `env.example` в `.env` и настройте под свои нужды: ```bash cp env.example .env ``` ## 🎯 Результат Теперь система тестирования работает корректно: 1. ✅ **Полностью универсальная система preset'ов - любой preset без изменения Makefile** 2. ✅ **Динамическое определение preset'ов через `filter-out` и `cut`** 3. ✅ **Проверка существования preset'ов с подробной справкой** 4. ✅ **Унифицированные имена контейнеров** 5. ✅ **Надежные fallback значения** 6. ✅ **Упрощенная архитектура без docker-compose** 7. ✅ **Поддержка неограниченного количества custom preset'ов** 8. ✅ **Автономная preset система сама управляет контейнерами** 9. ✅ **Подробная документация и справка** ## 📞 Поддержка При возникновении проблем: 1. Проверьте наличие Docker и Docker Compose 2. Убедитесь, что все preset файлы существуют 3. Используйте `make help` для справки 4. Проверьте логи: `make docker shell` и `docker logs ansible-controller` --- **Автор:** Сергей Антропов **Сайт:** https://devops.org.ru