# Примеры использования универсальной системы тестирования ## Пример 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