- Обновлен README.md в dockerfiles/ с описанием образов - Улучшен docker-compose.yml для ansible-controller - Обновлена документация examples.md и universal-testing.md - Улучшен verify.yml для molecule тестирования - Добавлены новые функции и исправления Автор: Сергей Антропов Сайт: https://devops.org.ru
		
			
				
	
	
		
			426 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			426 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
 | ||
| 
 |