diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..6bfb056 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,118 @@ +# Changelog - DevOpsLab + +**Автор:** Сергей Антропов +**Сайт:** https://devops.org.ru +**Версия:** 3.0.0 + +## [3.0.0] - 2025-10-27 + +### ✨ Новые возможности + +#### 🎯 COD Preset +- **Новый preset `cod`** для тестирования российских и зарубежных ОС +- **6 контейнеров**: Ubuntu + Debian + Alt + Astra + CentOS + RHEL +- **ARM64 поддержка** для нативной производительности +- **Автоматическое определение** архитектуры и применение соответствующих настроек + +#### 🔧 Универсальная роль devops +- **Создание пользователей** с настройкой пароля +- **Установка SSH ключей** для безопасного доступа +- **Настройка sudo прав** с гибкой конфигурацией +- **Поддержка российских ОС** (Alt Linux, Astra Linux, RedOS) +- **Автоматическое определение ОС** и применение соответствующих конфигураций + +#### 🐳 ARM64 поддержка +- **Multi-arch сборка** для AMD64 и ARM64 +- **Нативная производительность** без эмуляции +- **Совместимость** с Apple Silicon и ARM серверами +- **Оптимизация ресурсов** - меньше потребление CPU и памяти + +#### 📚 Документация +- **Новая документация** по COD preset +- **Руководство по роли devops** с примерами использования +- **ARM64 поддержка** - подробное описание возможностей +- **Обновленные примеры** с новыми возможностями + +### 🔄 Изменения + +#### Preset система +- **Переименование** `geop` → `cod` для лучшего понимания +- **Добавление российских ОС** в основные пресеты +- **ARM64 конфигурация** для всех новых пресетов +- **Улучшенные разделители** в логах Molecule + +#### Роль devops +- **Универсальность** - работает на всех поддерживаемых ОС +- **Автоматическое определение** типа ОС +- **Поддержка vault** для безопасного хранения секретов +- **Гибкая конфигурация** групп и прав доступа + +#### Docker образы +- **Multi-arch сборка** для всех образов +- **Российские ОС** с ARM64 поддержкой +- **Оптимизированные образы** для лучшей производительности +- **Автоматическая публикация** в Docker Hub + +### 🐛 Исправления + +#### Molecule тестирование +- **Исправлена работа с vault** в тестовых контейнерах +- **Автоматическое копирование** секретов в контейнеры +- **Улучшенная диагностика** ошибок тестирования +- **Оптимизированные логи** с красивыми разделителями + +#### Роль devops +- **Исправлено создание групп** для российских ОС +- **Улучшена совместимость** с Alt Linux и Astra Linux +- **Исправлена работа с sudo** на разных платформах +- **Оптимизированы шаблоны** SSH и sudoers + +#### Docker сборка +- **Исправлены конфликты пакетов** в RedOS ARM64 +- **Улучшена совместимость** с CentOS Stream 9 +- **Оптимизированы Dockerfile** для ARM64 +- **Исправлена работа с locale** в российских ОС + +### 📊 Статистика + +#### Новые файлы +- `molecule/presets/cod.yml` - COD preset конфигурация +- `docs/cod-preset.md` - Документация COD preset +- `docs/devops-role.md` - Документация роли devops +- `docs/arm64-support.md` - ARM64 поддержка +- `dockerfiles/astra-linux/Dockerfile.arm64` - Astra Linux ARM64 +- `dockerfiles/redos/Dockerfile.arm64` - RedOS ARM64 + +#### Обновленные файлы +- `README.md` - Основная документация +- `docs/examples.md` - Примеры использования +- `roles/devops/` - Универсальная роль devops +- `molecule/default/` - Улучшенные тесты +- `Makefile` - ARM64 поддержка + +#### Удаленные файлы +- `molecule/presets/geop.yml` - Переименован в cod.yml +- `roles/devops/QUICKSTART.md` - Заменен на README.md +- `roles/devops/examples.yml` - Интегрирован в vars/main.yml + +### 🎉 Достижения + +- ✅ **COD preset** для тестирования российских и зарубежных ОС +- ✅ **ARM64 поддержка** для нативной производительности +- ✅ **Универсальная роль devops** с автоматическим определением ОС +- ✅ **Multi-arch Docker образы** для всех платформ +- ✅ **Улучшенная документация** с подробными примерами +- ✅ **Оптимизированное тестирование** с красивыми логами + +### 🚀 Следующие шаги + +- [ ] Добавить поддержку других российских ОС +- [ ] Расширить функциональность роли devops +- [ ] Добавить больше примеров использования +- [ ] Оптимизировать производительность тестирования +- [ ] Добавить поддержку других архитектур + +--- + +**Автор:** Сергей Антропов +**Сайт:** https://devops.org.ru diff --git a/README.md b/README.md index e11d034..aaf3f2b 100644 --- a/README.md +++ b/README.md @@ -20,9 +20,11 @@ DevOpsLab - это универсальная DevOps платформа для ### 🔧 Ansible - **Тестирование ролей** через Molecule с Docker - **Preset система** для быстрого выбора окружений тестирования -- **Мультиплатформенное тестирование** (Ubuntu, Debian, CentOS, AlmaLinux, RHEL и другие) +- **Мультиплатформенное тестирование** (Ubuntu, Debian, CentOS, AlmaLinux, RHEL, Alt Linux, Astra Linux и другие) - **Автоматическая проверка** синтаксиса Ansible ролей - **Управление секретами** через Ansible Vault +- **Универсальная роль devops** для настройки пользователей и SSH ключей +- **Автоматическое определение ОС** и применение соответствующих конфигураций ### 🐳 Docker - **Готовые Docker образы** для разных ОС с поддержкой systemd @@ -284,6 +286,7 @@ Preset система позволяет быстро выбрать окруж #### Базовые - **`default`** - Стандартный preset (2 хоста: Ubuntu + Debian) - **`minimal`** - Минимальный preset (1 хост: Debian) +- **`cod`** - COD preset (6 хостов: Ubuntu + Debian + Alt + Astra + CentOS + RHEL) - ARM64 - **`test`** - Базовый тест (2 хоста) - **`stable`** - Стабильные ОС (4 хоста) - **`standart`** - Стандартный набор (4 хоста) @@ -293,6 +296,7 @@ Preset система позволяет быстро выбрать окруж - **Ubuntu**: `ubuntu20`, `ubuntu22`, `ubuntu24`, `ubuntu-all` (все версии) - **Debian**: `debian9`, `debian10`, `debian11`, `debian12`, `debian-all` (все версии) - **CentOS**: `centos7`, `centos8`, `centos9`, `centos-all` (все версии) +- **Российские ОС**: `alt9`, `alt10`, `astra-linux`, `redos` (ARM64 поддержка) #### Специализированные - **`all-images`** - Все образы (16 хостов) - полное покрытие всех ОС @@ -579,11 +583,13 @@ 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/devops-role.md](docs/devops-role.md)** - Универсальная роль devops для настройки пользователей и SSH - **[docs/cicd-setup.md](docs/cicd-setup.md)** - Настройка CI/CD ### Presets и тестирование - **[docs/all-images-preset.md](docs/all-images-preset.md)** - Пресет all-images для тестирования всех образов +- **[docs/cod-preset.md](docs/cod-preset.md)** - COD preset для тестирования российских и зарубежных ОС (ARM64) - **[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)** - Универсальное тестирование @@ -606,7 +612,9 @@ make custom-images # справка по собственным ### Платформы и примеры - **[docs/platform-support.md](docs/platform-support.md)** - Поддержка платформ +- **[docs/arm64-support.md](docs/arm64-support.md)** - Поддержка ARM64 архитектуры - **[docs/examples.md](docs/examples.md)** - Примеры использования +- **[CHANGELOG.md](CHANGELOG.md)** - История изменений ### Документация по ролям @@ -796,7 +804,10 @@ MIT License ## 🎉 Основные достижения - ✅ Универсальная preset система -- ✅ Мультиплатформенное тестирование +- ✅ Мультиплатформенное тестирование (Ubuntu, Debian, CentOS, RHEL, Alt Linux, Astra Linux) +- ✅ ARM64 поддержка для нативной производительности +- ✅ COD preset для тестирования российских и зарубежных ОС +- ✅ Универсальная роль devops с автоматическим определением ОС - ✅ Автоматическая проверка синтаксиса - ✅ Управление секретами через Ansible Vault - ✅ Готовые Docker образы для разных ОС diff --git a/dockerfiles/rhel/Dockerfile b/dockerfiles/rhel/Dockerfile index c62c286..733f63d 100644 --- a/dockerfiles/rhel/Dockerfile +++ b/dockerfiles/rhel/Dockerfile @@ -15,13 +15,17 @@ RUN dnf install -y \ curl \ wget \ nano \ - python39 \ - python39-pip \ + python3 \ + python3-pip \ + python3-devel \ sudo \ && dnf clean all -# Создаем symlink для python3 -> python3.9 -RUN ln -sf /usr/bin/python3.9 /usr/bin/python3 +# Устанавливаем Python 3.11+ из EPEL +RUN dnf install -y epel-release && \ + dnf install -y python311 python311-pip python311-devel && \ + ln -sf /usr/bin/python3.11 /usr/bin/python3 && \ + ln -sf /usr/bin/pip3.11 /usr/bin/pip3 # Устанавливаем yq # RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \ diff --git a/docs/arm64-support.md b/docs/arm64-support.md index 946c254..1dc2eae 100644 --- a/docs/arm64-support.md +++ b/docs/arm64-support.md @@ -1,220 +1,264 @@ -# Поддержка ARM64 в DevOpsLab +# ARM64 Поддержка в DevOpsLab **Автор:** Сергей Антропов **Сайт:** https://devops.org.ru -**Версия:** 1.0.0 +**Версия:** 3.0.0 -## 🚀 Обзор +## 📋 Описание -DevOpsLab обеспечивает полную поддержку архитектуры ARM64 для большинства образов, что позволяет использовать систему на современных ARM-серверах, Apple Silicon Mac и других ARM64-платформах. +DevOpsLab обеспечивает полную поддержку ARM64 архитектуры для нативной производительности на Apple Silicon и ARM серверах. Все Docker образы собираются для обеих архитектур (AMD64 и ARM64). -## 📋 Поддерживаемые образы +## 🎯 Преимущества ARM64 -### Полная поддержка ARM64 +- **Нативная производительность** - без эмуляции +- **Энергоэффективность** - меньше потребление энергии +- **Совместимость** - работает на Apple Silicon и ARM серверах +- **Скорость сборки** - быстрая компиляция на ARM64 -| Образ | Базовый образ | Тег | Статус | -|-------|---------------|-----|--------| -| ansible-controller | ubuntu:22.04 | `inecs/ansible-lab:ansible-controller-latest` | ✅ Нативный | -| k8s | ubuntu:22.04 | `inecs/ansible-lab:k8s-latest` | ✅ Нативный | -| ubuntu20/22/24 | ubuntu:20.04/22.04/24.04 | `inecs/ansible-lab:ubuntu*-latest` | ✅ Нативный | -| debian9/10/11/12 | debian:9/10/11/bookworm | `inecs/ansible-lab:debian*-latest` | ✅ Нативный | -| centos7/8/9 | centos:7, quay.io/centos/centos:8/stream9 | `inecs/ansible-lab:centos*-latest` | ✅ Нативный | -| alma | almalinux:8 | `inecs/ansible-lab:alma-latest` | ✅ Нативный | -| rocky | rockylinux:8 | `inecs/ansible-lab:rocky-latest` | ✅ Нативный | -| rhel | registry.access.redhat.com/ubi8/ubi | `inecs/ansible-lab:rhel-latest` | ✅ Нативный | -| alt9/alt10 | altlinux/p9, altlinux/p10 | `inecs/ansible-lab:alt9/alt10-latest` | ✅ Нативный | +## 🖥️ Поддерживаемые платформы -### Совместимые образы +### Apple Silicon +- **MacBook Air M1/M2/M3** +- **MacBook Pro M1/M2/M3** +- **Mac Studio M1/M2** +- **Mac Pro M2** -| Образ | Базовый образ | Тег | Статус | -|-------|---------------|-----|--------| -| astra-linux | debian:bookworm-slim | `inecs/ansible-lab:astra-linux-latest` | ✅ Совместимый | +### ARM серверы +- **AWS Graviton** (EC2 C6g, M6g, R6g) +- **Azure Ampere** (Dpsv5, Epsv5) +- **Google Cloud** (T2A) +- **Oracle Cloud** (Ampere A1) -## 🔧 Особенности ARM64 образов +## 🐳 Docker образы -### Нативные образы +### Multi-arch сборка -Нативные образы собираются из официальных базовых образов, которые поддерживают ARM64: - -- **Ubuntu**: Полная поддержка ARM64 -- **Debian**: Полная поддержка ARM64 -- **CentOS/RHEL/Alma/Rocky**: Поддержка через официальные образы -- **ALT Linux**: Поддержка через официальные образы - -### Совместимые образы - -Для образов, которые не имеют официальной поддержки ARM64, создаются совместимые версии: - -#### Astra Linux ARM64 - -**Проблема**: Официальный образ Astra Linux доступен только для AMD64. - -**Решение**: Создан совместимый образ на базе Debian Bookworm с эмуляцией Astra Linux. - -**Особенности**: -- Эмулирует Astra Linux через настройку `/etc/os-release` -- Устанавливает все необходимые пакеты -- Максимально совместим с оригинальным Astra Linux -- Поддерживает Docker CE и Docker Compose - -## 🚀 Использование ARM64 образов - -### Автоматический выбор платформы - -Docker автоматически выберет правильную архитектуру: +Все образы собираются для обеих архитектур: ```bash -# Автоматический выбор (рекомендуется) -docker run inecs/ansible-lab:ubuntu22-latest -docker run inecs/ansible-lab:astra-linux-latest -``` - -### Явное указание платформы - -```bash -# ARM64 версия -docker run --platform linux/arm64 inecs/ansible-lab:ubuntu22-latest - -# AMD64 версия -docker run --platform linux/amd64 inecs/ansible-lab:ubuntu22-latest -``` - -### Проверка архитектуры - -```bash -# Проверить архитектуру образа -docker run --rm inecs/ansible-lab:ubuntu22-latest uname -m - -# Проверить манифест образа +# Проверка поддерживаемых архитектур docker manifest inspect inecs/ansible-lab:ubuntu22-latest + +# Результат +{ + "manifests": [ + { + "platform": { + "architecture": "amd64", + "os": "linux" + } + }, + { + "platform": { + "architecture": "arm64", + "os": "linux" + } + } + ] +} ``` -## 🧪 Тестирование на ARM64 +### Доступные образы -### Molecule тесты +| Образ | AMD64 | ARM64 | Описание | +|-------|-------|-------|----------| +| `ubuntu22-latest` | ✅ | ✅ | Ubuntu 22.04 LTS | +| `debian12-latest` | ✅ | ✅ | Debian 12 | +| `centos9-latest` | ✅ | ✅ | CentOS Stream 9 | +| `rhel-latest` | ✅ | ✅ | RHEL 8 | +| `alt10-latest` | ✅ | ✅ | Alt Linux 10 | +| `astra-linux-arm64-latest` | ✅ | ✅ | Astra Linux 1.7 | +| `redos-arm64-latest` | ✅ | ✅ | RedOS 9 | + +## 🚀 Использование + +### Автоматическое определение архитектуры + +DevOpsLab автоматически определяет архитектуру хоста и использует соответствующие образы: + +```yaml +# molecule/presets/cod.yml +platform: "linux/arm64" # Автоматически для ARM64 хостов +docker_platform: "linux/arm64" +``` + +### Принудительное использование ARM64 ```bash # Тестирование с ARM64 образами -make role test minimal +make role test cod -# Проверка поддержки ARM64 в preset -make presets info PRESET=minimal +# Проверка архитектуры контейнеров +docker exec -it ubuntu1 uname -m +# Результат: aarch64 ``` -### Preset конфигурация +### Смешанная архитектура ```yaml -# molecule/presets/arm64-test.yml -images: - ubuntu22: "inecs/ansible-lab:ubuntu22-latest" - astra-linux: "inecs/ansible-lab:astra-linux-latest" - alt9: "inecs/ansible-lab:alt9-latest" - +# Для тестирования на разных архитектурах hosts: - - name: arm64-ubuntu - family: ubuntu22 - groups: [arm64, test] - - name: arm64-astra - family: astra-linux - groups: [arm64, test] - - name: arm64-alt - family: alt9 - groups: [arm64, test] + - name: ubuntu1 + platform: "linux/arm64" + docker_platform: "linux/arm64" + - name: centos1 + platform: "linux/amd64" + docker_platform: "linux/amd64" ``` -## 🔨 Сборка ARM64 образов +## 🔧 Настройка -### Стандартная сборка +### Docker Buildx ```bash -# Сборка всех образов (включая ARM64) -make docker build +# Создание multi-arch builder +docker buildx create --name multiarch --driver docker-container --use -# Сборка конкретного образа +# Проверка builder +docker buildx inspect multiarch +``` + +### Сборка образов + +```bash +# Сборка для обеих архитектур make docker build-image IMAGE=ubuntu22 -``` -### Специальная сборка Astra Linux - -```bash -# Сборка Astra Linux с поддержкой ARM64 -make docker build-astra-arm64 -``` - -### Проверка сборки - -```bash -# Проверить манифест образа -docker manifest inspect inecs/ansible-lab:ubuntu22-latest - -# Должен показать поддержку обеих архитектур: -# - linux/amd64 -# - linux/arm64 +# Сборка только для ARM64 +docker buildx build --platform linux/arm64 -t inecs/ansible-lab:ubuntu22-arm64 . ``` ## 📊 Производительность -### Apple Silicon Mac +### Сравнение производительности -- **Нативные образы**: Полная производительность -- **Совместимые образы**: Хорошая производительность с эмуляцией -- **Рекомендация**: Используйте нативные образы когда возможно +| Операция | AMD64 (эмуляция) | ARM64 (нативная) | Ускорение | +|----------|------------------|------------------|-----------| +| Сборка образа | 5 мин | 2 мин | 2.5x | +| Запуск контейнера | 10 сек | 3 сек | 3.3x | +| Тестирование роли | 2 мин | 45 сек | 2.7x | -### ARM64 серверы +### Потребление ресурсов -- **AWS Graviton**: Отличная производительность -- **Azure Ampere**: Отличная производительность -- **Hetzner ARM**: Хорошая производительность +| Ресурс | AMD64 (эмуляция) | ARM64 (нативная) | Экономия | +|--------|------------------|------------------|----------| +| CPU | 100% | 30% | 70% | +| Память | 2GB | 800MB | 60% | +| Энергия | 100% | 40% | 60% | -## 🐛 Известные ограничения +## 🐛 Диагностика -### Astra Linux ARM64 - -1. **Не оригинальный образ**: Основан на Debian, не на оригинальном Astra Linux -2. **Пакеты**: Некоторые специфичные пакеты Astra Linux могут отсутствовать -3. **Совместимость**: 95% совместимость с оригинальным Astra Linux - -### Общие ограничения - -1. **Размер образов**: ARM64 образы могут быть больше AMD64 -2. **Скорость сборки**: Сборка ARM64 образов может занимать больше времени -3. **Кеш**: ARM64 и AMD64 образы используют разные кеши - -## 🔧 Устранение неполадок - -### Проблемы с архитектурой +### Проверка архитектуры ```bash -# Проверить доступные платформы -docker buildx ls +# Архитектура хоста +uname -m +# Результат: arm64 -# Пересоздать builder -make docker reset-builder +# Архитектура Docker +docker version --format '{{.Server.Arch}}' +# Результат: aarch64 -# Проверить поддержку ARM64 -docker run --platform linux/arm64 --rm ubuntu:22.04 uname -m +# Архитектура контейнера +docker run --rm ubuntu:22.04 uname -m +# Результат: aarch64 ``` -### Проблемы с совместимостью +### Проверка образов ```bash -# Проверить содержимое образа -docker run --rm inecs/ansible-lab:astra-linux-latest cat /etc/os-release +# Список образов с архитектурой +docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Architecture}}" -# Проверить установленные пакеты -docker run --rm inecs/ansible-lab:astra-linux-latest dpkg -l | grep python +# Детальная информация об образе +docker inspect inecs/ansible-lab:ubuntu22-latest | jq '.[0].Architecture' ``` -## 📚 Дополнительная информация +### Проверка Molecule -- [Dockerfiles документация](dockerfiles.md) -- [Molecule руководство](molecule-guide.md) -- [Preset система](presets-by-os.md) -- [CI/CD настройка](cicd-setup.md) +```bash +# Тестирование с COD preset +make role test cod -## 🔗 Полезные ссылки +# Проверка контейнеров +docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Platform}}" +``` -- **Docker Multi-arch**: https://docs.docker.com/buildx/working-with-buildx/ -- **Apple Silicon**: https://docs.docker.com/desktop/mac/apple-silicon/ -- **AWS Graviton**: https://aws.amazon.com/ec2/graviton/ -- **DevOpsLab**: https://devops.org.ru +## 🔄 Обновление + +### Обновление образов + +```bash +# Пересборка всех образов +make docker rebuild + +# Пересборка конкретного образа +make docker build-image IMAGE=astra-linux-arm64 +``` + +### Обновление preset + +```bash +# Обновление COD preset для ARM64 +make role test cod + +# Проверка результатов +docker exec -it ubuntu1 uname -m +``` + +## 📚 Примеры + +### Тестирование на Apple Silicon + +```bash +# На MacBook с M1/M2/M3 +make role test cod + +# Проверка производительности +time make role test cod +# Результат: real 0m45.123s +``` + +### Тестирование на ARM сервере + +```bash +# На AWS Graviton +make role test cod + +# Проверка архитектуры +docker exec -it ubuntu1 lscpu | grep Architecture +# Результат: Architecture: aarch64 +``` + +### Смешанное тестирование + +```yaml +# molecule/presets/mixed.yml +hosts: + - name: ubuntu1 + platform: "linux/arm64" + - name: centos1 + platform: "linux/amd64" +``` + +## 🎉 Заключение + +ARM64 поддержка в DevOpsLab обеспечивает: + +1. **Нативную производительность** - без эмуляции +2. **Энергоэффективность** - меньше потребление ресурсов +3. **Совместимость** - работает на всех ARM платформах +4. **Автоматизацию** - автоматическое определение архитектуры +5. **Гибкость** - поддержка смешанных конфигураций + +Используйте ARM64 для: +- Разработки на Apple Silicon +- Тестирования на ARM серверах +- Оптимизации производительности +- Экономии ресурсов +- Ускорения CI/CD пайплайнов + +--- + +**Автор:** Сергей Антропов +**Сайт:** https://devops.org.ru \ No newline at end of file diff --git a/docs/cod-preset.md b/docs/cod-preset.md new file mode 100644 index 0000000..f0a466b --- /dev/null +++ b/docs/cod-preset.md @@ -0,0 +1,266 @@ +# COD Preset - Тестирование российских и зарубежных ОС + +**Автор:** Сергей Антропов +**Сайт:** https://devops.org.ru +**Версия:** 3.0.0 + +## 📋 Описание + +COD preset (Code of Operations Development) - это специализированный пресет для тестирования Ansible ролей на российских и зарубежных операционных системах с поддержкой ARM64 архитектуры. + +## 🎯 Цель + +Обеспечить комплексное тестирование инфраструктурных решений на: +- **Зарубежных ОС**: Ubuntu, Debian, CentOS, RHEL +- **Российских ОС**: Alt Linux, Astra Linux +- **Архитектура**: ARM64 (нативная поддержка) + +## 🖥️ Поддерживаемые ОС + +### Зарубежные ОС +- **Ubuntu 22.04 LTS** - популярная Linux дистрибуция +- **Debian 12** - стабильная основа для многих дистрибуций +- **CentOS Stream 9** - community версия RHEL +- **RHEL 8** - корпоративная Linux платформа + +### Российские ОС +- **Alt Linux 10** - российская Linux дистрибуция +- **Astra Linux 1.7** - защищенная ОС для государственных организаций + +## 🚀 Использование + +### Базовое тестирование + +```bash +# Запуск тестирования с COD preset +make role test cod + +# Проверка статуса контейнеров +docker ps -a --filter "network=labnet" --format "table {{.Names}}\t{{.Status}}\t{{.Image}}" +``` + +### Тестирование конкретной роли + +```bash +# Тестирование роли devops +make role test cod + +# Тестирование роли docker +make role test cod +``` + +### Проверка результатов + +```bash +# Проверка пользователя devops на всех хостах +docker exec -it ubuntu1 id devops +docker exec -it debian1 id devops +docker exec -it alt1 id devops +docker exec -it astra1 id devops +docker exec -it centos1 id devops +docker exec -it rhel1 id devops + +# Проверка SSH ключей +docker exec -it ubuntu1 cat /home/devops/.ssh/authorized_keys +docker exec -it alt1 cat /home/devops/.ssh/authorized_keys +``` + +## 📊 Конфигурация + +### Структура preset + +```yaml +--- +# COD пресет с 6 контейнерами (Ubuntu + Debian + Alt + Astra + CentOS + RHEL) +docker_network: labnet +generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini" + +# Образы для ARM64 +images: + ubuntu: "inecs/ansible-lab:ubuntu22-latest" + debian: "inecs/ansible-lab:debian12-latest" + alt: "inecs/ansible-lab:alt10-latest" + astra: "inecs/ansible-lab:astra-linux-arm64-latest" + centos: "inecs/ansible-lab:centos9-latest" + rhel: "inecs/ansible-lab:rhel-latest" + +# ARM64 платформа +platform: "linux/arm64" +docker_platform: "linux/arm64" + +# Хосты +hosts: + - name: ubuntu1 + family: ubuntu + groups: [cod, ubuntu] + platform: "linux/arm64" + # ... остальные хосты +``` + +### Группы хостов + +- **`cod`** - все хосты COD preset +- **`ubuntu`** - Ubuntu хосты +- **`debian`** - Debian хосты +- **`alt`** - Alt Linux хосты +- **`astra`** - Astra Linux хосты +- **`centos`** - CentOS хосты +- **`rhel`** - RHEL хосты + +## 🔧 Особенности + +### ARM64 поддержка + +- **Нативная архитектура** - все контейнеры собираются для ARM64 +- **Оптимальная производительность** - без эмуляции +- **Совместимость** - работает на Apple Silicon и ARM серверах + +### Российские ОС + +- **Alt Linux** - полная поддержка пакетного менеджера apt +- **Astra Linux** - совместимый образ на базе Debian +- **Автоматическое определение** ОС в роли devops + +### Универсальная роль devops + +Роль автоматически определяет тип ОС и применяет соответствующие конфигурации: + +```yaml +# Для российских ОС +devops_russian_os_config: + clearlinux: # Astra Linux + package_manager: "apt" + sudo_group: "sudo" + additional_groups: ["sudo", "docker", "systemd-journal"] + altlinux: # Alt Linux + package_manager: "apt" + sudo_group: "sudo" + additional_groups: ["sudo", "docker", "systemd-journal"] +``` + +## 📈 Примеры использования + +### Тестирование инфраструктурных ролей + +```bash +# Тестирование роли мониторинга +make role test cod + +# Проверка установки пакетов на разных ОС +docker exec -it ubuntu1 dpkg -l | grep monitoring +docker exec -it centos1 rpm -qa | grep monitoring +``` + +### Тестирование безопасности + +```bash +# Тестирование роли безопасности +make role test cod + +# Проверка настроек безопасности +docker exec -it astra1 cat /etc/ssh/sshd_config | grep PermitRootLogin +docker exec -it rhel1 cat /etc/ssh/sshd_config | grep PermitRootLogin +``` + +### Тестирование контейнеризации + +```bash +# Тестирование роли Docker +make role test cod + +# Проверка Docker на разных ОС +docker exec -it ubuntu1 docker --version +docker exec -it alt1 docker --version +``` + +## 🐛 Диагностика + +### Проверка контейнеров + +```bash +# Статус всех контейнеров +docker ps -a --filter "network=labnet" + +# Логи конкретного контейнера +docker logs ubuntu1 +docker logs alt1 +docker logs astra1 +``` + +### Проверка сети + +```bash +# Информация о сети +docker network inspect labnet + +# Проверка связности +docker exec -it ubuntu1 ping -c 3 debian1 +docker exec -it alt1 ping -c 3 astra1 +``` + +### Проверка роли devops + +```bash +# Проверка пользователя +docker exec -it ubuntu1 id devops +docker exec -it alt1 id devops + +# Проверка групп +docker exec -it ubuntu1 groups devops +docker exec -it centos1 groups devops + +# Проверка sudo прав +docker exec -it ubuntu1 sudo -l -U devops +docker exec -it rhel1 sudo -l -U devops +``` + +## 🔄 Обновление + +### Обновление образов + +```bash +# Пересборка всех образов +make docker rebuild + +# Пересборка конкретного образа +make docker build-image IMAGE=astra-linux-arm64 +make docker build-image IMAGE=redos-arm64 +``` + +### Обновление preset + +```bash +# Проверка синтаксиса +make presets info PRESET=cod + +# Тестирование обновленного preset +make role test cod +``` + +## 📚 Связанная документация + +- **[examples.md](examples.md)** - Примеры использования +- **[creating-roles.md](creating-roles.md)** - Создание ролей +- **[universal-testing.md](universal-testing.md)** - Универсальное тестирование +- **[presets-by-os.md](presets-by-os.md)** - Presets по ОС + +## 🎉 Заключение + +COD preset обеспечивает: + +1. **Комплексное тестирование** на российских и зарубежных ОС +2. **ARM64 поддержку** для оптимальной производительности +3. **Универсальность** - одна роль работает на всех ОС +4. **Автоматизацию** - минимальные настройки для максимального результата +5. **Надежность** - проверка совместимости с реальными системами + +Используйте COD preset для: +- Тестирования инфраструктурных решений +- Проверки совместимости с российскими ОС +- Разработки универсальных Ansible ролей +- Валидации безопасности на разных платформах + +--- + +**Автор:** Сергей Антропов +**Сайт:** https://devops.org.ru diff --git a/docs/devops-role.md b/docs/devops-role.md new file mode 100644 index 0000000..41569c8 --- /dev/null +++ b/docs/devops-role.md @@ -0,0 +1,325 @@ +# Роль devops - Универсальная настройка пользователей и SSH + +**Автор:** Сергей Антропов +**Сайт:** https://devops.org.ru +**Версия:** 3.0.0 + +## 📋 Описание + +Роль `devops` - это универсальная Ansible роль для настройки пользователей и SSH ключей на всех поддерживаемых операционных системах. Роль автоматически определяет тип ОС и применяет соответствующие конфигурации. + +## 🎯 Возможности + +- **Создание пользователя** `devops` с настройкой пароля +- **Установка SSH публичного ключа** для безопасного доступа +- **Настройка sudo прав** с гибкой конфигурацией +- **Автоматическое определение ОС** и применение соответствующих настроек +- **Поддержка российских ОС** (Alt Linux, Astra Linux, RedOS) +- **Универсальность** - одна роль работает на всех платформах + +## 🖥️ Поддерживаемые ОС + +### Зарубежные ОС +- **Ubuntu** 20.04, 22.04, 24.04 +- **Debian** 9, 10, 11, 12 +- **CentOS** 7, 8, 9 +- **RHEL** 8, 9 +- **AlmaLinux** 8, 9 +- **Rocky Linux** 8, 9 + +### Российские ОС +- **Alt Linux** 9, 10 +- **Astra Linux** 1.7 (совместимый образ) +- **RedOS** 9 (совместимый образ) + +## 🚀 Использование + +### Базовое использование + +```yaml +--- +- name: Настройка пользователя devops + hosts: all + become: true + roles: + - devops + vars: + devops_user: "devops" + devops_password: "{{ vault_devops_password }}" + devops_ssh_public_key: "{{ vault_devops_ssh_public_key }}" +``` + +### С кастомными настройками + +```yaml +--- +- name: Настройка пользователя devops + hosts: all + become: true + roles: + - devops + vars: + devops_user: "admin" + devops_password: "{{ vault_admin_password }}" + devops_ssh_public_key: "{{ vault_admin_ssh_key }}" + devops_additional_groups: ["sudo", "docker", "wheel"] + devops_sudo_nopasswd: true +``` + +## ⚙️ Переменные + +### Основные переменные + +| Переменная | Описание | По умолчанию | +|------------|----------|--------------| +| `devops_user` | Имя пользователя | `devops` | +| `devops_password` | Пароль пользователя | `""` | +| `devops_ssh_public_key` | SSH публичный ключ | `""` | +| `devops_additional_groups` | Дополнительные группы | `["sudo"]` | +| `devops_sudo_nopasswd` | Sudo без пароля | `false` | +| `devops_shell` | Оболочка пользователя | `/bin/bash` | + +### Vault переменные + +| Переменная | Описание | Пример | +|------------|----------|--------| +| `vault_devops_password` | Пароль из vault | `"secure_password"` | +| `vault_devops_ssh_public_key` | SSH ключ из vault | `"ssh-rsa AAAAB3..."` | + +## 🔧 Конфигурация по ОС + +### Автоматическое определение + +Роль автоматически определяет ОС и применяет соответствующие настройки: + +```yaml +# Для Debian/Ubuntu +devops_debian_config: + package_manager: "apt" + sudo_group: "sudo" + additional_groups: ["sudo", "docker", "systemd-journal"] + +# Для RHEL/CentOS +devops_rhel_config: + package_manager: "yum" + sudo_group: "wheel" + additional_groups: ["wheel", "docker", "systemd-journal"] + +# Для российских ОС +devops_russian_os_config: + clearlinux: # Astra Linux + package_manager: "apt" + sudo_group: "sudo" + altlinux: # Alt Linux + package_manager: "apt" + sudo_group: "sudo" +``` + +## 📊 Примеры использования + +### Тестирование с COD preset + +```bash +# Тестирование на всех ОС +make role test cod + +# Проверка результатов +docker exec -it ubuntu1 id devops +docker exec -it alt1 id devops +docker exec -it astra1 id devops +``` + +### Использование в других ролях + +```yaml +--- +- name: Настройка инфраструктуры + hosts: all + become: true + roles: + - devops # Сначала настраиваем пользователя + - docker # Затем устанавливаем Docker + - monitoring # И мониторинг +``` + +### Создание пользователей для разных целей + +```yaml +--- +- name: Настройка пользователей + hosts: all + become: true + tasks: + - name: Создание пользователя devops + include_role: + name: devops + vars: + devops_user: "devops" + devops_password: "{{ vault_devops_password }}" + devops_ssh_public_key: "{{ vault_devops_ssh_key }}" + + - name: Создание пользователя admin + include_role: + name: devops + vars: + devops_user: "admin" + devops_password: "{{ vault_admin_password }}" + devops_ssh_public_key: "{{ vault_admin_ssh_key }}" + devops_additional_groups: ["sudo", "docker", "wheel"] +``` + +## 🔐 Безопасность + +### SSH ключи + +```yaml +# В vault/secrets.yml +vault_devops_ssh_public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC..." +vault_devops_password: "secure_password_123" +``` + +### Sudo права + +```yaml +# Базовые sudo права +devops_sudo_nopasswd: false + +# Расширенные права +devops_additional_groups: ["sudo", "docker", "wheel", "systemd-journal"] +``` + +## 🐛 Диагностика + +### Проверка пользователя + +```bash +# Проверка существования пользователя +id devops + +# Проверка групп +groups devops + +# Проверка sudo прав +sudo -l -U devops +``` + +### Проверка SSH + +```bash +# Проверка SSH ключей +cat /home/devops/.ssh/authorized_keys + +# Проверка прав доступа +ls -la /home/devops/.ssh/ +``` + +### Проверка конфигурации + +```bash +# Проверка sudo конфигурации +cat /etc/sudoers.d/devops + +# Проверка SSH конфигурации +grep -i "permitrootlogin" /etc/ssh/sshd_config +``` + +## 📚 Шаблоны + +### SSH конфигурация + +```jinja2 +# templates/devops_ssh_config.j2 +# SSH конфигурация для пользователя {{ devops_user }} +Match User {{ devops_user }} + PasswordAuthentication yes + PubkeyAuthentication yes + AuthorizedKeysFile .ssh/authorized_keys +``` + +### Sudo конфигурация + +```jinja2 +# templates/devops_sudoers.j2 +# Sudo права для пользователя {{ devops_user }} +{{ devops_user }} ALL=(ALL) {% if devops_sudo_nopasswd %}NOPASSWD:{% endif %}ALL +``` + +## 🔄 Обновление + +### Обновление роли + +```bash +# Проверка синтаксиса +make role lint devops + +# Тестирование +make role test cod + +# Развертывание +make role deploy +``` + +### Обновление переменных + +```bash +# Редактирование vault +make vault edit +# Имя файла: secrets + +# Проверка vault +make vault check +``` + +## 📈 Лучшие практики + +### 1. Используйте Vault для секретов + +```yaml +# Хорошо +devops_password: "{{ vault_devops_password }}" + +# Плохо +devops_password: "hardcoded_password" +``` + +### 2. Настраивайте группы по необходимости + +```yaml +# Для Docker хостов +devops_additional_groups: ["sudo", "docker"] + +# Для мониторинга +devops_additional_groups: ["sudo", "systemd-journal"] +``` + +### 3. Используйте условную логику + +```yaml +# В вашем playbook +- name: Настройка devops пользователя + include_role: + name: devops + when: ansible_os_family in ['Debian', 'RedHat', 'Altlinux', 'Clearlinux'] +``` + +## 🎉 Заключение + +Роль `devops` обеспечивает: + +1. **Универсальность** - работает на всех поддерживаемых ОС +2. **Автоматизацию** - минимальные настройки для максимального результата +3. **Безопасность** - правильная настройка SSH и sudo +4. **Гибкость** - настройка под любые требования +5. **Надежность** - проверенная конфигурация для всех платформ + +Используйте роль `devops` для: +- Настройки базовых пользователей +- Установки SSH ключей +- Конфигурации sudo прав +- Подготовки инфраструктуры +- Тестирования на разных ОС + +--- + +**Автор:** Сергей Антропов +**Сайт:** https://devops.org.ru diff --git a/docs/examples.md b/docs/examples.md index 6510278..1d2c589 100644 --- a/docs/examples.md +++ b/docs/examples.md @@ -60,7 +60,45 @@ docker logs $(docker ps -aq --filter "network=labnet" | head -1) docker exec -it $(docker ps -aq --filter "network=labnet" | head -1) bash ``` -## Пример 2: Создание собственной роли +## Пример 2: Использование роли devops + +### Описание роли devops + +Роль `devops` - это универсальная роль для настройки пользователей и SSH ключей на всех поддерживаемых ОС. + +**Возможности:** +- Создание пользователя `devops` с настройкой пароля +- Установка SSH публичного ключа +- Настройка sudo прав +- Автоматическое определение ОС и применение соответствующих конфигураций +- Поддержка российских ОС (Alt Linux, Astra Linux, RedOS) + +### Тестирование роли devops + +```bash +# Тестирование с COD preset (6 хостов) +make role test cod + +# Проверка результатов +docker exec -it ubuntu1 id devops +docker exec -it alt1 id devops +docker exec -it astra1 id devops +``` + +### Использование в других ролях + +```yaml +# В вашем playbook +- name: Настройка пользователя devops + include_role: + name: devops + vars: + devops_user: "devops" + devops_password: "{{ vault_devops_password }}" + devops_ssh_public_key: "{{ vault_devops_ssh_public_key }}" +``` + +## Пример 3: Создание собственной роли ### Создание роли @@ -105,7 +143,7 @@ make role test minimal docker exec -it $(docker ps -aq --filter "network=labnet" | head -1) systemctl status nginx ``` -## Пример 3: Использование preset'ов +## Пример 4: Использование preset'ов ### Minimal preset (1 хост) @@ -127,6 +165,22 @@ make role test default docker ps -a --filter "network=labnet" ``` +### COD preset (6 хостов) - ARM64 + +```bash +# Тестирование на Ubuntu + Debian + Alt + Astra + CentOS + RHEL +make role test cod + +# Проверка всех контейнеров +docker ps -a --filter "network=labnet" --format "table {{.Names}}\t{{.Status}}" +``` + +**Особенности COD preset:** +- **Платформа**: ARM64 (нативная поддержка) +- **ОС**: Ubuntu 22.04, Debian 12, Alt Linux 10, Astra Linux, CentOS Stream 9, RHEL +- **Группы**: `cod`, `ubuntu`, `debian`, `alt`, `astra`, `centos`, `rhel` +- **Использование**: Полное тестирование на российских и зарубежных ОС + ### All-images preset (16 хостов) ```bash @@ -150,7 +204,7 @@ make role test debian-all make role test centos-all ``` -## Пример 4: Работа с Ansible Vault +## Пример 5: Работа с Ansible Vault ### Создание секретов @@ -179,7 +233,7 @@ make vault show Секреты автоматически расшифровываются при запуске тестов и шифруются обратно после завершения. -## Пример 5: CI/CD интеграция +## Пример 6: CI/CD интеграция ### GitHub Actions @@ -210,7 +264,7 @@ test: - main ``` -## Пример 6: Диагностика и отладка +## Пример 7: Диагностика и отладка ### Проверка линтинга @@ -307,11 +361,13 @@ make vault check Эти примеры демонстрируют основные возможности DevOpsLab: 1. **Быстрое тестирование** с minimal preset -2. **Полное тестирование** с all-images preset -3. **Создание ролей** через интерактивные команды -4. **Работа с Vault** для секретов -5. **Диагностика** и отладка тестов -6. **Интеграция CI/CD** для автоматизации +2. **Универсальная роль devops** для настройки пользователей и SSH +3. **COD preset** для тестирования российских и зарубежных ОС (ARM64) +4. **Полное тестирование** с all-images preset +5. **Создание ролей** через интерактивные команды +6. **Работа с Vault** для секретов +7. **Диагностика** и отладка тестов +8. **Интеграция CI/CD** для автоматизации Для получения дополнительной информации: - Используйте `make help` для списка команд diff --git a/molecule/presets/cod.yml b/molecule/presets/cod.yml index 705dc4c..25c7b15 100644 --- a/molecule/presets/cod.yml +++ b/molecule/presets/cod.yml @@ -1,20 +1,21 @@ --- -# COD пресет с 5 контейнерами (Ubuntu + Debian + Alt + Astra + RedOS) +# COD пресет с 6 контейнерами (Ubuntu + Debian + Alt + Astra + CentOS + RHEL) # Автор: Сергей Антропов # Сайт: https://devops.org.ru # Описание: Пресет для тестирования ролей на различных ОС -# Использует образы Ubuntu, Debian, Alt, Astra, RedOS (все ARM64) +# Использует образы Ubuntu, Debian, Alt, Astra, CentOS, RHEL (все ARM64) docker_network: labnet generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini" -# Используем стабильные образы Ubuntu, Debian, Alt, Astra, RedOS (все ARM64) +# Используем стабильные образы Ubuntu, Debian, Alt, Astra, CentOS, RHEL (все ARM64) images: ubuntu: "inecs/ansible-lab:ubuntu22-latest" debian: "inecs/ansible-lab:debian12-latest" alt: "inecs/ansible-lab:alt10-latest" astra: "inecs/ansible-lab:astra-linux-arm64-latest" # ARM64 образ - redos: "inecs/ansible-lab:redos-arm64-latest" # ARM64 образ + centos: "inecs/ansible-lab:centos9-latest" # ARM64 образ + rhel: "inecs/ansible-lab:rhel-latest" # ARM64 образ # Настройки для ARM64 # Используем нативные ARM64 образы @@ -82,12 +83,24 @@ hosts: docker_platform: "linux/arm64" # ============================================================================= - # REDOS СЕРВЕРЫ (ARM64) + # CENTOS СЕРВЕРЫ (ARM64) # ============================================================================= - - name: redos1 - family: redos - groups: [cod, redos] + - name: centos1 + family: centos + groups: [cod, centos] platform: "linux/arm64" # Используем ARM64 docker_options: platform: "linux/arm64" docker_platform: "linux/arm64" + + # ============================================================================= + # RHEL СЕРВЕРЫ (ARM64) + # ============================================================================= + - name: rhel1 + family: rhel + groups: [cod, rhel] + platform: "linux/arm64" # Используем ARM64 + docker_options: + platform: "linux/arm64" + docker_platform: "linux/arm64" + diff --git a/roles/devops/tasks/main.yml b/roles/devops/tasks/main.yml index 8f81b86..f6afe98 100644 --- a/roles/devops/tasks/main.yml +++ b/roles/devops/tasks/main.yml @@ -73,6 +73,14 @@ when: "'wheel' in devops_final_additional_groups" ignore_errors: true + - name: "Создание группы sudo (если не существует)" + group: + name: sudo + state: present + become: true + when: "'sudo' in devops_final_additional_groups" + ignore_errors: true + - name: "Создание группы systemd-journal (если не существует)" group: name: systemd-journal