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