Files
DevOpsLab/README.md
Sergey Antropoff 0eb717ad82 feat: Добавлена интерактивность и поддержка playbooks для ролей
- Улучшена команда make role create с интерактивным вводом
- Добавлена команда make role playbook для управления playbooks
- Создана папка playbooks/ в структуре роли
- Обновлена документация по работе с ролями

Новые возможности:
- Интерактивное создание роли с настройкой параметров
- Управление playbooks роли (create|list|edit|run)
- Автоматическое создание структуры с папкой playbooks
- Улучшенные метаданные роли с платформами и тегами

Интерактивные параметры при создании роли:
- Описание роли
- Основной пакет
- Сервис
- Платформы (ubuntu,centos,rhel)
- Теги для Ansible Galaxy

Команды playbooks:
- make role playbook NAME=my-role create - создать playbook
- make role playbook NAME=my-role list - список playbooks
- make role playbook NAME=my-role edit - редактировать playbook
- make role playbook NAME=my-role run - запустить playbook

Документация:
- Создан docs/roles.md с полным руководством
- Обновлен README.md с новыми командами
- Добавлены примеры использования

Преимущества:
- Полная интерактивность при создании ролей
- Удобное управление playbooks роли
- Автоматическая генерация структуры
- Подробная документация
- Интеграция с лабораторией

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-22 14:53:35 +03:00

497 lines
19 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.

# Ansible Template - Универсальная лаборатория для тестирования Ansible ролей
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Ansible](https://img.shields.io/badge/Ansible-2.15+-blue.svg)](https://www.ansible.com/)
[![Molecule](https://img.shields.io/badge/Molecule-5.0+-green.svg)](https://molecule.readthedocs.io/)
[![Docker](https://img.shields.io/badge/Docker-20.0+-blue.svg)](https://www.docker.com/)
## 📋 Описание
**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
### Установка
```bash
# Клонировать репозиторий
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
```
### Первый запуск
```bash
# Инициализация проекта
make init
# Поднять контроллер
make lab up
# Запустить минимальную лабораторию
make lab test
# Посмотреть отчет
make report
```
### Основные команды
```bash
# Показать справку
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
# Управление ролями
make role list # Список ролей
make role create NAME=my-role # Создать роль (интерактивно)
make role test NAME=my-role # Тестировать роль
make role lint # Проверка ролей
make role deploy # Развертывание ролей
make role info NAME=my-role # Информация о роли
make role playbook NAME=my-role # Управление 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 # Очистить лабораторию
```
## 📚 Документация
### Основные разделы
- **[Универсальная лаборатория](docs/universal-lab.md)** - полное руководство по работе с лабораторией
- **[Пресеты](docs/presets.md)** - описание всех 21 готового пресета
- **[Роли](docs/roles.md)** - структура и создание Ansible ролей
- **[CI/CD](ci-cd/README.md)** - настройка CI/CD для Ansible ролей
### Дополнительные материалы
- **[Примеры использования](docs/examples.md)** - практические примеры
- **[Troubleshooting](docs/troubleshooting.md)** - решение проблем
- **[API Reference](docs/api.md)** - справочник по 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` |
## 🛠️ Основные команды
### Управление лабораторией
```bash
# Поднять контроллер
make lab-up
# Погасить контроллер
make lab-down
# Полный цикл тестирования
make lab-test
# Создать инфраструктуру
make lab-create
# Запустить роли
make lab-converge
# Проверить работу
make lab-verify
# Уничтожить инфраструктуру
make lab-destroy
# Полный сброс
make lab-reset
```
### Снапшоты и восстановление
```bash
# Сохранить снапшот
make lab-snapshot
# Восстановить из снапшота
make lab-restore
# Очистить лабораторию
make lab-cleanup
```
### Kubernetes команды
```bash
# Войти в контейнер с 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
```
### Отчеты и мониторинг
```bash
# Сгенерировать HTML отчет
make lab-report
# Открыть Grafana
make grafana-open
# Получить URL Bookinfo
make bookinfo-url
```
## 🔧 Создание собственных пресетов
### Структура пресета
```yaml
---
# ПРЕСЕТ: Название (количество машин)
#
# Описание: Подробное описание пресета
#
# Использование: 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 системы
### Группы хостов
Можно создавать любые группы для организации хостов:
```yaml
hosts:
- name: web1
group: webservers
- name: db1
group: databases
- name: cache1
group: caches
```
### Публикация портов
```yaml
publish:
- "8080:80" # HTTP
- "8443:443" # HTTPS
- "3306:3306" # MySQL
- "5432:5432" # PostgreSQL
```
### Переменные окружения
```yaml
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
├── ci-cd/ # CI/CD конфигурация
│ ├── README.md # Документация CI/CD
│ ├── .gitlab-ci.yml # GitLab CI/CD
│ ├── gitlab/ # GitLab Runner
│ └── dockerfiles/ # Dockerfile'ы для разных ОС
├── 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 конфигурация
```
## 🤝 Участие в разработке
### Установка для разработки
```bash
# Клонировать репозиторий
git clone https://github.com/your-username/ansible-template.git
cd ansible-template
# Установить pre-commit хуки
make pre-commit-install
# Запустить тесты
make lab-test
```
### Создание нового пресета
1. Создать файл в `molecule/presets/your-preset.yml`
2. Добавить описание в `docs/presets.md`
3. Протестировать: `make lab-test LAB_SPEC=molecule/presets/your-preset.yml`
4. Создать Pull Request
### Создание новой роли
1. Создать структуру роли в `roles/your-role/`
2. Добавить описание в `docs/roles.md`
3. Протестировать с подходящим пресетом
4. Создать Pull Request
## 📄 Лицензия
Этот проект распространяется под лицензией MIT. См. файл [LICENSE](LICENSE) для подробностей.
## 👥 Авторы
- **Сергей Антропов** - *Основной разработчик* - [devops.org.ru](https://devops.org.ru)
## 🙏 Благодарности
- [Ansible](https://www.ansible.com/) - за отличный инструмент автоматизации
- [Molecule](https://molecule.readthedocs.io/) - за фреймворк тестирования
- [Docker](https://www.docker.com/) - за контейнеризацию
- [Kubernetes](https://kubernetes.io/) - за оркестрацию
- [Istio](https://istio.io/) - за service mesh
## 📞 Поддержка
- **Документация**: [docs/](docs/)
- **Issues**: [GitHub Issues](https://github.com/your-username/ansible-template/issues)
- **Discussions**: [GitHub Discussions](https://github.com/your-username/ansible-template/discussions)
- **Сайт**: [devops.org.ru](https://devops.org.ru)
---
**Сделано с ❤️ для сообщества DevOps**