Files
DevOpsLab/README.md

225 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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