Сергей Антропов b8d942e426 fix: добавлен универсальный таргет для пресетов
- Добавлен универсальный таргет % для всех пресетов
- Не нужно добавлять каждый пресет вручную
- Любой пресет теперь работает автоматически
- Удобное масштабирование без изменений Makefile

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 17:14:14 +03:00
2025-03-18 17:25:06 +03:00

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 контейнеры)

# Просмотр доступных 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

  1. Универсальное определение preset'а:

    ARGS="$(filter-out test,$(MAKECMDGOALS))"
    PRESET="$$(echo $$ARGS | cut -d' ' -f1)"
    
  2. Проверка существования preset'ов с подробной справкой:

    if [ ! -f "molecule/presets/$$PRESET.yml" ]; then
        echo "❌ Ошибка: Пресет '$PRESET' не найден!"
        # Показать доступные preset'ы и примеры использования
    fi
    
  3. Динамическая загрузка в Ansible:

    - name: Load preset configuration
      include_vars: "{{ preset_file }}"
      when: preset_file is file
      ignore_errors: true
    
  4. Поддержка любых 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

🎯 Результат

Теперь система тестирования работает корректно:

  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

Description
DevOpsLab - это универсальная DevOps платформа для разработки, тестирования и развертывания инфраструктуры. Система объединяет Ansible роли, Docker контейнеры и Kubernetes кластеры в единую среду для автоматизации и управления инфраструктурой.
https://devops.org.ru
Readme 2.6 MiB
Languages
Makefile 46.6%
Dockerfile 21.3%
Python 19.5%
Shell 12.6%