- Заменено название проекта во всех файлах проекта - Обновлены: * README.md * Makefile * Все файлы документации (.md) * CI/CD конфигурации (Jenkins, GitLab, GitHub Actions, Azure DevOps) * Скрипты (setup-cicd.sh, test-custom-images.sh) * Файлы конфигурации Molecule - Изменена переменная PROJECT_NAME в Makefile на devops-lab - Docker образы inecs/ansible-lab:* оставлены без изменений (чтобы не затрагивать существующие образы в Docker Hub)
634 lines
23 KiB
Markdown
634 lines
23 KiB
Markdown
# DevOpsLab - Универсальная система тестирования Ansible ролей
|
||
|
||
**Автор:** Сергей Антропов
|
||
**Сайт:** https://devops.org.ru
|
||
**Версия:** 3.0.0
|
||
|
||
## 📋 Описание
|
||
|
||
DevOpsLab - это универсальная система для разработки, тестирования и развертывания Ansible ролей с использованием Docker, Molecule и preset конфигураций. Система поддерживает тестирование на различных ОС через Docker контейнеры.
|
||
|
||
## ✨ Ключевые возможности
|
||
|
||
- **Тестирование ролей** через Molecule с Docker
|
||
- **Preset система** для быстрого выбора окружений тестирования
|
||
- **Мультиплатформенное тестирование** (Ubuntu, Debian, CentOS, AlmaLinux, RHEL и другие)
|
||
- **Автоматическая проверка** синтаксиса Ansible ролей
|
||
- **Управление секретами** через Ansible Vault
|
||
- **Готовые Docker образы** для разных ОС
|
||
- **Kubernetes Kind кластеры** для тестирования в среде Kubernetes
|
||
- **Автоматическая установка аддонов** (Istio, Prometheus, Grafana, Kiali и другие)
|
||
|
||
## 📁 Структура проекта
|
||
|
||
```
|
||
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
|
||
│ ├── 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. Клонирование репозитория
|
||
|
||
```bash
|
||
git clone <repository-url>
|
||
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 образам
|
||
|
||
### Kubernetes
|
||
|
||
- **[docs/kubernetes-kind.md](docs/kubernetes-kind.md)** - Документация по работе с Kind кластерами
|
||
|
||
## 🐳 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 интеграция
|
||
- ✅ Kubernetes Kind кластеры для тестирования
|
||
|
||
---
|
||
|
||
**Автор:** Сергей Антропов
|
||
**Сайт:** https://devops.org.ru |