docs: полностью переписана документация в docs/
Some checks failed
Ansible Testing / lint (push) Has been cancelled
Ansible Testing / test (default) (push) Has been cancelled
Ansible Testing / test (minimal) (push) Has been cancelled
Ansible Testing / test (performance) (push) Has been cancelled
Ansible Testing / deploy-check (push) Has been cancelled

- Обновлены все файлы под актуальные команды Makefile
- Исправлены устаревшие команды (preset-list, container-info и т.д.)
- Добавлена версия 2.0.0 во все файлы
- examples.md полностью переписан с актуальными примерами
- creating-roles.md обновлен с правильными командами
- Удалены устаревшие примеры и команды

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
Сергей Антропов
2025-10-26 01:22:47 +03:00
parent 7c64b8c6fe
commit 4e380971a6
2 changed files with 281 additions and 452 deletions

View File

@@ -1,7 +1,8 @@
# Создание и разработка ролей для AnsibleLab # Создание и разработка ролей для AnsibleLab
**Автор:** Сергей Антропов **Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru **Сайт:** https://devops.org.ru
**Версия:** 2.0.0
## 🚀 Быстрый старт ## 🚀 Быстрый старт
@@ -56,6 +57,7 @@ roles/my-role/
```bash ```bash
# Интерактивное создание роли # Интерактивное создание роли
make role create make role create
# Введите имя роли: my-role
# Система автоматически: # Система автоматически:
# - Создаст структуру папок # - Создаст структуру папок
@@ -75,6 +77,8 @@ touch roles/my-role/{tasks,handlers,meta}/main.yml
touch roles/my-role/defaults/main.yml touch roles/my-role/defaults/main.yml
touch roles/my-role/vars/main.yml touch roles/my-role/vars/main.yml
touch roles/my-role/README.md touch roles/my-role/README.md
# Добавление роли в roles/deploy.yml вручную
``` ```
## 📝 Разработка роли ## 📝 Разработка роли
@@ -532,78 +536,3 @@ MIT
## Автор ## Автор
Сергей Антропов - https://devops.org.ru Сергей Антропов - https://devops.org.ru
```
## 🚀 Полный цикл разработки
### 1. Создание роли
```bash
# Создание структуры
mkdir -p roles/my-role/{tasks,handlers,templates,files,vars,defaults,meta}
touch roles/my-role/{tasks,handlers,meta}/main.yml
touch roles/my-role/defaults/main.yml
touch roles/my-role/vars/main.yml
touch roles/my-role/README.md
```
### 2. Разработка
```bash
# Редактирование файлов роли
nano roles/my-role/tasks/main.yml
nano roles/my-role/defaults/main.yml
# ... остальные файлы
```
### 3. Тестирование
```bash
# Lint проверка
make role lint
# Тестирование в Docker
make role test minimal
# Тестирование с custom preset
make role test my-custom-preset
```
### 4. Развертывание
```bash
# Тестирование на реальных серверах
make role deploy
# Развертывание на продакшн
make role deploy
# Подтвердить развертывание: y
```
## 🔧 Лучшие практики
### 1. Структура кода
- **Используйте теги** для группировки задач
- **Добавляйте условия** для условного выполнения
- **Используйте обработчики** для перезапуска сервисов
- **Документируйте переменные** в defaults/main.yml
### 2. Безопасность
- **Используйте vault** для секретов
- **Проверяйте права** пользователей
- **Настраивайте файрвол** при необходимости
- **Используйте SSL** для защищенных соединений
### 3. Производительность
- **Используйте кеширование** для повторных операций
- **Оптимизируйте пакеты** для уменьшения размера
- **Используйте параллельное выполнение** где возможно
- **Мониторьте ресурсы** системы
---
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru

View File

@@ -1,425 +1,325 @@
# Примеры использования универсальной системы тестирования # Примеры использования AnsibleLab
## Пример 1: Тестирование кластера etcd + PostgreSQL + Patroni **Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
**Версия:** 2.0.0
### Описание ## Быстрый старт
Этот пример демонстрирует тестирование высокодоступного кластера 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 ```bash
# Информация о preset'е # Тестирование роли ping с minimal preset (1 хост)
make preset-info PRESET=etcd-patroni make role test minimal
# Тестирование с preset'ом # Тестирование роли docker с default preset (2 хоста)
make preset-test PRESET=etcd-patroni make role lint docker
make role test docker
```
# Или через role test ### Просмотр доступных preset'ов
make role test etcd-patroni
```bash
# Список всех preset'ов
make presets list
# Информация о конкретном preset'е
make presets info PRESET=default
make presets info PRESET=all-images
```
## Пример 1: Тестирование роли Docker
### Описание
Тестирование универсальной роли Docker на разных ОС.
```bash
# Lint проверка
make role lint docker
# Тестирование с minimal preset (1 хост Debian)
make role test minimal
# Тестирование с default preset (Ubuntu + Debian)
make role test default
# Тестирование с preset all-images (16 хостов, все ОС)
make role test all-images
``` ```
### Проверка результатов ### Проверка результатов
```bash ```bash
# Проверить статус контейнеров # Просмотр созданных контейнеров
make container-info docker ps -a --filter "network=labnet"
# Проверить vault файлы # Просмотр логов контейнера
make vault-check docker logs $(docker ps -aq --filter "network=labnet" | head -1)
# Вход в контейнер для проверки
docker exec -it $(docker ps -aq --filter "network=labnet" | head -1) bash
``` ```
## Пример 2: Нагрузочное тестирование ## Пример 2: Создание собственной роли
### Описание ### Создание роли
Этот пример демонстрирует тестирование под нагрузкой с множественными серверами и кэшем.
### Preset: performance ```bash
# Интерактивное создание новой роли
make role create
# Введите имя роли: nginx
# Редактирование роли
cd roles/nginx
nano tasks/main.yml
```
### Разработка роли
**`roles/nginx/tasks/main.yml`:**
```yaml ```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'
--- ---
# Пресет для тестирования веб-приложения - name: Установка nginx
# Автор: Ваше имя package:
# Сайт: https://your-site.com name: nginx
state: present
when: ansible_os_family in ['Debian', 'RedHat']
docker_network: labnet - name: Запуск nginx
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini" systemd:
name: nginx
# systemd-ready образы state: started
images: enabled: yes
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 ```bash
# Информация о preset'е # Lint проверка
make preset-info PRESET=my-custom make role lint nginx
# Тестирование с preset'ом # Тестирование с minimal preset
make preset-test PRESET=my-custom make role test minimal
# Или через role test # Проверка работы nginx
make role test my-custom docker exec -it $(docker ps -aq --filter "network=labnet" | head -1) systemctl status nginx
``` ```
## Пример 6: Работа с Ansible Vault ## Пример 3: Использование preset'ов
### Создание vault файла ### Minimal preset (1 хост)
```bash ```bash
# Создать файл секретов # Быстрое тестирование на 1 хосте
make role test minimal
# Проверка контейнера
docker ps -a --filter "network=labnet"
```
### Default preset (2 хоста)
```bash
# Тестирование на Ubuntu + Debian
make role test default
# Проверка нескольких контейнеров
docker ps -a --filter "network=labnet"
```
### All-images preset (16 хостов)
```bash
# Полное тестирование всех ОС
make role test all-images
# Проверка всех контейнеров
docker ps -a --filter "network=labnet" --format "table {{.Names}}\t{{.Status}}"
```
### Preset'ы по ОС
```bash
# Тестирование на всех версиях Ubuntu
make role test ubuntu-all
# Тестирование на всех версиях Debian
make role test debian-all
# Тестирование на всех версиях CentOS
make role test centos-all
```
## Пример 4: Работа с Ansible Vault
### Создание секретов
```bash
# Инициализация vault
make vault init
# Создание нового файла секретов
make vault create make vault create
# Имя файла: secrets
# Ввести имя файла: secrets
# Ввести содержимое:
# ---
# database_password: "super_secret_password"
# api_key: "your_api_key_here"
# ssl_cert: "your_ssl_certificate"
``` ```
### Использование в ролях ### Редактирование секретов
```bash
# Редактирование
make vault edit
# Имя файла: secrets
# Просмотр секретов
make vault show
# Имя файла: secrets
```
### Использование в тестировании
Секреты автоматически расшифровываются при запуске тестов и шифруются обратно после завершения.
## Пример 5: CI/CD интеграция
### GitHub Actions
```yaml ```yaml
# roles/my-role/tasks/main.yml name: Ansible Tests
- name: Configure database on: [push, pull_request]
template:
src: database.conf.j2 jobs:
dest: /etc/database.conf test:
vars: runs-on: ubuntu-latest
db_password: "{{ database_password }}" steps:
api_key: "{{ api_key }}" - uses: actions/checkout@v4
- name: Run tests
run: |
make role lint
make role test minimal
``` ```
### Проверка безопасности ### GitLab CI
```yaml
test:
script:
- make role lint
- make role test minimal
only:
- merge_requests
- main
```
## Пример 6: Диагностика и отладка
### Проверка линтинга
```bash ```bash
# Проверить vault файлы # Линт всех ролей
make vault-check make role lint
# Найти потенциальные секреты # Линт конкретной роли
make vault-scan make role lint docker
# Линт с подробным выводом
ansible-lint roles/docker/ -vv
```
### Диагностика тестов
```bash
# Проверка preset'ов
make presets list
make presets info PRESET=default
# Проверка контейнеров
docker ps -a --filter "network=labnet"
docker network inspect labnet
# Просмотр логов
docker logs -f $(docker ps -aq --filter "network=labnet" | head -1)
```
### Очистка
```bash
# Очистка контейнеров Molecule
make clean-containers
# Очистка образов
make docker clean
# Полная очистка
make docker purge
```
## Полезные команды
### Просмотр информации
```bash
# Список всех ролей
make role list
# Список preset'ов
make presets list
# Информация об образах
make docker info
# Справка по командам
make help
```
### Docker операции
```bash
# Проверка builder'а
make docker check-builder
# Диагностика buildx
make docker diagnose
# Настройка builder'а
make docker setup-builder
# Пересборка образов
make docker rebuild
```
### Vault операции
```bash
# Создание vault
make vault init
# Работа с секретами
make vault create
make vault edit
make vault show
# Проверка vault
make vault check
``` ```
## Заключение ## Заключение
Эти примеры демонстрируют различные способы использования универсальной системы тестирования Ansible ролей. Вы можете: Эти примеры демонстрируют основные возможности AnsibleLab:
1. Использовать готовые preset'ы для быстрого тестирования 1. **Быстрое тестирование** с minimal preset
2. Создавать собственные preset'ы для специфических нужд 2. **Полное тестирование** с all-images preset
3. Комбинировать различные типы контейнеров 3. **Создание ролей** через интерактивные команды
4. Использовать Ansible Vault для безопасности 4. **Работа с Vault** для секретов
5. Тестировать на различных операционных системах 5. **Диагностика** и отладка тестов
6. **Интеграция CI/CD** для автоматизации
Для получения дополнительной информации используйте: Для получения дополнительной информации:
- `make help` - общая справка - Используйте `make help` для списка команд
- `make preset-list` - список preset'ов - Читайте документацию в `docs/` директории
- `make container-types` - типы контейнеров - Изучайте примеры в `roles/docker/`
- `make vault` - команды Vault
---
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru