# DevOpsLab - Универсальная система тестирования Ansible ролей **Автор:** Сергей Антропов **Сайт:** https://devops.org.ru **Версия:** 2.0.0 ## 📋 Описание DevOpsLab - это универсальная система для разработки, тестирования и развертывания Ansible ролей с использованием Docker, Molecule и preset конфигураций. Система поддерживает тестирование на различных ОС через Docker контейнеры. ## ✨ Ключевые возможности - **Тестирование ролей** через Molecule с Docker - **Preset система** для быстрого выбора окружений тестирования - **Мультиплатформенное тестирование** (Ubuntu, Debian, CentOS, AlmaLinux, RHEL и другие) - **Автоматическая проверка** синтаксиса Ansible ролей - **Управление секретами** через Ansible Vault - **Готовые Docker образы** для разных ОС ## 📁 Структура проекта ``` DevOpsLab/ ├── 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 │ ├── alt9/ # 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. Клонирование репозитория ```bash git clone cd DevOpsLab ``` ### 2. Тестирование ролей ```bash # Тестирование с default preset (2 хоста) make role test # Тестирование с минимальным preset (1 хост) make role test minimal # Тестирование с кастомным preset make role test my-custom-preset ``` ### 3. Проверка синтаксиса ```bash # Проверка всех ролей 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 **Пример использования:** ```yaml - hosts: all roles: - role: docker vars: docker_users: - ansible - deploy ``` **Подробная документация:** [roles/docker/README.md](roles/docker/README.md) ### DevOps Роль для установки и настройки инструментов DevOps. **Подробная документация:** [roles/devops/README.md](roles/devops/README.md) ### Ping Роль для выполнения ping проверок подключения к сети. **Пример использования:** ```yaml - hosts: all roles: - role: ping vars: ping_host: google.com ping_count: 10 ``` **Подробная документация:** [roles/ping/README.md](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`: ```yaml --- #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: ```bash make role test my-preset ``` ## 🔐 Управление секретами ### Ansible Vault ```bash # Создание секретного файла make vault create # Редактирование секретов make vault edit # Просмотр секретов make vault show # Шифрование файла make vault encrypt # Расшифровка файла make vault decrypt ``` ## 🚀 Развертывание ### Тестирование (Docker контейнеры) ```bash # Тестирование с разными preset'ами make role test # default preset make role test minimal # minimal preset ``` ### Развертывание на реальные серверы ```bash # Развертывание на продакшн make role deploy ``` **Инвентори для продакшн** находится в файле `inventory/hosts.ini`: ```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 ``` ## 🔧 Основные команды ### Управление ролями ```bash # Список всех ролей 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'ами ```bash # Просмотр доступных preset'ов make presets list # показать все preset'ы # Информация о preset'е make presets info PRESET=etcd-patroni # подробная информация # Тестирование с preset'ом make presets test PRESET=minimal # запустить тест с preset'ом ``` ### Управление секретами (Vault) ```bash # Инициализация 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 ```bash # Отправка изменений make git push # git add . && git commit && git push # Получение изменений make git pull # git pull origin main # Создание ветки make git new # создать новую ветку ``` ### Управление Docker образами ```bash # Подготовка к работе 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 ```bash # Сборка и запуск make controller build # собрать ansible-controller (multi-arch) make controller rebuild # пересобрать с исправлениями make controller run # запустить ansible-controller make controller stop # остановить ansible-controller ``` ### Собственные образы для тестирования ```bash # Тестирование с собственными образами 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 # собрать все образы для тестирования ``` ### Автоматизация ```bash # Обновление playbook'ов make update-playbooks # обновление при добавлении ролей # Генерация документации make generate-docs # генерация документации для ролей # Настройка CI/CD make setup-cicd # настройка CI/CD для всех платформ ``` ### Очистка ```bash # Очистка контейнеров Molecule make clean-containers # удалить контейнеры Molecule # Очистка Docker make docker clean # удалить образы и кеш make docker clean-builder # очистить builder make docker purge # ПОЛНАЯ очистка Docker ``` ### Справка ```bash # Основная справка make help # показать общую справку # Детальная справка по командам make role # справка по работе с ролями make presets # справка по preset'ам make vault # справка по vault make docker # справка по docker make controller # справка по controller make custom-images # справка по собственным образам ``` ## 📖 Документация ### Основная документация - **[docs/getting-started.md](docs/getting-started.md)** - Быстрый старт - **[docs/molecule-guide.md](docs/molecule-guide.md)** - Руководство по Molecule - **[docs/creating-roles.md](docs/creating-roles.md)** - Создание ролей - **[docs/cicd-setup.md](docs/cicd-setup.md)** - Настройка CI/CD ### Presets и тестирование - **[docs/all-images-preset.md](docs/all-images-preset.md)** - Пресет all-images для тестирования всех образов - **[docs/presets-by-os.md](docs/presets-by-os.md)** - Presets по операционным системам - **[docs/testing-vs-deployment.md](docs/testing-vs-deployment.md)** - Различия между тестированием и развертыванием - **[docs/universal-testing.md](docs/universal-testing.md)** - Универсальное тестирование ### Развертывание и конфигурация - **[docs/site-yml-guide.md](docs/site-yml-guide.md)** - Руководство по файлу site.yml - **[docs/deploy-yml-customization.md](docs/deploy-yml-customization.md)** - Полное руководство по кастомизации deploy.yml ### Безопасность и качество - **[docs/vault-guide.md](docs/vault-guide.md)** - Работа с Ansible Vault - **[docs/linting-guide.md](docs/linting-guide.md)** - Руководство по линтингу ролей ### Мониторинг и диагностика - **[docs/monitoring.md](docs/monitoring.md)** - Мониторинг, диагностика и troubleshooting - **[docs/buildx-fixes.md](docs/buildx-fixes.md)** - Исправление проблем с Docker Buildx ### Платформы и примеры - **[docs/platform-support.md](docs/platform-support.md)** - Поддержка платформ - **[docs/examples.md](docs/examples.md)** - Примеры использования ### Документация по ролям - **[roles/docker/README.md](roles/docker/README.md)** - Документация роли Docker - **[roles/devops/README.md](roles/devops/README.md)** - Документация роли DevOps - **[roles/ping/README.md](roles/ping/README.md)** - Документация роли Ping ### Docker образы - **[docs/dockerfiles.md](docs/dockerfiles.md)** - Полная документация по Docker образам ## 🐳 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 для корректной работы служб. ## 🛠️ Разработка новых ролей ### Создание структуры роли ```bash 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:** ```yaml --- - name: Пример задачи debug: msg: "Роль my-role выполнена" ``` **defaults/main.yml:** ```yaml --- # Переменные по умолчанию my_role_enabled: true my_role_version: "1.0.0" ``` **README.md:** ```markdown # Роль My-Role Описание роли... ``` ### Тестирование новой роли ```bash # Проверка синтаксиса 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](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 интеграция --- **Автор:** Сергей Антропов **Сайт:** https://devops.org.ru