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