- Убрана подстановка значений по умолчанию для devops_password и devops_ssh_public_key - Добавлена строгая валидация секретов из vault/secrets.yml с детальными сообщениями об ошибках - Убран подробный вывод установки пакетов в тасках - Исправлена проблема с созданием симлинков в vault/ при тестировании - Обновлена логика загрузки vault переменных в molecule тестах - Добавлена очистка симлинков в destroy.yml для дополнительной безопасности Автор: Сергей Антропов Сайт: https://devops.org.ru
		
			
				
	
	
	
		
			7.6 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			7.6 KiB
		
	
	
	
	
	
	
	
Универсальная система тестирования 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/
│       └── run.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