Files
DevOpsLab/docs/examples.md
Сергей Антропов 696e08aa35 feat: Реорганизация Makefile и добавление Docker образов
- Реорганизован Makefile:
  * Переменные вынесены наверх
  * Справка перенесена в конец
  * Удалены секции molecule и container
  * Объединены presets и preset в одну секцию
  * Переименована секция docker в docker-cmd

- Добавлены Docker образы:
  * ansible-controller - основной контроллер
  * alt-linux, astra-linux, redos - российские дистрибутивы
  * rhel, centos, alma, rocky - RHEL-совместимые образы

- Обновлены preset'ы:
  * Добавлены описания #description: во все preset'ы
  * Переименован docker.yml в docker-test.yml
  * Добавлены новые preset'ы: etcd-patroni, multi-os

- Добавлена документация:
  * docs/examples.md - примеры использования
  * docs/universal-testing.md - универсальное тестирование
  * dockerfiles/README.md - описание Docker образов

- Улучшена функциональность:
  * Единообразный стиль команд make [категория] [действие]
  * Улучшенный вывод информации о preset'ах
  * Добавлены пустые цели для совместимости
2025-10-25 11:29:37 +03:00

10 KiB
Raw Blame History

Примеры использования универсальной системы тестирования

Пример 1: Тестирование кластера etcd + PostgreSQL + Patroni

Описание

Этот пример демонстрирует тестирование высокодоступного кластера PostgreSQL с Patroni и etcd.

Preset: etcd-patroni

# 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"]

Запуск тестирования

# Информация о preset'е
make preset-info PRESET=etcd-patroni

# Тестирование с preset'ом
make preset-test PRESET=etcd-patroni

# Или через role test
make role test etcd-patroni

Проверка результатов

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

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

Пример 2: Нагрузочное тестирование

Описание

Этот пример демонстрирует тестирование под нагрузкой с множественными серверами и кэшем.

Preset: performance

# 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"]

Запуск тестирования

# Тестирование с performance preset'ом
make role test performance

# Проверка статуса
make container-info

Пример 3: Тестирование безопасности

Описание

Этот пример демонстрирует тестирование в безопасной среде с bastion хостами и изоляцией.

Preset: security

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

Запуск тестирования

# Тестирование с security preset'ом
make role test security

# Проверка безопасности
make vault-check
make vault-scan

Пример 4: Тестирование на разных ОС

Описание

Этот пример демонстрирует тестирование на различных операционных системах.

Preset: multi-os

# 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"]

Запуск тестирования

# Тестирование с multi-os preset'ом
make role test multi-os

# Проверка типов контейнеров
make container-types

Пример 5: Создание собственного preset'а

Описание

Этот пример демонстрирует создание собственного preset'а для специфических нужд.

Создание preset'а

# Создать новый 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'а

# Информация о 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 файла

# Создать файл секретов
make vault create

# Ввести имя файла: secrets
# Ввести содержимое:
# ---
# database_password: "super_secret_password"
# api_key: "your_api_key_here"
# ssl_cert: "your_ssl_certificate"

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

# 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 }}"

Проверка безопасности

# Проверить 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