Сергей Антропов 4ed9c2e0eb
Some checks failed
Ansible Testing / lint (push) Has been cancelled
Ansible Testing / test (default) (push) Has been cancelled
Ansible Testing / test (minimal) (push) Has been cancelled
Ansible Testing / test (performance) (push) Has been cancelled
Ansible Testing / deploy-check (push) Has been cancelled
feat: добавлена поддержка создания и удаления контейнеров из пресета
- Добавлено создание контейнеров из секции hosts в create_k8s_cluster.py
- Добавлено удаление контейнеров в команде make k8s destroy
- Создан скрипт scripts/delete_hosts.py для удаления контейнеров
- Контейнеры автоматически создаются в Docker сети из пресета
- Контейнеры удаляются вместе с Kind кластером при make k8s destroy
2025-10-26 08:23:43 +03:00
2025-03-18 17:25:06 +03:00

AnsibleLab - Универсальная система тестирования Ansible ролей

Автор: Сергей Антропов
Сайт: https://devops.org.ru
Версия: 3.0.0

📋 Описание

AnsibleLab - это универсальная система для разработки, тестирования и развертывания Ansible ролей с использованием Docker, Molecule и preset конфигураций. Система поддерживает тестирование на различных ОС через Docker контейнеры.

Ключевые возможности

  • Тестирование ролей через Molecule с Docker
  • Preset система для быстрого выбора окружений тестирования
  • Мультиплатформенное тестирование (Ubuntu, Debian, CentOS, AlmaLinux, RHEL и другие)
  • Автоматическая проверка синтаксиса Ansible ролей
  • Управление секретами через Ansible Vault
  • Готовые Docker образы для разных ОС
  • Kubernetes Kind кластеры для тестирования в среде Kubernetes
  • Автоматическая установка аддонов (Istio, Prometheus, Grafana, Kiali и другие)

📁 Структура проекта

AnsibleLab/
├── molecule/                    # Конфигурация Molecule
│   ├── default/                 # Основная конфигурация
│   │   ├── create.yml           # Создание контейнеров
│   │   ├── converge.yml         # Запуск тестов
│   │   ├── destroy.yml          # Удаление контейнеров
│   │   ├── site.yml             # Основной playbook
│   │   ├── verify.yml           # Проверка конфигурации
│   │   └── molecule.yml         # Конфигурация Molecule
│   └── presets/                 # Preset конфигурации
│       ├── default.yml          # Стандартный preset
│       ├── minimal.yml          # Минимальный preset
│       ├── mytest.yml           # Кастомный preset
│       ├── presets.yml          # Основные preset'ы
│       └── examples/            # Примеры preset'ов
│           ├── all-images.yml   # Все образы (16 хостов)
│           ├── multi-os.yml     # Multi-OS тестирование
│           ├── performance.yml  # Тест производительности
│           ├── security.yml     # Тест безопасности
│           └── ...
├── roles/                       # Ansible роли
│   ├── docker/                  # Роль установки Docker
│   ├── devops/                  # Роль DevOps инструментов
│   ├── ping/                    # Роль для ping проверок
│   └── deploy.yml               # Playbook для развертывания
├── dockerfiles/                 # Docker образы
│   ├── ansible-controller/      # Ansible контроллер
│   ├── ubuntu20/                # Ubuntu 20.04
│   ├── ubuntu22/                # Ubuntu 22.04
│   ├── ubuntu24/                # Ubuntu 24.04
│   ├── debian9/                 # Debian 9
│   ├── debian10/                # Debian 10
│   ├── debian11/                # Debian 11
│   ├── debian12/                # Debian 12
│   ├── centos7/                 # CentOS 7
│   ├── centos8/                 # CentOS 8
│   ├── centos9/                 # CentOS 9
│   ├── alma/                    # AlmaLinux 8
│   ├── rocky/                   # Rocky Linux 8
│   ├── rhel/                    # RHEL 8
│   ├── alt-linux/               # ALT Linux P9
│   ├── astra-linux/             # Astra Linux 1.7
│   └── redos/                   # RED OS 9
├── cicd/                        # CI/CD конфигурации
│   ├── azure-devops/            # Azure DevOps
│   ├── github/                  # GitHub Actions
│   ├── gitlab/                  # GitLab CI
│   └── jenkins/                 # Jenkins
├── vault/                       # Зашифрованные секреты
├── inventory/                   # Инвентори файлы
├── scripts/                     # Вспомогательные скрипты
├── docs/                        # Документация
├── Makefile                     # Основные команды
└── requirements.yml             # Ansible коллекции

🚀 Быстрый старт

1. Клонирование репозитория

git clone <repository-url>
cd AnsibleLab

2. Тестирование ролей

# Тестирование с default preset (2 хоста)
make role test

# Тестирование с минимальным preset (1 хост)
make role test minimal

# Тестирование с кастомным preset
make role test my-custom-preset

3. Проверка синтаксиса

# Проверка всех ролей
make role lint

# Проверка конкретной роли
make role lint docker
make role lint ping

📚 Доступные роли

Docker

Универсальная роль для установки Docker и Docker Compose на различных Linux-дистрибутивах.

Поддерживаемые ОС:

  • Debian 9/10/11/12
  • Ubuntu 20.04/22.04/24.04
  • CentOS 7/8/9
  • AlmaLinux 8/9
  • Rocky Linux 8/9
  • RHEL 8/9

Пример использования:

- hosts: all
  roles:
    - role: docker
      vars:
        docker_users:
          - ansible
          - deploy

Подробная документация: roles/docker/README.md

DevOps

Роль для установки и настройки инструментов DevOps.

Подробная документация: roles/devops/README.md

Ping

Роль для выполнения ping проверок подключения к сети.

Пример использования:

- hosts: all
  roles:
    - role: ping
      vars:
        ping_host: google.com
        ping_count: 10

Подробная документация: roles/ping/README.md

🧪 Preset система

Preset система позволяет быстро выбрать окружение для тестирования.

Доступные preset'ы

Базовые

  • default - Стандартный preset (2 хоста: Ubuntu + Debian)
  • minimal - Минимальный preset (1 хост: Debian)
  • test - Базовый тест (2 хоста)
  • stable - Стабильные ОС (4 хоста)
  • standart - Стандартный набор (4 хоста)
  • mytest - Кастомный preset (3 хоста)

По ОС

  • Ubuntu: ubuntu20, ubuntu22, ubuntu24, ubuntu-all (все версии)
  • Debian: debian9, debian10, debian11, debian12, debian-all (все версии)
  • CentOS: centos7, centos8, centos9, centos-all (все версии)

Специализированные

  • all-images - Все образы (16 хостов) - полное покрытие всех ОС
  • multi-os - Multi-OS тестирование (8 хостов разных ОС)
  • docker-full - Docker тестирование (4 хоста)
  • docker-test - Базовое Docker тестирование (2 хоста)
  • etcd-patroni - ETCD + Patroni кластер (4 хоста)
  • performance - Тест производительности (8 хостов)
  • security - Тест безопасности (6 хостов)

Создание своего preset

Создайте файл molecule/presets/my-preset.yml:

---
#description: Мой кастомный preset
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"

images:
  ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
  centos9: "inecs/ansible-lab:centos9-latest"

systemd_defaults:
  privileged: true
  command: "/sbin/init"
  volumes:
    - "/sys/fs/cgroup:/sys/fs/cgroup:rw"
  tmpfs: ["/run", "/run/lock"]
  capabilities: ["SYS_ADMIN"]

hosts:
  - name: web1
    family: ubuntu22
    groups: [web, test]
  - name: db1
    family: centos9
    groups: [database, test]

Используйте preset:

make role test my-preset

🔐 Управление секретами

Ansible Vault

# Создание секретного файла
make vault create

# Редактирование секретов
make vault edit

# Просмотр секретов
make vault show

# Шифрование файла
make vault encrypt

# Расшифровка файла
make vault decrypt

🚀 Развертывание

Тестирование (Docker контейнеры)

# Тестирование с разными preset'ами
make role test                    # default preset
make role test minimal           # minimal preset

Развертывание на реальные серверы

# Развертывание на продакшн
make role deploy

Инвентори для продакшн находится в файле inventory/hosts.ini:

# inventory/hosts.ini
[web_servers]
web1.example.com ansible_host=192.168.1.10

[db_servers]
db1.example.com ansible_host=192.168.1.20

[all:vars]
ansible_user=devops
ansible_ssh_private_key_file=~/.ssh/id_rsa

🔧 Основные команды

Управление ролями

# Список всех ролей
make role list                    # показать все роли
ls -1 roles/                      # альтернативный способ

# Создание новой роли
make role create                  # интерактивное создание роли

# Удаление роли
make role delete                  # интерактивное удаление роли

# Проверка синтаксиса (Linting)
make role lint                    # проверить все роли
make role lint docker             # проверить конкретную роль
make role lint ping               # пример проверки одной роли

# Тестирование ролей
make role test                    # тест с default preset
make role test minimal           # тест с minimal preset
make role test all-images        # тест со всеми образами
make role test etcd-patroni      # тест с кастомным preset

# Развертывание на продакшн
make role deploy                  # развернуть роли на реальные серверы

Управление Preset'ами

# Просмотр доступных preset'ов
make presets list                 # показать все preset'ы

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

# Тестирование с preset'ом
make presets test PRESET=minimal         # запустить тест с preset'ом

Управление секретами (Vault)

# Инициализация vault
make vault init                   # создать vault/.vault с паролем

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

# Редактирование
make vault edit                   # редактировать существующие секреты

# Просмотр
make vault show                   # показать содержимое секретов

# Удаление
make vault delete                 # удалить файл секретов

# Шифрование/расшифровка
make vault encrypt                # зашифровать файл
make vault decrypt                # расшифровать файл
make vault rekey                  # сменить пароль шифрования

# Проверка и аудит
make vault check                  # проверить vault файлы
make vault scan                   # поиск потенциальных секретов

Управление Git

# Отправка изменений
make git push                     # git add . && git commit && git push

# Получение изменений
make git pull                     # git pull origin main

# Создание ветки
make git new                      # создать новую ветку

Управление Docker образами

# Подготовка к работе
make docker prepare               # показать registry, version, список образов

# Сборка образов
make docker build                 # собрать все образы (multi-arch)
make docker build-image IMAGE=centos7    # собрать отдельный образ
make docker rebuild               # полная пересборка с очисткой кеша

# Работа с Docker Hub
make docker push                  # отправить образы в Docker Hub
make docker pull                  # загрузить образы из Docker Hub

# Очистка
make docker clean                 # удалить локальные образы и кеш
make docker clean-builder         # очистка multi-arch builder
make docker purge                 # ПОЛНАЯ очистка Docker (осторожно!)

# Информация
make docker info                  # информация о собранных образах
make docker update                # обновить все образы (pull + build + push)

# Управление builder'ом
make docker setup-builder         # настройка multi-arch builder
make docker diagnose              # диагностика buildx проблем
make docker reset-builder         # сброс buildx builder

Управление Ansible Controller

# Сборка и запуск
make controller build             # собрать ansible-controller (multi-arch)
make controller rebuild           # пересобрать с исправлениями
make controller run               # запустить ansible-controller
make controller stop              # остановить ansible-controller

Собственные образы для тестирования

# Тестирование с собственными образами
make custom-images test minimal          # минимальный тест (4 хоста)
make custom-images test full             # полный тест (все образы)
make custom-images test performance      # тест производительности (8 хостов)

# Проверка наличия образов
make custom-images check                 # проверить наличие собственных образов

# Сборка образов
make custom-images build                 # собрать все образы для тестирования

Автоматизация

# Обновление playbook'ов
make update-playbooks             # обновление при добавлении ролей

# Генерация документации
make generate-docs                # генерация документации для ролей

# Настройка CI/CD
make setup-cicd                   # настройка CI/CD для всех платформ

Очистка

# Очистка контейнеров Molecule
make clean-containers             # удалить контейнеры Molecule

# Очистка Docker
make docker clean                 # удалить образы и кеш
make docker clean-builder         # очистить builder
make docker purge                 # ПОЛНАЯ очистка Docker

Справка

# Основная справка
make help                         # показать общую справку

# Детальная справка по командам
make role                         # справка по работе с ролями
make presets                      # справка по preset'ам
make vault                        # справка по vault
make docker                       # справка по docker
make controller                   # справка по controller
make custom-images                # справка по собственным образам

📖 Документация

Основная документация

Presets и тестирование

Развертывание и конфигурация

Безопасность и качество

Мониторинг и диагностика

Платформы и примеры

Документация по ролям

Docker образы

Kubernetes

🐳 Docker образы

Проект использует готовые Docker образы для различных ОС:

  • Ubuntu 20.04, 22.04, 24.04
  • Debian 9, 10, 11, 12
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • RHEL 8, 9

Все образы с поддержкой systemd для корректной работы служб.

🛠️ Разработка новых ролей

Создание структуры роли

mkdir -p roles/my-role/{tasks,handlers,templates,files,vars,defaults,meta}
touch roles/my-role/{tasks,handlers,meta}/main.yml
touch roles/my-role/defaults/main.yml

Основные файлы

tasks/main.yml:

---
- name: Пример задачи
  debug:
    msg: "Роль my-role выполнена"

defaults/main.yml:

---
# Переменные по умолчанию
my_role_enabled: true
my_role_version: "1.0.0"

README.md:

# Роль My-Role

Описание роли...

Тестирование новой роли

# Проверка синтаксиса
make role lint my-role

# Тестирование
make role test

🏗️ CI/CD

Проект поддерживает интеграцию с различными CI/CD системами:

  • GitHub Actions - готовые workflow'ы
  • Azure DevOps - pipeline конфигурации
  • Jenkins - pipeline скрипты
  • GitLab CI - интеграция

Подробнее в docs/cicd-setup.md

📊 Требования

  • Docker - для контейнеризации
  • Docker Compose - для оркестрации
  • Ansible >= 2.9
  • Molecule >= 3.0
  • Python >= 3.6

🎯 Поддерживаемые ОС

Для тестирования (Docker)

  • Ubuntu 20.04/22.04/24.04
  • Debian 9/10/11/12
  • CentOS 7/8/9
  • AlmaLinux 8/9
  • Rocky Linux 8/9
  • RHEL 8/9

Для развертывания

  • Любые Linux системы с SSH доступом

🤝 Вклад в проект

  1. Fork репозитория
  2. Создайте feature branch (git checkout -b feature/amazing-feature)
  3. Commit изменения (git commit -m 'Add amazing feature')
  4. Push в branch (git push origin feature/amazing-feature)
  5. Создайте Pull Request

📄 Лицензия

MIT License

📞 Поддержка

При возникновении проблем:

  1. Проверьте наличие Docker
  2. Убедитесь, что все preset файлы существуют
  3. Используйте make role lint для проверки синтаксиса
  4. Проверьте логи тестирования

🎉 Основные достижения

  • Универсальная preset система
  • Мультиплатформенное тестирование
  • Автоматическая проверка синтаксиса
  • Управление секретами через Ansible Vault
  • Готовые Docker образы для разных ОС
  • CI/CD интеграция
  • Kubernetes Kind кластеры для тестирования

Автор: Сергей Антропов
Сайт: https://devops.org.ru

Description
DevOpsLab - это универсальная DevOps платформа для разработки, тестирования и развертывания инфраструктуры. Система объединяет Ansible роли, Docker контейнеры и Kubernetes кластеры в единую среду для автоматизации и управления инфраструктурой.
https://devops.org.ru
Readme 2.6 MiB
Languages
Makefile 46.6%
Dockerfile 21.3%
Python 19.5%
Shell 12.6%