- Удалена директория roles/ со всеми ролями - Упрощен site.yml (убраны ссылки на роли) - Обновлен Makefile (убраны команды для ролей) - Удален скрипт auto-add-role.sh - Обновлен README.md (убрана информация о ролях) Изменения: - Удалена роль deploy - Удалена роль demo - Удален скрипт auto-add-role.sh - Упрощен site.yml до базовых задач - Убраны команды make role из Makefile - Обновлена документация Теперь проект использует только playbooks: - files/playbooks/site.yml - основной playbook - files/playbooks/chaos.yml - chaos engineering - files/playbooks/health.yml - health dashboard Преимущества: - Упрощенная архитектура - Меньше сложности - Прямое использование playbooks - Легче понимать и поддерживать Автор: Сергей Антропов Сайт: https://devops.org.ru
Ansible Template - Универсальная лаборатория для тестирования Ansible ролей
📋 Описание
Ansible Template - это универсальная лаборатория для тестирования Ansible ролей в различных конфигурациях. Проект предоставляет гибкую и мощную среду для тестирования Ansible ролей, включая Docker-in-Docker (DinD), Docker-outside-of-Docker (DOoD), кластеры Kubernetes (Kind), Istio, Kiali, Prometheus и Grafana.
🎯 Основные возможности
- Динамическое создание инфраструктуры - автоматическое развертывание Docker контейнеров и Kind кластеров
- Поддержка различных ОС - тестирование ролей на Debian и RHEL-подобных системах
- Docker-in-Docker (DinD) - изолированные Docker-среды внутри контейнеров
- Docker-outside-of-Docker (DOoD) - использование Docker-демона хоста из контейнера
- Kubernetes кластеры - полноценные Kind кластеры с аддонами
- Service Mesh - Istio с Kiali для визуализации
- Мониторинг - Prometheus, Grafana, Jaeger для полной наблюдаемости
- 21 готовый пресет - от простых до экстремально сложных сценариев
- HTML отчеты - красивые отчеты о результатах тестирования
- Снапшоты - сохранение и восстановление состояния лаборатории
🚀 Быстрый старт
Предварительные требования
- Docker 20.0+
- Docker Compose 2.0+
- Make
- Git
Установка
# Клонировать репозиторий
git clone https://github.com/your-username/ansible-template.git
cd ansible-template
# Создать необходимые файлы
echo "your-vault-password" > vault-password.txt
mkdir -p roles
mkdir -p files/playbooks
# Установить pre-commit хуки (опционально)
make pre-commit-install
Первый запуск
# Инициализация проекта
make init
# Поднять контроллер
make lab up
# Запустить минимальную лабораторию
make lab test
# Посмотреть отчет
make report
Основные команды
# Показать справку
make help
# Управление лабораторией
make lab up          # Поднять контроллер
make lab down        # Остановить контроллер
make lab test        # Полный цикл тестирования
make lab create      # Создать инфраструктуру
make lab converge    # Запустить роли
make lab verify      # Проверить работу
make lab destroy     # Уничтожить инфраструктуру
make lab reset       # Полный сброс
# Управление Kubernetes
make kube sh         # Войти в контейнер
make kube cmd CLUSTER=lab CMD="get pods -A"
make kube kiali CLUSTER=lab
make kube istio CLUSTER=lab
make kube grafana CLUSTER=lab
make kube prom CLUSTER=lab
make kube kubeconfig CLUSTER=lab  # Получить kubeconfig
# Управление пресетами
make preset list     # Список пресетов
make preset create NAME=my-preset
make preset test NAME=my-preset
make preset edit NAME=my-preset
# Управление ролями (УДАЛЕНО)
# Роли Ansible удалены из проекта
# Используйте playbooks для развертывания
# Проверка всего проекта
make lint            # Проверить весь проект на ошибки
make check-secrets   # Проверить безопасность секретов
make idempotence     # Проверить идемпотентность
make chaos           # Запустить Chaos Engineering тесты
# Управление Vault
make vault show      # Показать содержимое
make vault create    # Создать vault файл
make vault edit      # Редактировать vault файл
# Управление Git
make git status      # Статус репозитория
make git add         # Добавить файлы
make git commit MESSAGE="your message"
make git push        # Отправить изменения
# Отчеты и мониторинг
make report          # HTML отчет
make kubeconfigs     # Получить все kubeconfig файлы
make open-report     # Открыть отчет в браузере
make full-test       # Полный цикл с отчетом и kubeconfig
make snapshot        # Создать снапшот
make restore         # Восстановить снапшот
make cleanup         # Очистить лабораторию
📚 Документация
Основные разделы
- Универсальная лаборатория - полное руководство по работе с лабораторией
- Пресеты - описание всех 21 готового пресета
- Роли - структура и создание Ansible ролей
Дополнительные материалы
- Примеры использования - практические примеры
- Troubleshooting - решение проблем
- API Reference - справочник по API
🎛️ Пресеты
Классические пресеты (systemd контейнеры)
| Пресет | Машины | Описание | Команда | 
|---|---|---|---|
| minimal.yml | 1-3 | Базовая конфигурация | make lab-test LAB_SPEC=molecule/presets/minimal.yml | 
| webapp.yml | 3-5 | Веб-приложение | make lab-test LAB_SPEC=molecule/presets/webapp.yml | 
| microservices.yml | 5-8 | Микросервисы | make lab-test LAB_SPEC=molecule/presets/microservices.yml | 
| ha.yml | 6-10 | Высокая доступность | make lab-test LAB_SPEC=molecule/presets/ha.yml | 
| k8s-cluster.yml | 8-12 | Kubernetes кластер | make lab-test LAB_SPEC=molecule/presets/k8s-cluster.yml | 
| cicd.yml | 10-15 | CI/CD пайплайн | make lab-test LAB_SPEC=molecule/presets/cicd.yml | 
| bigdata.yml | 12-18 | Big Data кластер | make lab-test LAB_SPEC=molecule/presets/bigdata.yml | 
| servicemesh.yml | 15-20 | Service Mesh | make lab-test LAB_SPEC=molecule/presets/servicemesh.yml | 
| enterprise.yml | 18-20 | Enterprise | make lab-test LAB_SPEC=molecule/presets/enterprise.yml | 
| maximum.yml | 20 | Максимальный | make lab-test LAB_SPEC=molecule/presets/maximum.yml | 
Kubernetes пресеты
| Пресет | Описание | Команда | 
|---|---|---|
| k8s-single.yml | Одиночный Kind кластер | make lab-test LAB_SPEC=molecule/presets/k8s-single.yml | 
| k8s-multi.yml | Мульти-кластер (dev/staging/prod) | make lab-test LAB_SPEC=molecule/presets/k8s-multi.yml | 
| k8s-istio-full.yml | Полный стек Istio | make lab-test LAB_SPEC=molecule/presets/k8s-istio-full.yml | 
Docker пресеты
| Пресет | Тип | Описание | Команда | 
|---|---|---|---|
| dind-simple.yml | DinD | 3 изолированных Docker среды | make lab-test LAB_SPEC=molecule/presets/dind-simple.yml | 
| dind-swarm.yml | DinD | Docker Swarm кластер | make lab-test LAB_SPEC=molecule/presets/dind-swarm.yml | 
| dind-compose.yml | DinD | Docker Compose стеки | make lab-test LAB_SPEC=molecule/presets/dind-compose.yml | 
| dood-simple.yml | DOoD | 3 DOoD контейнера | make lab-test LAB_SPEC=molecule/presets/dood-simple.yml | 
| dood-mixed.yml | DOoD | Смешанная конфигурация | make lab-test LAB_SPEC=molecule/presets/dood-mixed.yml | 
Смешанные пресеты
| Пресет | Описание | Команда | 
|---|---|---|
| mixed-k8s-dind.yml | Kubernetes + DinD | make lab-test LAB_SPEC=molecule/presets/mixed-k8s-dind.yml | 
| mixed-k8s-dood.yml | Kubernetes + DOoD | make lab-test LAB_SPEC=molecule/presets/mixed-k8s-dood.yml | 
| mixed-full.yml | Полная гибридная конфигурация | make lab-test LAB_SPEC=molecule/presets/mixed-full.yml | 
🛠️ Основные команды
Управление лабораторией
# Поднять контроллер
make lab-up
# Погасить контроллер
make lab-down
# Полный цикл тестирования
make lab-test
# Создать инфраструктуру
make lab-create
# Запустить роли
make lab-converge
# Проверить работу
make lab-verify
# Уничтожить инфраструктуру
make lab-destroy
# Полный сброс
make lab-reset
Снапшоты и восстановление
# Сохранить снапшот
make lab-snapshot
# Восстановить из снапшота
make lab-restore
# Очистить лабораторию
make lab-cleanup
Kubernetes команды
# Войти в контейнер с kubectl
make kube-sh
# Выполнить kubectl команду
make kube-cmd CLUSTER=lab CMD="get pods -A"
# Войти в кластер
make kube-enter CLUSTER=lab
# Port-forward Kiali
make kiali-port-forward CLUSTER=lab
# Port-forward Istio Gateway
make istio-gw-port-forward CLUSTER=lab
# Port-forward Grafana
make grafana-port-forward CLUSTER=lab
# Port-forward Prometheus
make prom-port-forward CLUSTER=lab
# Остановить все port-forward
make kube-pf-stop
Отчеты и мониторинг
# Сгенерировать HTML отчет
make lab-report
# Открыть Grafana
make grafana-open
# Получить URL Bookinfo
make bookinfo-url
🔧 Создание собственных пресетов
Структура пресета
---
# ПРЕСЕТ: Название (количество машин)
# 
# Описание: Подробное описание пресета
# 
# Использование: make lab-test SCENARIO=universal LAB_SPEC=molecule/presets/your-preset.yml
# 
# Автор: Ваше имя
# Сайт: https://your-site.com
docker_network: labnet
# Kind кластеры (опционально)
kind_clusters:
  - name: your-cluster
    workers: 2
    api_port: 6443
    addons:
      ingress_nginx: true
      metrics_server: true
      istio: true
      kiali: true
      prometheus_stack: true
    ingress_host_http_port: 8081
    ingress_host_https_port: 8443
# Образы для разных семейств ОС
images:
  debian: "ghcr.io/ansible-community/molecule-ubuntu-systemd:jammy"
  rhel: "quay.io/centos/centos:stream9-systemd"
# Настройки по умолчанию для systemd контейнеров
systemd_defaults:
    privileged: true
  command: "/sbin/init"
    volumes:
    - "/sys/fs/cgroup:/sys/fs/cgroup:ro"
  tmpfs:
    - "/run"
    - "/run/lock"
  capabilities:
    - "SYS_ADMIN"
# Определение хостов лаборатории
hosts:
  - name: host1
    family: debian
    group: webservers
    publish:
      - "8080:80"
  
  - name: host2
    type: dind
    group: dind
    publish:
      - "2375:2375"
  
  - name: host3
    type: dood
    family: rhel
    group: dood
    publish:
      - "8081:80"
    env:
      DOCKER_HOST: "unix:///var/run/docker.sock"
Типы хостов
- systemd - обычные контейнеры с systemd (по умолчанию)
- dind - Docker-in-Docker контейнеры
- dood - Docker-outside-of-Docker контейнеры
Семейства ОС
- debian - Debian/Ubuntu системы
- rhel - RHEL/CentOS системы
Группы хостов
Можно создавать любые группы для организации хостов:
hosts:
  - name: web1
    group: webservers
  - name: db1
    group: databases
  - name: cache1
    group: caches
Публикация портов
publish:
  - "8080:80"    # HTTP
  - "8443:443"   # HTTPS
  - "3306:3306"  # MySQL
  - "5432:5432"  # PostgreSQL
Переменные окружения
env:
  DOCKER_HOST: "unix:///var/run/docker.sock"
  DATABASE_URL: "postgresql://user:pass@db:5432/mydb"
  DEBUG: "true"
📁 Структура проекта
ansible-template/
├── README.md                    # Основная документация
├── Makefile                     # Команды управления
├── docker-compose.yaml          # Docker Compose конфигурация
├── vault-password.txt           # Пароль для Ansible Vault
├── docs/                        # Документация
│   ├── universal-lab.md         # Руководство по лаборатории
│   ├── presets.md              # Описание пресетов
│   ├── roles.md                # Структура ролей
│   ├── examples.md             # Примеры использования
│   ├── troubleshooting.md     # Решение проблем
│   └── api.md                  # API Reference
├── molecule/                   # Molecule конфигурация
│   ├── universal/              # Универсальный сценарий
│   │   ├── molecule.yml        # Конфигурация Molecule
│   │   ├── vars.yml            # Переменные по умолчанию
│   │   ├── create.yml          # Создание инфраструктуры
│   │   └── verify.yml          # Проверка работы
│   └── presets/                # Готовые пресеты
│       ├── minimal.yml         # Минимальная лаборатория
│       ├── webapp.yml          # Веб-приложение
│       ├── k8s-single.yml      # Kubernetes single
│       ├── dind-simple.yml     # DinD simple
│       ├── dood-simple.yml     # DOoD simple
│       └── ...                 # Другие пресеты
├── files/                      # Файлы для ролей
│   ├── playbooks/              # Ansible playbooks
│   ├── k8s/                    # Kubernetes манифесты
│   ├── grafana/                # Grafana дашборды
│   └── requirements.yml        # Ansible коллекции
├── roles/                      # Ansible роли
│   └── your_role/              # Ваши роли
├── scripts/                    # Скрипты (запускаются через Docker)
│   ├── report_html.py         # Генератор HTML отчетов
│   ├── snapshot.sh            # Создание снапшотов
│   ├── restore.sh             # Восстановление снапшотов
│   └── cleanup.sh             # Очистка лаборатории
├── vault/                      # Секреты и пароли
│   ├── .vault                  # Пароль для Ansible Vault
│   └── secrets.yml             # Зашифрованные секреты
└── .pre-commit-config.yaml    # Pre-commit конфигурация
🤝 Участие в разработке
Установка для разработки
# Клонировать репозиторий
git clone https://github.com/your-username/ansible-template.git
cd ansible-template
# Установить pre-commit хуки
make pre-commit-install
# Запустить тесты
make lab-test
Создание нового пресета
- Создать файл в molecule/presets/your-preset.yml
- Добавить описание в docs/presets.md
- Протестировать: make lab-test LAB_SPEC=molecule/presets/your-preset.yml
- Создать Pull Request
Создание новой роли
- Создать структуру роли в roles/your-role/
- Добавить описание в docs/roles.md
- Протестировать с подходящим пресетом
- Создать Pull Request
📄 Лицензия
Этот проект распространяется под лицензией MIT. См. файл LICENSE для подробностей.
👥 Авторы
- Сергей Антропов - Основной разработчик - devops.org.ru
🙏 Благодарности
- Ansible - за отличный инструмент автоматизации
- Molecule - за фреймворк тестирования
- Docker - за контейнеризацию
- Kubernetes - за оркестрацию
- Istio - за service mesh
📞 Поддержка
- Документация: docs/
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Сайт: devops.org.ru
Сделано с ❤️ для сообщества DevOps
Description
				DevOpsLab - это универсальная DevOps платформа для разработки, тестирования и развертывания инфраструктуры. Система объединяет Ansible роли, Docker контейнеры и Kubernetes кластеры в единую среду для автоматизации и управления инфраструктурой.
						
						
							
								 https://devops.org.ru
							
						
						
					Languages
				
				
								
								
									Makefile
								
								50.5%
							
						
							
								
								
									Dockerfile
								
								21.7%
							
						
							
								
								
									Python
								
								19.7%
							
						
							
								
								
									Shell
								
								6.3%
							
						
							
								
								
									Jinja
								
								1.8%