Files
DevOpsLab/docs/universal-testing.md
Сергей Антропов 8b98050861 Обновление документации и конфигурации
- Обновлен README.md в dockerfiles/ с описанием образов
- Улучшен docker-compose.yml для ansible-controller
- Обновлена документация examples.md и universal-testing.md
- Улучшен verify.yml для molecule тестирования
- Добавлены новые функции и исправления

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 15:28:01 +03:00

7.6 KiB
Raw Permalink Blame History

Универсальная система тестирования 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'ов

Использование

Базовые команды

# Показать все 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

Тестирование ролей

# С 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

# Создать файл секретов
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'а

---
# Пресет для тестирования кластера 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. Использование групп

hosts:
  - name: web1
    groups: [web, servers, production]
  - name: db1
    groups: [database, servers, production]

2. Безопасность

# Используйте Ansible Vault для секретов
vault_targets:
  - /ansible/vault/secrets.yml
  - /ansible/files/playbooks/group_vars/*/vault.yml
  - /ansible/files/playbooks/host_vars/*/vault.yml

3. Тестирование

# Проверяйте различные сценарии
- name: Test web servers
  hosts: web
  tasks:
    - name: Check nginx status
      systemd:
        name: nginx
        state: started

Troubleshooting

Проблемы с контейнерами

# Проверить статус контейнеров
make container-info

# Очистить Docker ресурсы
make docker clean

Проблемы с Vault

# Проверить vault файлы
make vault-check

# Найти потенциальные секреты
make vault-scan

Проблемы с preset'ами

# Показать все preset'ы
make preset-list

# Информация о preset'е
make preset-info PRESET=имя_пресета

Заключение

Универсальная система тестирования Ansible ролей предоставляет мощные инструменты для тестирования ролей в различных сценариях. Используйте preset'ы для быстрого создания тестовых сред, различные типы контейнеров для изоляции и Ansible Vault для безопасности.

Для получения дополнительной информации используйте:

  • make help - общая справка
  • make role - команды для ролей
  • make molecule - команды Molecule
  • make vault - команды Vault