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:
Сергей Антропов
2025-10-25 11:29:37 +03:00
parent 60ee5e90a5
commit 696e08aa35
27 changed files with 2101 additions and 250 deletions

424
docs/examples.md Normal file
View File

@@ -0,0 +1,424 @@
# Примеры использования универсальной системы тестирования
## Пример 1: Тестирование кластера etcd + PostgreSQL + Patroni
### Описание
Этот пример демонстрирует тестирование высокодоступного кластера PostgreSQL с Patroni и etcd.
### Preset: etcd-patroni
```yaml
# molecule/presets/etcd-patroni.yml
hosts:
# ETCD кластер (5 узлов для высокой доступности)
- name: etcd1
family: debian
groups: [etcd, cluster]
- name: etcd2
family: rhel
groups: [etcd, cluster]
- name: etcd3
family: debian
groups: [etcd, cluster]
- name: etcd4
family: rhel
groups: [etcd, cluster]
- name: etcd5
family: debian
groups: [etcd, cluster]
# Patroni кластер (3 узла PostgreSQL)
- name: patroni1
family: rhel
groups: [patroni, database, cluster]
- name: patroni2
family: debian
groups: [patroni, database, cluster]
- name: patroni3
family: rhel
groups: [patroni, database, cluster]
# HAProxy для балансировки
- name: haproxy
family: debian
groups: [haproxy, loadbalancer]
publish: ["5000:5000", "5001:5001"] # RW и RO порты
# DinD узел для тестирования Docker Compose внутри
- name: app-dind
type: dind
groups: [apps, docker]
publish: ["8080:8080"]
```
### Запуск тестирования
```bash
# Информация о preset'е
make preset-info PRESET=etcd-patroni
# Тестирование с preset'ом
make preset-test PRESET=etcd-patroni
# Или через role test
make role test etcd-patroni
```
### Проверка результатов
```bash
# Проверить статус контейнеров
make container-info
# Проверить vault файлы
make vault-check
```
## Пример 2: Нагрузочное тестирование
### Описание
Этот пример демонстрирует тестирование под нагрузкой с множественными серверами и кэшем.
### Preset: performance
```yaml
# molecule/presets/performance.yml
hosts:
# Основные серверы (5 узлов)
- name: server1
family: debian
groups: [servers, web, app]
- name: server2
family: rhel
groups: [servers, web, app]
- name: server3
family: debian
groups: [servers, web, app]
- name: server4
family: rhel
groups: [servers, web, app]
- name: server5
family: debian
groups: [servers, web, app]
# База данных (3 узла)
- name: db1
family: rhel
groups: [database, db]
- name: db2
family: debian
groups: [database, db]
- name: db3
family: rhel
groups: [database, db]
# Кэш (3 узла Redis)
- name: cache1
family: debian
groups: [cache, redis]
- name: cache2
family: rhel
groups: [cache, redis]
- name: cache3
family: debian
groups: [cache, redis]
# Load balancer
- name: lb1
family: rhel
groups: [loadbalancer, haproxy]
publish: ["80:80", "443:443"]
# DinD узел для тестирования Docker Compose
- name: compose-dind
type: dind
groups: [apps, docker]
publish: ["8080:8080", "8081:8081"]
```
### Запуск тестирования
```bash
# Тестирование с performance preset'ом
make role test performance
# Проверка статуса
make container-info
```
## Пример 3: Тестирование безопасности
### Описание
Этот пример демонстрирует тестирование в безопасной среде с bastion хостами и изоляцией.
### Preset: security
```yaml
# molecule/presets/security.yml
hosts:
# Bastion хосты (точки входа)
- name: bastion1
family: rhel
groups: [bastion, security, jump]
publish: ["2222:22"]
- name: bastion2
family: debian
groups: [bastion, security, jump]
publish: ["2223:22"]
# Внутренние серверы (без внешнего доступа)
- name: internal1
family: rhel
groups: [internal, servers, app]
- name: internal2
family: debian
groups: [internal, servers, app]
- name: internal3
family: rhel
groups: [internal, servers, app]
# База данных (изолированная сеть)
- name: db-secure1
family: rhel
groups: [database, secure, internal]
- name: db-secure2
family: debian
groups: [database, secure, internal]
# Мониторинг и логирование
- name: monitor1
family: debian
groups: [monitoring, security, logs]
- name: monitor2
family: rhel
groups: [monitoring, security, logs]
# Firewall и сетевые компоненты
- name: fw1
family: rhel
groups: [firewall, network, security]
- name: fw2
family: debian
groups: [firewall, network, security]
# DOoD узел для тестирования Docker безопасности
- name: docker-secure
type: dood
family: debian
groups: [docker, security, apps]
publish: ["8080:8080"]
env:
DOCKER_HOST: "unix:///var/run/docker.sock"
```
### Запуск тестирования
```bash
# Тестирование с security preset'ом
make role test security
# Проверка безопасности
make vault-check
make vault-scan
```
## Пример 4: Тестирование на разных ОС
### Описание
Этот пример демонстрирует тестирование на различных операционных системах.
### Preset: multi-os
```yaml
# molecule/presets/multi-os.yml
hosts:
# Debian/Ubuntu серверы
- name: ubuntu1
family: ubuntu
groups: [ubuntu, servers, web]
- name: debian1
family: debian
groups: [debian, servers, web]
- name: ubuntu2
family: ubuntu
groups: [ubuntu, servers, app]
- name: debian2
family: debian
groups: [debian, servers, app]
# RHEL/CentOS серверы
- name: rhel1
family: rhel
groups: [rhel, servers, web]
- name: centos1
family: centos
groups: [centos, servers, web]
- name: rhel2
family: rhel
groups: [rhel, servers, app]
- name: centos2
family: centos
groups: [centos, servers, app]
# База данных на разных ОС
- name: db-ubuntu
family: ubuntu
groups: [database, ubuntu, db]
- name: db-rhel
family: rhel
groups: [database, rhel, db]
# Load balancer
- name: lb-mixed
family: debian
groups: [loadbalancer, haproxy]
publish: ["80:80", "443:443"]
# DinD узел для тестирования Docker
- name: docker-mixed
type: dind
groups: [docker, apps]
publish: ["8080:8080"]
```
### Запуск тестирования
```bash
# Тестирование с multi-os preset'ом
make role test multi-os
# Проверка типов контейнеров
make container-types
```
## Пример 5: Создание собственного preset'а
### Описание
Этот пример демонстрирует создание собственного preset'а для специфических нужд.
### Создание preset'а
```bash
# Создать новый preset
cat > molecule/presets/my-custom.yml << 'EOF'
---
# Пресет для тестирования веб-приложения
# Автор: Ваше имя
# Сайт: https://your-site.com
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:
# Веб-серверы
- name: web1
family: debian
groups: [web, servers]
publish: ["80:80", "443:443"]
- name: web2
family: rhel
groups: [web, servers]
publish: ["8080:80", "8443:443"]
# База данных
- name: db1
family: rhel
groups: [database, db]
- name: db2
family: debian
groups: [database, db]
# Кэш
- name: cache1
family: debian
groups: [cache, redis]
# DinD узел для тестирования
- name: app-dind
type: dind
groups: [apps, docker]
publish: ["8080:8080"]
EOF
```
### Использование preset'а
```bash
# Информация о preset'е
make preset-info PRESET=my-custom
# Тестирование с preset'ом
make preset-test PRESET=my-custom
# Или через role test
make role test my-custom
```
## Пример 6: Работа с Ansible Vault
### Создание vault файла
```bash
# Создать файл секретов
make vault create
# Ввести имя файла: secrets
# Ввести содержимое:
# ---
# database_password: "super_secret_password"
# api_key: "your_api_key_here"
# ssl_cert: "your_ssl_certificate"
```
### Использование в ролях
```yaml
# roles/my-role/tasks/main.yml
- name: Configure database
template:
src: database.conf.j2
dest: /etc/database.conf
vars:
db_password: "{{ database_password }}"
api_key: "{{ api_key }}"
```
### Проверка безопасности
```bash
# Проверить vault файлы
make vault-check
# Найти потенциальные секреты
make vault-scan
```
## Заключение
Эти примеры демонстрируют различные способы использования универсальной системы тестирования Ansible ролей. Вы можете:
1. Использовать готовые preset'ы для быстрого тестирования
2. Создавать собственные preset'ы для специфических нужд
3. Комбинировать различные типы контейнеров
4. Использовать Ansible Vault для безопасности
5. Тестировать на различных операционных системах
Для получения дополнительной информации используйте:
- `make help` - общая справка
- `make preset-list` - список preset'ов
- `make container-types` - типы контейнеров
- `make vault` - команды Vault

281
docs/universal-testing.md Normal file
View 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