# AnsibleTemplate - Универсальная система тестирования Ansible ролей **Автор:** Сергей Антропов **Сайт:** https://devops.org.ru **Версия:** 2.0.0 ## 📋 Описание AnsibleTemplate - это универсальная система для разработки, тестирования и развертывания Ansible ролей с использованием Docker, Molecule и preset конфигураций. Система поддерживает тестирование на различных ОС через Docker контейнеры. ## ✨ Ключевые возможности - **Тестирование ролей** через Molecule с Docker - **Preset система** для быстрого выбора окружений тестирования - **Мультиплатформенное тестирование** (Ubuntu, Debian, CentOS, AlmaLinux, RHEL и другие) - **Автоматическая проверка** синтаксиса Ansible ролей - **Управление секретами** через Ansible Vault - **Готовые Docker образы** для разных ОС ## 📁 Структура проекта ``` AnsibleTemplate/ ├── molecule/ # Конфигурация Molecule │ ├── default/ # Основная конфигурация │ │ ├── create.yml # Создание контейнеров │ │ ├── converge.yml # Запуск тестов │ │ ├── destroy.yml # Удаление контейнеров │ │ ├── site.yml # Основной playbook │ │ └── molecule.yml # Конфигурация Molecule │ └── presets/ # Preset конфигурации │ ├── default.yml # Стандартный preset │ ├── minimal.yml # Минимальный preset │ └── examples/ # Примеры preset'ов ├── roles/ # Ansible роли │ ├── docker/ # Роль установки Docker │ ├── ping/ # Роль для ping проверок │ └── deploy.yml # Playbook для развертывания ├── dockerfiles/ # Docker образы │ └── ansible-controller/ # Ansible контроллер ├── cicd/ # CI/CD конфигурации ├── vault/ # Зашифрованные секреты ├── inventory/ # Инвентори файлы ├── scripts/ # Вспомогательные скрипты ├── docs/ # Документация ├── Makefile # Основные команды └── requirements.yml # Ansible коллекции ``` ## 🚀 Быстрый старт ### 1. Клонирование репозитория ```bash git clone cd AnsibleTemplate ``` ### 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) ### 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'ы | Preset | Описание | Хосты | |--------|----------|-------| | `default` | Стандартный preset | 2 хоста (Ubuntu + CentOS) | | `minimal` | Минимальный preset | 1 хост (Debian) | | `mytest` | Кастомный preset | 3 хоста | ### Создание своего 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 # Просмотр всех ролей ls -1 roles/ # Проверка синтаксиса make role lint # все роли make role lint docker # конкретная роль # Тестирование make role test # default preset make role test minimal # minimal preset ``` ### Управление секретами ```bash # Создание секретов make vault create # Редактирование make vault edit # Просмотр make vault show ``` ### Развертывание ```bash # Развертывание на продакшн make role deploy ``` ## 📖 Документация ### Основная документация - **[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 ### Документация по ролям - **[roles/docker/README.md](roles/docker/README.md)** - Документация роли Docker - **[roles/ping/README.md](roles/ping/README.md)** - Документация роли Ping ### Docker образы - **[dockerfiles/README.md](dockerfiles/README.md)** - Информация об образах ## 🐳 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