feat: Реорганизация Makefile и добавление Docker образов
- Реорганизован Makefile: * Переменные вынесены наверх * Справка перенесена в конец * Удалены секции molecule и container * Объединены presets и preset в одну секцию * Переименована секция docker в docker-cmd - Добавлены Docker образы: * ansible-controller - основной контроллер * alt-linux, astra-linux, redos - российские дистрибутивы * rhel, centos, alma, rocky - RHEL-совместимые образы - Обновлены preset'ы: * Добавлены описания #description: во все preset'ы * Переименован docker.yml в docker-test.yml * Добавлены новые preset'ы: etcd-patroni, multi-os - Добавлена документация: * docs/examples.md - примеры использования * docs/universal-testing.md - универсальное тестирование * dockerfiles/README.md - описание Docker образов - Улучшена функциональность: * Единообразный стиль команд make [категория] [действие] * Улучшенный вывод информации о preset'ах * Добавлены пустые цели для совместимости
This commit is contained in:
281
docs/universal-testing.md
Normal file
281
docs/universal-testing.md
Normal file
@@ -0,0 +1,281 @@
|
||||
# Универсальная система тестирования Ansible ролей
|
||||
|
||||
## Обзор
|
||||
|
||||
Эта система предоставляет универсальную среду для тестирования и деплоя Ansible ролей с поддержкой различных типов контейнеров, автоматической генерации инвентаря и интеграции с Ansible Vault.
|
||||
|
||||
## Основные возможности
|
||||
|
||||
### 🐳 Типы контейнеров
|
||||
|
||||
#### Systemd контейнеры (по умолчанию)
|
||||
- Полная поддержка systemd сервисов
|
||||
- Работа как виртуальные машины
|
||||
- Подходит для тестирования ролей
|
||||
|
||||
#### DinD (Docker-in-Docker)
|
||||
- Изолированный Docker daemon
|
||||
- Подходит для тестирования Docker Compose
|
||||
- Полная изоляция от хостового Docker
|
||||
|
||||
#### DOoD (Docker-out-of-Docker)
|
||||
- Доступ к хостовому Docker daemon
|
||||
- Быстрое тестирование
|
||||
- Подходит для CI/CD
|
||||
|
||||
### 📋 Preset'ы
|
||||
|
||||
#### etcd-patroni
|
||||
- Кластер etcd (5 узлов)
|
||||
- Кластер PostgreSQL с Patroni (3 узла)
|
||||
- HAProxy для балансировки
|
||||
- DinD узел для тестирования
|
||||
|
||||
#### performance
|
||||
- 5 серверов приложений
|
||||
- 3 узла базы данных
|
||||
- 3 узла кэша Redis
|
||||
- Load balancer
|
||||
- DinD узел для тестирования
|
||||
|
||||
#### security
|
||||
- Bastion хосты
|
||||
- Внутренние серверы
|
||||
- Изолированная база данных
|
||||
- Мониторинг и логирование
|
||||
- Firewall компоненты
|
||||
- DOoD узел для тестирования
|
||||
|
||||
#### multi-os
|
||||
- Тестирование на разных ОС
|
||||
- Ubuntu, Debian, RHEL, CentOS
|
||||
- Смешанные конфигурации
|
||||
- DinD узел для тестирования
|
||||
|
||||
### 🔐 Ansible Vault интеграция
|
||||
|
||||
- Автоматическая расшифровка перед тестированием
|
||||
- Безопасное хранение секретов
|
||||
- Автоматическая повторная шифровка после тестирования
|
||||
- Поддержка множественных vault'ов
|
||||
|
||||
## Использование
|
||||
|
||||
### Базовые команды
|
||||
|
||||
```bash
|
||||
# Показать все preset'ы
|
||||
make preset-list
|
||||
|
||||
# Информация о preset'е
|
||||
make preset-info PRESET=etcd-patroni
|
||||
|
||||
# Тестирование с preset'ом
|
||||
make preset-test PRESET=etcd-patroni
|
||||
|
||||
# Типы контейнеров
|
||||
make container-types
|
||||
|
||||
# Информация о контейнерах
|
||||
make container-info
|
||||
|
||||
# Проверка vault файлов
|
||||
make vault-check
|
||||
|
||||
# Поиск секретов
|
||||
make vault-scan
|
||||
```
|
||||
|
||||
### Тестирование ролей
|
||||
|
||||
```bash
|
||||
# С default preset
|
||||
make role test
|
||||
|
||||
# С конкретным preset'ом
|
||||
make role test etcd-patroni
|
||||
make role test performance
|
||||
make role test security
|
||||
make role test multi-os
|
||||
```
|
||||
|
||||
### Работа с Ansible Vault
|
||||
|
||||
```bash
|
||||
# Создать файл секретов
|
||||
make vault create
|
||||
|
||||
# Редактировать секреты
|
||||
make vault edit
|
||||
|
||||
# Показать секреты
|
||||
make vault show
|
||||
|
||||
# Зашифровать файл
|
||||
make vault encrypt
|
||||
|
||||
# Расшифровать файл
|
||||
make vault decrypt
|
||||
```
|
||||
|
||||
## Структура проекта
|
||||
|
||||
```
|
||||
.
|
||||
├── molecule/
|
||||
│ ├── default/
|
||||
│ │ ├── create.yml # Создание контейнеров
|
||||
│ │ ├── destroy.yml # Удаление контейнеров
|
||||
│ │ ├── converge.yml # Запуск плейбуков
|
||||
│ │ └── verify.yml # Проверка результатов
|
||||
│ └── presets/
|
||||
│ ├── etcd-patroni.yml
|
||||
│ ├── performance.yml
|
||||
│ ├── security.yml
|
||||
│ └── multi-os.yml
|
||||
├── files/
|
||||
│ ├── requirements.yml
|
||||
│ └── playbooks/
|
||||
│ └── site.yml
|
||||
├── vault/
|
||||
│ └── secrets.yml
|
||||
└── Makefile
|
||||
```
|
||||
|
||||
## Создание собственных preset'ов
|
||||
|
||||
### Пример preset'а
|
||||
|
||||
```yaml
|
||||
---
|
||||
# Пресет для тестирования кластера etcd + PostgreSQL + Patroni
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
docker_network: labnet
|
||||
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||
|
||||
# systemd-ready образы
|
||||
images:
|
||||
debian: "ghcr.io/ansible-community/molecule-ubuntu-systemd:jammy"
|
||||
rhel: "quay.io/centos/centos:stream9-systemd"
|
||||
|
||||
systemd_defaults:
|
||||
privileged: true
|
||||
command: "/sbin/init"
|
||||
volumes:
|
||||
- "/sys/fs/cgroup:/sys/fs/cgroup:ro"
|
||||
tmpfs: ["/run", "/run/lock"]
|
||||
capabilities: ["SYS_ADMIN"]
|
||||
|
||||
# Описание кластера
|
||||
hosts:
|
||||
# Systemd узлы
|
||||
- name: server1
|
||||
family: debian
|
||||
groups: [servers, web]
|
||||
publish: ["80:80"]
|
||||
|
||||
# DinD узел
|
||||
- name: app-dind
|
||||
type: dind
|
||||
groups: [apps, docker]
|
||||
publish: ["8080:8080"]
|
||||
|
||||
# DOoD узел
|
||||
- name: docker-secure
|
||||
type: dood
|
||||
family: debian
|
||||
groups: [docker, security]
|
||||
publish: ["8081:8081"]
|
||||
env:
|
||||
DOCKER_HOST: "unix:///var/run/docker.sock"
|
||||
```
|
||||
|
||||
### Параметры хостов
|
||||
|
||||
- `name` - имя хоста
|
||||
- `family` - семейство ОС (debian, rhel, ubuntu, centos)
|
||||
- `type` - тип контейнера (dind, dood)
|
||||
- `groups` - группы для инвентаря
|
||||
- `publish` - порты для публикации
|
||||
- `env` - переменные окружения
|
||||
- `volumes` - дополнительные тома
|
||||
- `capabilities` - дополнительные возможности
|
||||
|
||||
## Лучшие практики
|
||||
|
||||
### 1. Использование групп
|
||||
|
||||
```yaml
|
||||
hosts:
|
||||
- name: web1
|
||||
groups: [web, servers, production]
|
||||
- name: db1
|
||||
groups: [database, servers, production]
|
||||
```
|
||||
|
||||
### 2. Безопасность
|
||||
|
||||
```yaml
|
||||
# Используйте Ansible Vault для секретов
|
||||
vault_targets:
|
||||
- /ansible/vault/secrets.yml
|
||||
- /ansible/files/playbooks/group_vars/*/vault.yml
|
||||
- /ansible/files/playbooks/host_vars/*/vault.yml
|
||||
```
|
||||
|
||||
### 3. Тестирование
|
||||
|
||||
```yaml
|
||||
# Проверяйте различные сценарии
|
||||
- name: Test web servers
|
||||
hosts: web
|
||||
tasks:
|
||||
- name: Check nginx status
|
||||
systemd:
|
||||
name: nginx
|
||||
state: started
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Проблемы с контейнерами
|
||||
|
||||
```bash
|
||||
# Проверить статус контейнеров
|
||||
make container-info
|
||||
|
||||
# Очистить Docker ресурсы
|
||||
make docker clean
|
||||
```
|
||||
|
||||
### Проблемы с Vault
|
||||
|
||||
```bash
|
||||
# Проверить vault файлы
|
||||
make vault-check
|
||||
|
||||
# Найти потенциальные секреты
|
||||
make vault-scan
|
||||
```
|
||||
|
||||
### Проблемы с preset'ами
|
||||
|
||||
```bash
|
||||
# Показать все preset'ы
|
||||
make preset-list
|
||||
|
||||
# Информация о preset'е
|
||||
make preset-info PRESET=имя_пресета
|
||||
```
|
||||
|
||||
## Заключение
|
||||
|
||||
Универсальная система тестирования Ansible ролей предоставляет мощные инструменты для тестирования ролей в различных сценариях. Используйте preset'ы для быстрого создания тестовых сред, различные типы контейнеров для изоляции и Ansible Vault для безопасности.
|
||||
|
||||
Для получения дополнительной информации используйте:
|
||||
- `make help` - общая справка
|
||||
- `make role` - команды для ролей
|
||||
- `make molecule` - команды Molecule
|
||||
- `make vault` - команды Vault
|
||||
Reference in New Issue
Block a user