- Реорганизован 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'ах * Добавлены пустые цели для совместимости
282 lines
7.6 KiB
Markdown
282 lines
7.6 KiB
Markdown
# Универсальная система тестирования 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
|