Files
DevOpsLab/README.md
Сергей Антропов c1655d2674
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
chore: обновлена версия проекта с 2.0.0 на 3.0.0
- Обновлена версия в README.md
- Обновлена версия во всех файлах docs/
- Обновлена версия в dockerfiles/README.md
- Обновлена версия в roles/*/QUICKSTART.md
- Подготовка к версии 3.0.0 с Kubernetes поддержкой

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 01:36:54 +03:00

627 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 образы** для разных ОС
## 📁 Структура проекта
```
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. Клонирование репозитория
```bash
git clone <repository-url>
cd AnsibleLab
```
### 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