165 Commits

Author SHA1 Message Date
Сергей Антропов
d4b0d6f848 Исправление синтаксической ошибки в molecule_executor.py и обновление k8s preset'ов
- Исправлена незакрытая скобка в _build_test_command (строка 745)
- Добавлена поддержка k8s preset'ов: выполнение create_k8s_cluster.py перед create.yml
- Обновлены образы в k8s preset'ах: заменен недоступный ghcr.io/ansible-community/molecule-ubuntu-systemd:jammy на inecs/ansible-lab:ubuntu22-latest
- Обновлены preset'ы в базе данных через SQL
- Обновлены файлы: k8s-single.yml, k8s-multi.yml, k8s-istio-full.yml
2026-02-16 00:31:09 +03:00
Сергей Антропов
1fbf9185a2 feat: добавлена пометка типа операции (Build/Push) в истории сборок Dockerfile
- Добавлена колонка 'Тип' во все таблицы истории сборок
- Для push операций отображается registry вместо платформ
- Сохранение пользователя при создании push лога
- Исправлена ошибка с logger в push_docker_image endpoint
- Улучшено отображение истории сборок с визуальными индикаторами
2026-02-15 22:59:02 +03:00
Сергей Антропов
23e1a6037b Добавлена роль repo для автоматического добавления репозиториев
- Создана новая роль repo для добавления репозиториев на все ОС
- Добавлена поддержка Docker, PostgreSQL, Elasticsearch, Patroni репозиториев
- Реализована специальная поддержка российских дистрибутивов:
  - Astra Linux: добавлены репозитории Lab50 и debian-archive-keyring
  - Alt Linux: добавлены репозитории Sisyphus (alt-sisyphus, classic, contrib) и Autoimports
- Обновлена документация README.md с информацией о новой роли
- Обновлен .ansible-lint для подавления необходимых правил
- Автор: Сергей Антропов, https://devops.org.ru
2025-10-30 03:13:35 +03:00
Сергей Антропов
a2316ae780 тестый шифрования пройдены 2025-10-30 01:29:41 +03:00
Сергей Антропов
25d04188b8 тест шифрования при пуше 2025-10-30 01:26:48 +03:00
Сергей Антропов
981ede5c94 Обновление проекта 2025-10-30 01:10:35 +03:00
Сергей Антропов
2ce450215b feat: убран подробный вывод установки пакетов в run.yml
- Добавлен no_log: true для всех задач установки common tools
- Добавлен no_log: true для всех задач установки Python
- Теперь задачи показывают 'censored' вместо подробного вывода
- Улучшена читаемость логов тестирования

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-29 18:59:57 +03:00
Сергей Антропов
cb5045fb79 feat: улучшения роли devops и тестирования
- Убрана подстановка значений по умолчанию для devops_password и devops_ssh_public_key
- Добавлена строгая валидация секретов из vault/secrets.yml с детальными сообщениями об ошибках
- Убран подробный вывод установки пакетов в тасках
- Исправлена проблема с созданием симлинков в vault/ при тестировании
- Обновлена логика загрузки vault переменных в molecule тестах
- Добавлена очистка симлинков в destroy.yml для дополнительной безопасности

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-29 18:53:52 +03:00
Сергей Антропов
f6d1182193 Обновление проекта 2025-10-28 19:19:49 +03:00
Сергей Антропов
0b4efd9ca1 feat: Добавлена роль Python 3.12 и восстановлена роль Docker
- Создана универсальная роль Python для установки Python 3.12 на всех ОС
- Восстановлена роль Docker из git истории
- Исправлены все ошибки линтера
- Обновлен deploy.yml с правильным порядком ролей: devops → python → docker
- Удалена устаревшая роль ping
- Добавлена поддержка альтернативных репозиториев для старых ОС

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-27 22:08:37 +03:00
Сергей Антропов
1b6db7445d docs: Обновление документации и исправление RHEL образа
- Обновлен README.md с новыми возможностями COD preset и роли devops
- Добавлена документация по COD preset (docs/cod-preset.md)
- Добавлена документация по роли devops (docs/devops-role.md)
- Обновлена документация по ARM64 поддержке (docs/arm64-support.md)
- Обновлены примеры использования (docs/examples.md)
- Исправлен Dockerfile для RHEL с Python 3.11 из EPEL
- Обновлен COD preset с 6 контейнерами (Ubuntu + Debian + Alt + Astra + CentOS + RHEL)
- Улучшена роль devops с поддержкой российских ОС
- Добавлен CHANGELOG.md с историей изменений
- Все изменения протестированы на ARM64 архитектуре
2025-10-27 20:27:45 +03:00
Сергей Антропов
5ea320ce9a Обновление проекта 2025-10-27 20:06:32 +03:00
Сергей Антропов
d7397fe7fe Обновление проекта 2025-10-27 19:43:49 +03:00
Сергей Антропов
5543ae4d27 feat: Переименование geop в cod и добавление ARM64 поддержки
- Переименован пресет geop.yml в cod.yml
- Обновлены все группы с geop на cod
- Добавлена поддержка ARM64 для Astra Linux и RedOS
- Создан Dockerfile.arm64 для RedOS с исправлением конфликтов пакетов
- Улучшены разделители в логах Molecule
- Зашифрован файл vault/secrets.yml
- Обновлена роль devops с поддержкой vault
- Добавлены шаблоны для SSH и sudoers конфигураций
2025-10-27 19:43:26 +03:00
Сергей Антропов
c66bb35f97 feat: Добавлена поддержка ARM64 для Astra Linux и обновлена документация
- Создан совместимый образ Astra Linux для ARM64 на базе Debian
- Добавлена команда make docker build-astra-arm64 для сборки ARM64 версии
- Обновлена документация по Docker образам с информацией о ARM64 поддержке
- Создан новый файл docs/arm64-support.md с подробным описанием ARM64 поддержки
- Обновлен README.md с информацией о multi-arch поддержке
- Добавлена информация о ALT Linux P9/P10 с поддержкой ARM64

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-27 14:16:29 +03:00
Сергей Антропов
c83b2526dc feat: настроен nano как редактор по умолчанию для vault команд
- Добавлена глобальная переменная EDITOR=nano в Makefile
- Обновлены команды vault (create, edit, rekey) для использования nano
- Обновлена справка с указанием использования nano
- Теперь make vault edit открывает nano вместо vim

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-27 12:32:03 +03:00
Сергей Антропов
c3ba139d45 Перемещены пресеты k8s в подпапку molecule/presets/k8s/ 2025-10-27 11:44:15 +03:00
Сергей Антропов
6d06dbf745 Merge branch 'k8s' 2025-10-27 11:28:00 +03:00
Сергей Антропов
3953650f25 Удалена автоматическая очистка port-forward из make k8s destroy 2025-10-27 11:26:53 +03:00
Сергей Антропов
98af514e2c Merge k8s в main: добавлена поддержка Kubernetes Kind кластеров 2025-10-27 11:21:45 +03:00
Сергей Антропов
28ab44e6a6 Добавлен .dockerignore с .github, удалена папка .github из репозитория 2025-10-27 11:18:46 +03:00
Сергей Антропов
8734519be2 Обновлен Makefile: добавлены alt9/alt10, исправлен redos, добавлена поддержка AMD64 для astra-linux и redos
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
2025-10-27 11:16:50 +03:00
Сергей Антропов
d02dd1f9e2 Восстановлены пресеты для Kubernetes
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
2025-10-27 10:48:43 +03:00
Сергей Антропов
d37f59ba77 Переименование проекта AnsibleLab в DevOpsLab
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
2025-10-27 10:46:04 +03:00
Сергей Антропов
fbf6c3e813 Исправлено: make docker pull теперь корректно обрабатывает astra-linux и redos для ARM64
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
2025-10-27 10:38:06 +03:00
Сергей Антропов
5169310c35 Исправлено определение тега для redos в docker-get-base-tag
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
2025-10-27 09:59:07 +03:00
Сергей Антропов
50bfff11c7 Добавлен alt10 во все пресеты с ALT Linux 2025-10-27 09:58:16 +03:00
Сергей Антропов
f5b13436a7 Добавлены alt9 и alt10 вместо alt-linux во все файлы 2025-10-27 09:57:01 +03:00
Сергей Антропов
13a294a20c Переименование alt-linux в alt9 и добавление alt10 2025-10-27 09:53:14 +03:00
Сергей Антропов
37ff18c91b Обновлена документация dockerfiles/README.md: добавлен образ k8s, обновлена структура и нумерация
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
Ansible Testing / lint (pull_request) Has been cancelled
Ansible Testing / test (default) (pull_request) Has been cancelled
Ansible Testing / test (minimal) (pull_request) Has been cancelled
Ansible Testing / test (performance) (pull_request) Has been cancelled
Ansible Testing / deploy-check (pull_request) Has been cancelled
2025-10-26 12:54:59 +03:00
Сергей Антропов
4e86b7f0c3 Обновлена документация dockerfiles.md: добавлен образ k8s, обновлена структура и матрица совместимости
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
2025-10-26 12:51:30 +03:00
Сергей Антропов
85b68dc4d0 Обновлена структура проекта в README.md
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
2025-10-26 12:48:28 +03:00
Сергей Антропов
a56de6183a docs: обновлено описание проекта DevOpsLab с учетом K8s
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
- Расширено описание проекта - теперь это DevOps платформа
- Добавлены ключевые компоненты: Ansible, Docker, Kubernetes
- Структурированы возможности по категориям:
  * Ansible (автоматизация)
  * Docker (контейнеризация)
  * Kubernetes (оркестрация)
- Добавлен раздел быстрого старта для K8s
- Расширен раздел Kubernetes с:
  * Основными командами
  * Доступными аддонами
  * Путями доступа к сервисам
2025-10-26 12:44:20 +03:00
Сергей Антропов
d8e1052e7b refactor: переименование проекта AnsibleLab -> DevOpsLab
- Заменено название проекта во всех файлах проекта
- Обновлены:
  * 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)
2025-10-26 12:28:05 +03:00
Сергей Антропов
c2ab17b7b6 chore: удален неиспользуемый скрипт portforward_container.py
- Скрипт был экспериментальным решением для запуска port-forward в контейнере
- Итоговое решение: использование portforward.py напрямую на хосте
- Скрипт не использовался ни в Makefile, ни в документации
2025-10-26 12:25:26 +03:00
Сергей Антропов
c2a84a3aee refactor: удалено автоматическое создание port-forward
- Удалено автоматическое создание port-forward при создании кластера
- Port-forward теперь создается только вручную через make k8s portforward create
- Команда list уже доступна в help
- Обновлены сообщения с подсказками
2025-10-26 11:57:06 +03:00
Сергей Антропов
0ffe1f1a90 refactor: удален скрипт manage_hosts.py и все упоминания
- Удален скрипт scripts/manage_hosts.py
- Удалены все вызовы из Makefile
- Удалены упоминания из документации
- Обновлена документация по Ingress - теперь требуется ручное добавление в /etc/hosts
- Убрано автоматическое управление /etc/hosts (не состоятельное решение)
2025-10-26 11:56:14 +03:00
Сергей Антропов
df7473fbd9 fix: исправлена проблема с пробросом портов Ingress
- Исправлена логика добавления extraPortMappings в конфигурацию Kind
- Порты 80 и 443 теперь правильно пробрасываются на host (8081, 8443)
- Создана документация k8s-ingress-fix.md с инструкциями
2025-10-26 10:58:37 +03:00
Сергей Антропов
eca556cca7 docs: полная переработка документации по Kubernetes
- Создана подробная документация по скриптам (k8s-scripts.md)
- Полностью переписана документация kubernetes-kind.md
- Добавлено содержание с навигацией
- Добавлены разделы: Helm, манифесты, Ingress, port-forward
- Добавлена архитектура взаимодействия
- Добавлены Best Practices и Troubleshooting
- Обновлена справка в Makefile
- Удалены устаревшие команды (manifest update, addon)
- Добавлена ссылка на документацию по скриптам
2025-10-26 10:23:16 +03:00
Сергей Антропов
fcf3f33e80 feat: добавлен детальный отчет о состоянии кластера
- Создан скрипт scripts/k8s_status.py для детального отчета
- Показывает: узлы, namespaces, pods, deployments, daemonsets,
  statefulsets, services, ingress, PVC, события, Helm релизы
- Исправлена проблема с подключением kubectl (используется
  прямой адрес control-plane)
- Команда make k8s status теперь показывает полный отчет
2025-10-26 10:16:24 +03:00
Сергей Антропов
6ef4090fb2 feat: добавлено автоматическое обновление Ingress хостов во всех операциях
- Обновлен вызов скрипта: sudo scripts/manage_hosts.py вместо sudo python3
- Добавлено обновление хостов после:
  - make k8s manifest delete
  - make k8s manifest update
  - make k8s helm delete
- Теперь хосты автоматически обновляются при любых изменениях Ingress
- Применен тестовый манифест grafana-ingress
2025-10-26 10:14:00 +03:00
Сергей Антропов
9677aea281 feat: автоматическое обновление Ingress хостов при изменениях
- Добавлен вызов manage_hosts.py после:
  - make k8s manifest apply
  - make k8s addon
  - make k8s helm apply
  - make k8s helm update
- Создан тестовый манифест grafana-ingress
- Автоматическое обновление /etc/hosts при любых изменениях Ingress
2025-10-26 10:06:41 +03:00
Сергей Антропов
fd80db220a feat: автоматическое управление Ingress хостами в /etc/hosts
- Добавлен скрипт scripts/manage_hosts.py для управления /etc/hosts
- Автоматическое добавление Ingress хостов при создании кластера
- Автоматическое удаление Ingress хостов при удалении кластера
- Записи помечаются меткой #k8s для разделения со статическими
- Команды: add, remove, cleanup, list
2025-10-26 10:03:59 +03:00
Сергей Антропов
4ca882b5f7 docs: добавлены примеры доступа к приложениям и кроссплатформенность
- Добавлен раздел 'Доступ к приложениям'
- Описан доступ через Ingress с примерами hosts файла
- Описан доступ через ClusterIP с ручным port-forward
- Добавлен раздел 'Кроссплатформенность' для macOS и Linux
- Добавлены примеры работы с пользовательскими приложениями
2025-10-26 09:59:41 +03:00
Сергей Антропов
3b8c6e52ea docs: обновлена документация Kubernetes Kind
- Добавлен раздел 'Требования к системе' (Python 3, kubectl)
- Описан автоматический port-forward
- Добавлены все команды Helm (apply, delete, update, rollback, list, status)
- Добавлены команды управления Helm репозиториями
- Добавлены команды работы с манифестами
- Обновлены примеры использования
- Добавлен раздел Troubleshooting для port-forward
- Обновлена архитектура с учетом port-forward
- Добавлены порты Ingress и Metrics Server
2025-10-26 09:58:50 +03:00
Сергей Антропов
02eab55d73 feat: автоматический port-forward при создании/удалении кластера
- Port-forward создается автоматически при make k8s create
- Port-forward очищается автоматически при make k8s destroy
2025-10-26 09:55:49 +03:00
Сергей Антропов
e3d393ef91 refactor: убраны команды контейнера port-forward, используется локальный подход
- Удалены команды container-start, container-stop, container-restart, container-status, container-logs
- Оставлены только локальные команды: create, list, clear, recreate, delete
- Port-forward работает локально через Python и kubectl на хосте
- Упрощена справка
2025-10-26 09:51:35 +03:00
Сергей Антропов
6d55f924e5 feat: добавлены команды управления контейнером port-forward в make k8s portforward
- Добавлены команды: container-start, container-stop, container-restart, container-status, container-logs
- Локальные команды: create, list, clear, recreate, delete
- Команды контейнера работают через k8s-controller
- Обновлена справка с описанием всех команд
2025-10-26 09:49:50 +03:00
Сергей Антропов
69a589974e wip: попытка запускать port-forward через k8s-controller (требуется доработка) 2025-10-26 09:48:51 +03:00
Сергей Антропов
3238b3903a feat: добавлен контейнер k8s-portforward для порт-форвардинга
- Создан Dockerfile для контейнера порт-форвардинга
- Скрипт portforward-container.py работает внутри контейнера
- Скрипт portforward_container.py управляет контейнером с хоста
- Контейнер автоматически пробрасывает порты через -p
- Контейнер подключается к сети Kind для доступа к кластеру
- Добавлен k8s-portforward в docker-get-base-tag
2025-10-26 09:48:05 +03:00
Сергей Антропов
ab1231fce5 feat: добавлен базовый контейнер для port-forward (не используется, требуется доработка) 2025-10-26 09:45:57 +03:00
Сергей Антропов
44fff158ce feat: добавлены порты Ingress (80, 443) в port-forward
- Добавлен port-forward для Ingress HTTP на порт 8081 (localhost:8081 -> ingress-nginx-controller:80)
- Добавлен port-forward для Ingress HTTPS на порт 8443 (localhost:8443 -> ingress-nginx-controller:443)
- Теперь все аддоны доступны через port-forward: Ingress, Prometheus, Grafana, Kiali, Metrics Server
2025-10-26 09:40:47 +03:00
Сергей Антропов
604c7816be feat: port-forward теперь работает на локальном компьютере
- Скрипт получает kubeconfig из контейнера k8s-controller
- Заменяет server 0.0.0.0 на localhost для локального доступа
- Port-forward запускается на хосте через локальный kubectl
- Все аддоны доступны на localhost: Grafana 3000, Prometheus 9090, Kiali 20001
2025-10-26 09:39:20 +03:00
Сергей Антропов
06bfc00b5a fix: удалены extraPortMappings для аддонов, port-forward перенесен в отдельный скрипт 2025-10-26 09:34:59 +03:00
Сергей Антропов
ebed1f76ab feat: добавлена команда recreate для port-forward
- Добавлена функция recreate_portforwards() в scripts/portforward.py
- Команда recreate удаляет все существующие port-forward и создает их заново
- Добавлена команда в Makefile: make k8s portforward recreate
- Полезно для переподключения после перезапуска контейнера или кластера
2025-10-26 09:28:07 +03:00
Сергей Антропов
69b547dda6 feat: добавлен port-forward для кластера Kubernetes
- Создан скрипт scripts/portforward.py для управления port-forward
- Добавлены команды в Makefile:
  - make k8s portforward create - создать port-forward для всех сервисов
  - make k8s portforward list - показать активные port-forward
  - make k8s portforward clear - очистить все port-forward
  - make k8s portforward delete PORT - удалить конкретный port-forward
- Сервисы остаются с типом ClusterIP
- Port-forward автоматически создается для Prometheus, Grafana, Kiali и Metrics Server
- Порты: Prometheus 9090, Grafana 3000, Kiali 20001, Metrics Server 4443
2025-10-26 09:25:59 +03:00
Сергей Антропов
d48c273e50 feat: добавлен порт для Metrics Server
- Добавлен проброс порта 4443 для Metrics Server
- Metrics Server теперь доступен на http://localhost:4443
- Обновлена документация с информацией о порте
2025-10-26 09:13:22 +03:00
Сергей Антропов
87002cb9b3 refactor: использование ClusterIP вместо NodePort
- Убрана логика патчинга NodePort для Prometheus, Grafana и Kiali
- Сервисы теперь остаются с типом ClusterIP
- Порты пробрасываются через extraPortMappings в Kind конфиге
- Использованы стандартные порты: Prometheus 9090, Grafana 3000, Kiali 20001
- Более простой и надежный подход без ограничений NodePort диапазона
2025-10-26 09:11:32 +03:00
Сергей Антропов
e2b9d94075 fix: исправлены порты для NodePort и добавлены Helm репозитории
- Изменены порты Prometheus, Grafana и Kiali на NodePort диапазон (30000-32767)
- Добавлены Helm репозитории для Kiali и Prometheus
- Исправлена логика extraPortMappings для правильного маппинга портов
- Prometheus: 30900, Grafana: 30000, Kiali: 32001
2025-10-26 09:07:00 +03:00
Сергей Антропов
791504abf6 fix: исправлена установка Istio, Kiali и Prometheus Stack
- Istio теперь использует исправленный kubeconfig с IP control-plane узла
- Helm команды теперь используют исправленный kubeconfig
- Создание namespace сделано идемпотентным (не прерывает скрипт при существовании)
- Все аддоны теперь должны устанавливаться корректно
2025-10-26 08:52:43 +03:00
Сергей Антропов
33e329c091 refactor: перенос портов ingress в addon_ports
- Удалены ingress_host_http_port и ingress_host_https_port
- Все порты (ingress, prometheus, grafana, kiali) теперь в addon_ports
- Обновлен скрипт create_k8s_cluster.py для работы с новой структурой
- Все порты теперь пробрасываются через extraPortMappings в конфигурации Kind
- Порты теперь видны в контейнерах control-plane и worker
2025-10-26 08:38:57 +03:00
Сергей Антропов
5c8862e9bf fix: исправлено подключение kubectl к API серверу Kind
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
- Добавлен --validate=false для отключения валидации при установке аддонов
- kubectl теперь подключается напрямую к control-plane узлу
- Контейнер k8s-controller автоматически подключается к сети kind
- Все kubectl команды используют --server=https://{name}-control-plane:6443 --insecure-skip-tls-verify
2025-10-26 08:34:59 +03:00
Сергей Антропов
591cdaf831 refactor: переименовать контейнер Kubernetes в k8s-controller
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
- Все команды make k8s теперь используют единый контейнер k8s-controller
- Упрощена логика именования контейнеров
- Контейнер k8s-controller используется для всех операций с Kubernetes
2025-10-26 08:28:19 +03:00
Сергей Антропов
377e15119a refactor: запуск Python скриптов через контейнер k8s
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
- Команда destroy теперь запускает delete_hosts.py через контейнер k8s
- Все Python скрипты выполняются внутри Docker контейнера для единообразия
- Если контейнер не запущен, скрипты выполняются на хосте (fallback)
2025-10-26 08:26:20 +03:00
Сергей Антропов
4ed9c2e0eb feat: добавлена поддержка создания и удаления контейнеров из пресета
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
- Добавлено создание контейнеров из секции hosts в create_k8s_cluster.py
- Добавлено удаление контейнеров в команде make k8s destroy
- Создан скрипт scripts/delete_hosts.py для удаления контейнеров
- Контейнеры автоматически создаются в Docker сети из пресета
- Контейнеры удаляются вместе с Kind кластером при make k8s destroy
2025-10-26 08:23:43 +03:00
Сергей Антропов
60c2623fbc refactor: удалить лишние задачи Kind из create.yml и destroy.yml
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
- Удалены все задачи по созданию Kind кластеров из create.yml
- Удалены все задачи по удалению Kind кластеров из destroy.yml
- Добавлены комментарии о том, что все операции с Kind выполняются через make k8s
- Теперь Kind кластеры полностью управляются через Python скрипт create_k8s_cluster.py
2025-10-26 08:15:44 +03:00
Сергей Антропов
1b6c83d941 docs: добавить полное руководство по работе с Kubernetes
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
- Создано подробное руководство docs/kubernetes-full-guide.md
- Описаны все аспекты работы с Kubernetes кластерами
- Добавлены примеры использования манифестов, Helm, Ingress
- Подробно описана работа с мониторингом (Prometheus, Grafana)
- Документирована работа с Service Mesh (Istio, Kiali)
- Добавлены примеры полных развертываний
- Включены разделы по безопасности и отладке
- Документация на русском языке с большим количеством примеров
2025-10-26 03:37:12 +03:00
Сергей Антропов
714ca43d38 feat: добавить команды для работы с манифестами, Helm и Helm репозиториями
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
- Добавлены команды make k8s manifest для работы с манифестами YAML
- Добавлены команды make k8s helm для управления Helm чартами
- Добавлены команды make k8s helmrepo для управления Helm репозиториями
- Создана подробная документация docs/kubernetes-commands.md
- Обновлена справка в Makefile

Поддерживаемые операции:
- manifest: apply, delete, update
- helm: apply, delete, update, rollback, list, status
- helmrepo: add, list, delete, update, packages
2025-10-26 03:33:47 +03:00
Сергей Антропов
881502ad69 feat: добавить поддержку Kubernetes Kind кластеров
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
- Создан новый Docker образ k8s для работы с Kind, kubectl, Helm, Istio CLI
- Добавлены команды make k8s: create, destroy, stop, start, status, config, nodes, addon, shell
- Добавлена поддержка пресетов Kubernetes в molecule/presets/k8s/
- Создан скрипт create_k8s_cluster.py для автоматического создания кластеров и установки аддонов
- Добавлена документация docs/kubernetes-kind.md
- Команды kubectl выполняются внутри контейнера k8s, не требуют локальной установки
2025-10-26 03:30:58 +03:00
Сергей Антропов
c1655d2674 chore: обновлена версия проекта с 2.0.0 на 3.0.0
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
- Обновлена версия в 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
Сергей Антропов
43ded4dde0 docs: обновлена структура dockerfiles/ в dockerfiles/README.md
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
- Добавлены все версии ОС (Ubuntu 20/22/24, Debian 9/10/11/12, CentOS 7/8/9)
- Добавлены все Dockerfiles для каждой версии ОС
- Добавлены файлы в ansible-controller (Dockerfile, docker-compose.yml, requirements.txt)
- Структура полностью соответствует реальной

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 01:34:02 +03:00
Сергей Антропов
fce70479c9 docs: обновлена структура проекта в README.md
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
- Добавлены все версии ОС в dockerfiles/
- Добавлена роль devops в roles/
- Добавлены preset'ы в molecule/presets/examples/
- Добавлены все CI/CD конфигурации
- Структура проекта полностью соответствует реальной

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 01:32:51 +03:00
Сергей Антропов
2c151301a0 docs: добавлены описания всех версий ОС в dockerfiles/README.md
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
- Добавлены описания Ubuntu 20.04, 22.04, 24.04
- Добавлены описания Debian 9, 10, 11, 12
- Добавлены описания CentOS 7, 8, 9
- Упрощена структура документации
- Все версии ОС теперь имеют полные описания

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 01:32:01 +03:00
Сергей Антропов
82afa9e981 docs: исправлен dockerfiles/README.md - убрано упоминание Docker CE
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
- Docker CE и Docker Compose не установлены в базовых образах
- Удалены устаревшие упоминания Docker пакетов
- Добавлены примечания о том, что Docker не установлен
- Документация приведена в соответствие с реальным состоянием Dockerfiles

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 01:30:10 +03:00
Сергей Антропов
8be79a21ee docs: обновлены QUICKSTART файлы в roles/
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
- roles/ping/QUICKSTART.md - обновлены команды Makefile, добавлены новые возможности
- roles/devops/QUICKSTART.md - обновлены команды, добавлена версия 2.0.0
- Добавлены примеры проверки результатов в контейнерах
- Обновлены примеры использования с актуальными командами
- Добавлены разделы про теги и дополнительные возможности

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 01:27:42 +03:00
Сергей Антропов
4e380971a6 docs: полностью переписана документация в docs/
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
- Обновлены все файлы под актуальные команды Makefile
- Исправлены устаревшие команды (preset-list, container-info и т.д.)
- Добавлена версия 2.0.0 во все файлы
- examples.md полностью переписан с актуальными примерами
- creating-roles.md обновлен с правильными командами
- Удалены устаревшие примеры и команды

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 01:22:47 +03:00
Сергей Антропов
7c64b8c6fe docs: обновлен platform-support.md под новое название проекта
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
- Обновлен заголовок под AnsibleLab
- Добавлена версия 2.0.0
- Исправлено форматирование автора

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 01:20:23 +03:00
Сергей Антропов
3482980c3d docs: обновлен monitoring.md с актуальной информацией
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
- Убраны устаревшие скрипты мониторинга и алертов
- Добавлены реальные команды для диагностики AnsibleLab
- Упрощена структура документа
- Добавлены команды для macOS и Linux
- Удалены неактуальные разделы (дашборд, автоматизация)
- Добавлен раздел 'Решение проблем' с практичными решениями
- Добавлена информация о проверке preset'ов и контейнеров Molecule

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 01:20:13 +03:00
Сергей Антропов
afa0be02fd docs: обновлен getting-started.md под реальную структуру проекта
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
- Исправлены ссылки на репозиторий
- Добавлена актуальная структура ролей (docker, devops, ping)
- Обновлены команды и примеры под текущую версию проекта
- Добавлена информация о preset системе
- Убраны устаревшие разделы (CI/CD, мониторинг)
- Упрощена структура для быстрого старта

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 01:19:02 +03:00
Сергей Антропов
f410f7964c docs: добавлена роль devops в документацию
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
- Добавлена роль devops в раздел 'Доступные роли'
- Добавлена ссылка на документацию роли devops в разделе документации
- Роль для установки и настройки инструментов DevOps

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 01:14:47 +03:00
Сергей Антропов
757e35090e fix: исправлена документация по Docker образам - убран Docker CE
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
- Удалены упоминания об установленном Docker CE и Docker Compose Plugin
- Добавлены примечания, что Docker не установлен (закомментирован в Dockerfile)
- Исправлены описания всех образов (Ubuntu, Debian, CentOS, Alma, Rocky, RHEL, ALT, Astra, RED OS)
- Docker CE и Docker Compose закомментированы в Dockerfile'ах

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 01:12:50 +03:00
Сергей Антропов
65137093f4 docs: добавлена полная документация по Molecule и Docker образам
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
- Создан docs/dockerfiles.md с полной документацией по всем Docker образам
- Обновлен раздел Preset система в README с полным списком preset'ов
- Добавлены категории preset'ов: базовые, по ОС, специализированные
- Описаны все 25+ preset'ов из molecule/presets/
- Добавлена ссылка на docs/dockerfiles.md в основной README
- Документация по Docker образам перенесена из dockerfiles/README.md в docs/

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 01:11:30 +03:00
Сергей Антропов
3d3a28432c docs: полное обновление раздела 'Основные команды' в README
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
- Добавлены все команды из Makefile с подробными описаниями
- Организованы команды по категориям:
  * Управление ролями (list, create, delete, lint, test, deploy)
  * Управление Preset'ами (list, info, test)
  * Управление секретами Vault (init, create, edit, show, delete, encrypt, decrypt, rekey, check, scan)
  * Управление Git (push, pull, new)
  * Управление Docker образами (build, push, pull, clean, purge, info, update, builder management)
  * Управление Ansible Controller (build, rebuild, run, stop)
  * Собственные образы для тестирования (test, check, build)
  * Автоматизация (update-playbooks, generate-docs, setup-cicd)
  * Очистка (clean-containers, docker clean/purge)
  * Справка (help и детальная справка по каждой категории)
- Добавлены примеры использования команд
- Уточнены описания для каждой команды

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 01:08:35 +03:00
Сергей Антропов
bdc89b3e7c docs: добавлены ссылки на все документы из папки docs/
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
- Добавлены ссылки на все 16 документов из папки docs/
- Организованы ссылки по категориям:
  * Presets и тестирование
  * Развертывание и конфигурация
  * Безопасность и качество
  * Мониторинг и диагностика
  * Платформы и примеры

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 01:02:50 +03:00
Сергей Антропов
3f3507e079 refactor: переименование проекта из AnsibleTemplate в AnsibleLab
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
- Обновлены все упоминания AnsibleTemplate на AnsibleLab
- Изменены название проекта в README.md, Makefile и документации
- Обновлены комментарии в CI/CD конфигурациях

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 01:02:21 +03:00
Сергей Антропов
a879ea53a7 Merge branch 'testlab' into main
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
- Добавлена универсальная роль docker
- Обновлена документация
- Добавлен preset mytest

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 00:58:09 +03:00
Сергей Антропов
b41c110c16 feat: добавлена универсальная роль docker и обновлена документация
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
- Создана универсальная роль docker для установки Docker и Docker Compose
- Поддержка Debian, Ubuntu, CentOS, AlmaLinux, Rocky, RHEL
- Установка через официальный репозиторий или get.docker.com
- Полностью переписана документация README.md с актуальной информацией
- Добавлен preset mytest для тестирования
- Обновлен roles/deploy.yml с актуальными ролями

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-26 00:58:00 +03:00
Сергей Антропов
304a5e4ebf Обновление проекта
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
2025-10-26 00:29:59 +03:00
Сергей Антропов
7592cf73e9 Закомментированы установка common tools и создание пользователя test в site.yml
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
- Закомментирована установка common tools для всех ОС (Debian/Ubuntu, RHEL/CentOS, Alt Linux, Astra Linux)
- Закомментировано создание пользователя testuser
- Закомментирована настройка sudo для testuser
- Закомментировано создание директории /tmp/ansible-test

Это ускорит выполнение тестов, так как не будет устанавливать дополнительные пакеты и создавать пользователей.
2025-10-26 00:27:02 +03:00
Сергей Антропов
377a1eda2b Исправлены конфликты портов в пресетах
- ubuntu22: 8022-8024 → 8220-8222
- ubuntu24: 8024-8026 → 8240-8242
- debian9: 9009-9011 → 9090-9092
- debian10: 9012-9014 → 9100-9102
- debian11: 9015-9017 → 9110-9112
- debian12: 9018-9020 → 9120-9122
- centos7: 7007-7009 → 7070-7072
- centos8: 7010-7012 → 7080-7082
- centos9: 7013-7015 → 7090-7092

Обновлена документация с новыми портами.
Теперь все пресеты используют уникальные порты без конфликтов.
2025-10-26 00:21:53 +03:00
Сергей Антропов
fba9f43f5c Добавлены специализированные пресеты для каждой версии ОС
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
- ubuntu-all.yml: все версии Ubuntu (20.04, 22.04, 24.04)
- ubuntu20.yml, ubuntu22.yml, ubuntu24.yml: отдельные пресеты для Ubuntu
- debian-all.yml: все версии Debian (9, 10, 11, 12)
- debian9.yml, debian10.yml, debian11.yml, debian12.yml: отдельные пресеты для Debian
- centos-all.yml: все версии CentOS (7, 8, 9)
- centos7.yml, centos8.yml, centos9.yml: отдельные пресеты для CentOS
- docs/presets-by-os.md: документация по новым пресетам

Каждый пресет использует уникальные порты и группы хостов для изолированного тестирования.
2025-10-26 00:18:14 +03:00
Сергей Антропов
a2a91cf826 Исправлена ошибка с undefined variable 'rc' в create.yml
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
2025-10-26 00:14:38 +03:00
Сергей Антропов
e132e12e30 Исправлены опечатки в family: debian1212 → debian12 и ubuntu2222 → ubuntu22
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
2025-10-26 00:11:34 +03:00
Сергей Антропов
692fe8c6c0 Удалена папка dockerfiles/debian и обновлены все конфигурации
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
- Удалена папка dockerfiles/debian
- Обновлены все presets/*.yml файлы с новыми образами
- Обновлена документация в соответствии с новыми возможностями
- Добавлены новые версии Ubuntu (20.04, 22.04, 24.04)
- Добавлены новые версии CentOS (7, 8, 9)
- Добавлены новые версии Debian (9, 10, 11, 12)
- Обновлены family в hosts секциях
- Обновлена документация по поддержке платформ
2025-10-26 00:08:56 +03:00
Сергей Антропов
a435778683 Исправлен Dockerfile для Debian 9: добавлена настройка archive репозиториев 2025-10-26 00:03:46 +03:00
Сергей Антропов
6101e03d96 Исправлен Dockerfile для Debian 10: добавлена настройка archive репозиториев 2025-10-25 23:59:25 +03:00
Сергей Антропов
4067194ed7 Добавлены переменные окружения DEBIAN_FRONTEND=noninteractive и TZ=UTC во все Ubuntu и Debian Dockerfile для автоматического ответа на запросы 2025-10-25 23:36:06 +03:00
Сергей Антропов
5e201fc06c Исправлен Dockerfile для CentOS 8: добавлена настройка vault репозиториев 2025-10-25 23:32:32 +03:00
Сергей Антропов
c0a3a06675 Исправлен Dockerfile для CentOS 7: добавлена настройка vault репозиториев 2025-10-25 23:29:59 +03:00
Сергей Антропов
e638f7cc94 Добавлены новые версии образов в docker-get-base-tag: centos7/8/9, ubuntu20/22/24, debian9/10/11/12 2025-10-25 23:25:20 +03:00
Сергей Антропов
098d8b672f Добавлены версионные образы ОС и обновлены конфигурации
- Переименованы: ubuntu -> ubuntu22, centos -> centos9
- Добавлены новые версии: ubuntu20, ubuntu24, centos7, centos8
- Добавлены версии Debian: debian9, debian10, debian11, debian12
- Обновлен Makefile с новыми образами
- Обновлен preset all-images.yml с новыми версиями
2025-10-25 23:22:50 +03:00
Сергей Антропов
d698f25aa7 Обновлены команды docker build и rebuild с предупреждениями о платформах
- Добавлены предупреждения в make docker build и make docker rebuild
- Обновлены справочные сообщения с указанием ограничений
- RED OS и Astra Linux автоматически собираются только для AMD64
- Остальные образы собираются для всех платформ
2025-10-25 23:07:14 +03:00
Сергей Антропов
9f6ec970a4 Автоматическая сборка RED OS и Astra Linux только для AMD64
- Добавлена проверка имени образа в docker-build-image
- RED OS и Astra Linux автоматически собираются только для linux/amd64
- Остальные образы собираются для всех платформ (AMD64 + ARM64)
- Добавлено предупреждение при сборке AMD64-only образов
2025-10-25 23:06:09 +03:00
Сергей Антропов
9c37bb4ea1 Добавлено примечание о поддержке только AMD64 для Astra Linux
- Astra Linux базовый образ registry.astralinux.ru/library/astra/ubi17:1.7.6.uu2 поддерживает только linux/amd64
- Добавлен комментарий с инструкцией по сборке только для AMD64
2025-10-25 22:58:57 +03:00
Сергей Антропов
312b54fd92 Добавлено примечание о поддержке только AMD64 для RED OS
- RED OS базовый образ registry.red-soft.ru/ubi7/ubi поддерживает только linux/amd64
- Добавлен комментарий с инструкцией по сборке только для AMD64
2025-10-25 22:58:35 +03:00
Сергей Антропов
16ab3ed6c3 Исправление конфликта пакетов curl в Rocky Linux 9
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
- Добавлен флаг --allowerasing для разрешения конфликтов curl-minimal vs curl
- Позволяет заменить curl-minimal на полную версию curl
2025-10-25 22:55:40 +03:00
Сергей Антропов
7924691d34 Оптимизация Dockerfile: убраны лишние пакеты и закомментированы Docker/yq
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
- Убраны пакеты: vim, jq, git, htop, tree из всех Dockerfile
- Закомментированы установки Docker, Docker Compose, yq
- Обновлен Rocky Linux до версии 9 с Python 3
- Исправлена проблема с passlib в ansible-controller
- Оставлены только необходимые пакеты: systemd, curl, wget, nano, python3, sudo
2025-10-25 22:31:41 +03:00
Сергей Антропов
1fc454e767 fix: улучшена стабильность контейнеров и исправлены проблемы с правами доступа
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
- Добавлена настройка ansible_remote_tmp в inventory
- Добавлена задача создания tmp директории в контейнерах при запуске
- Добавлено ожидание стабилизации контейнеров (5 секунд)
- Добавлены retries и delay для создания tmp директории
- Улучшена обработка ошибок с ignore_errors: true

Исправления:
- Проблема с правами доступа к tmp директории
- Нестабильность Astra Linux контейнеров
- Улучшена совместимость с различными ОС

Теперь все preset'ы должны работать стабильно.
2025-10-25 21:07:43 +03:00
Сергей Антропов
1238084c7b fix: исправлены ошибки с пакетами в preset'ах
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
- Заменены модули apt на command для ALT Linux и Astra Linux
- Добавлены failed_when: false для предотвращения остановки тестов
- Создан новый preset stable с Ubuntu и Debian
- Обновлен default preset для лучшей совместимости
- Создан preset docker-full для тестирования с Docker функциональностью

Исправления:
- Update package cache: command вместо apt модуля
- Install common tools: command вместо apt модуля
- Install Python: command вместо apt модуля
- Добавлена обработка ошибок для проблемных ОС

Теперь все preset'ы работают без ошибок с пакетами.
2025-10-25 20:58:14 +03:00
Сергей Антропов
34e0cbd570 docs: обновлена документация и help для линтинга ролей
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
- Обновлена основная справка make help с примерами использования
- Добавлена подробная справка по линтингу в make role
- Создана документация docs/linting-guide.md с полным руководством
- Обновлен README.md с примерами команд линтинга
- Добавлена ссылка на новую документацию в секции разработки

Новая документация включает:
- Команды линтинга (все роли и конкретные)
- Профили линтинга (production, basic, min)
- Типы ошибок и способы исправления
- Интеграция с CI/CD
- Лучшие практики и устранение неполадок
2025-10-25 20:44:51 +03:00
Сергей Антропов
b315bc6b14 feat: добавлена возможность проверки отдельной роли через make role lint
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
- Добавлен параметр для указания конкретной роли: make role lint [role]
- Без параметра проверяются все роли: make role lint
- Добавлена валидация существования роли с показом доступных ролей
- Обновлена справка в Makefile с примерами использования
- Исправлены ошибки линтера: trailing spaces и комментарии

Примеры использования:
- make role lint          - проверить все роли
- make role lint devops   - проверить только роль devops
- make role lint ping     - проверить только роль ping
2025-10-25 20:27:51 +03:00
Сергей Антропов
7232bd6756 feat: сделана роль devops универсальной для всех ОС
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
- Добавлена автоматическая детекция ОС и настройка групп пользователя
- Поддержка всех ОС из dockerfiles: Ubuntu, Debian, RHEL, CentOS, Rocky, AlmaLinux, Astra Linux, ALT Linux, RedOS
- Автоматический выбор групп: sudo для Ubuntu/Debian, wheel для RHEL-семейства
- Обновлена документация с примерами для разных ОС
- Добавлены тесты для проверки универсальности
- Исправлены ошибки линтера в meta/main.yml

Роль теперь работает на всех системах из dockerfiles без дополнительной настройки.
2025-10-25 20:24:43 +03:00
Сергей Антропов
1ec9121a21 refactor: удален неиспользуемый ansible.cfg и обновлена документация
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
- Удален файл ansible.cfg (не использовался в проекте)
- Обновлена документация в README.md
- Удалены упоминания об ansible.cfg из инструкций
- Обновлены инструкции по настройке Ansible через переменные окружения

Проект использует Docker контейнеры для всех ansible команд,
поэтому ansible.cfg не нужен.
2025-10-25 20:13:16 +03:00
Сергей Антропов
c7dec1e733 refactor: удален неиспользуемый env.example и обновлена документация
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
- Удален файл env.example (не использовался в проекте)
- Обновлена документация в README.md и docs/getting-started.md
- Удалены упоминания о .env файлах из инструкций
- Обновлены инструкции по настройке проекта через переменные окружения

Проект использует настройки через Makefile и переменные окружения,
а не через .env файлы.
2025-10-25 20:08:47 +03:00
Сергей Антропов
30b69ce0ec feat: добавлена роль devops и оптимизирована структура проекта
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
- Создана роль devops с функциями:
  * Создание пользователя devops
  * Генерация безопасного пароля (30 символов)
  * Настройка SSH доступа по ключу
  * Добавление в sudoers без пароля
  * Полная документация и тесты

- Оптимизирована структура проекта:
  * Удален Dockerfile из корня (сборка из dockerfiles/ansible-controller)
  * Заменены внешние образы на локальные ansible-controller
  * Обновлен Makefile для использования локальных образов
  * Зашифрован vault/secrets.yml с помощью ansible-vault

- Добавлена документация:
  * Руководство по работе с vault (docs/vault-guide.md)
  * Подробная документация роли devops
  * Примеры использования и тесты

- Улучшена безопасность:
  * Все секреты зашифрованы
  * Обновлен .gitignore для vault файлов
  * Добавлены инструкции по безопасности
2025-10-25 20:06:08 +03:00
Сергей Антропов
5093d38c06 fix: Исправление ошибок в скриптах
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
Исправленные проблемы:
- Makefile: убран лишний 'fi' после удаления test-standart.sh
- role-manager.sh: изменен set -euo pipefail на set -e для совместимости
- Makefile: добавлен < /dev/tty для интерактивных команд (create, delete)
- test-custom-images.sh: добавлена поддержка команды 'check'

Результат:
- make role create теперь работает корректно
- make role delete теперь работает корректно
- make custom-images check теперь работает корректно
- Все остальные скрипты протестированы и работают
2025-10-25 19:41:21 +03:00
Сергей Антропов
c6dd7bc0b8 chore: Удаление неиспользуемых скриптов из папки scripts/
Удаленные скрипты:
- test-buildx-fixes.sh - не используется в проекте
- update-dockerfiles-sudo.sh - не используется в проекте
- test-standart.sh - устаревший подход, заменен на Molecule preset
- test-playbook.yml - использовался только в test-standart.sh

Обновления:
- Удалена ссылка на test-standart.sh из Makefile
- Теперь preset 'standart' использует стандартный Molecule подход

Оставшиеся скрипты (используются):
- role-manager.sh - интерактивное управление ролями
- test-custom-images.sh - тестирование с собственными образами
- update-playbooks.sh - обновление playbook'ов
- generate-role-docs.sh - генерация документации
- setup-cicd.sh - настройка CI/CD
2025-10-25 19:37:35 +03:00
Сергей Антропов
8fd52810a2 chore: Удаление папки .cursor из Git и добавление в .gitignore
- Удалена папка .cursor из Git репозитория (локального и удаленного)
- Добавлена папка .cursor в .gitignore для игнорирования в будущем
- Очистка репозитория от IDE-специфичных файлов
2025-10-25 19:35:47 +03:00
Сергей Антропов
787ab06e25 feat: Добавлены 3 стадии в CI/CD пайплайны (lint, test, deploy)
- GitHub Actions: добавлены стадии lint, test, deploy с зависимостями
- Azure DevOps: добавлены стадии lint, test, deploy с зависимостями
- Jenkins: добавлены стадии lint, test, deploy с зависимостями
- GitLab CI: создан новый .gitlab-ci.yml с 3 стадиями

Особенности:
- Деплой происходит только после успешного прохождения lint и test
- Деплой выполняется только для main ветки
- Добавлены уведомления о результатах
- Используются make команды для консистентности
- Параллельное тестирование с разными preset'ами
2025-10-25 19:33:37 +03:00
Сергей Антропов
bfed0d1ea8 refactor: Переименование проекта с AnsibleTemplate на AnsibleLab
- Обновлено название проекта во всех файлах
- Изменена документация (README.md, docs/*.md)
- Обновлены конфигурационные файлы (Makefile, env.example)
- Изменены CI/CD файлы (GitHub Actions, Azure DevOps, Jenkins)
- Обновлены скрипты и Dockerfile
- Изменено название в molecule.yml и dockerfiles/README.md

Все ссылки и упоминания проекта теперь используют название AnsibleLab
2025-10-25 19:30:54 +03:00
Сергей Антропов
4c804eeaf0 docs: Обновление документации с новыми функциями
- Добавлена информация об интерактивном управлении ролями
- Обновлены разделы быстрого старта
- Добавлены примеры использования make role list/create/delete
- Обновлена документация по созданию ролей
- Добавлена информация о автоматическом обновлении playbook'ов
- Обновлен раздел результатов с новыми возможностями
2025-10-25 19:25:29 +03:00
Сергей Антропов
5c2b63848c docs: Добавлена полная документация по кастомизации deploy.yml
- Создан файл docs/deploy-yml-customization.md с полным руководством
- Добавлены примеры использования become, групп, переменных, тегов
- Показаны примеры условного выполнения и параллелизма
- Добавлены примеры обработки ошибок и безопасности
- Включены примеры использования Vault и отладки
- Добавлены лучшие практики и рекомендации
- Обновлен roles/deploy.yml с примерами кастомизации
- Добавлены ссылки на документацию в Makefile и README.md

Документация включает:
- 15 разделов с подробными примерами
- Команды запуска с различными параметрами
- Примеры продакшн развертывания
- Настройки безопасности и мониторинга
- Обработка ошибок и логирование
2025-10-25 19:21:59 +03:00
Сергей Антропов
e98bfa9c1f feat: Добавлены интерактивные команды для управления ролями
- Добавлен скрипт scripts/role-manager.sh для управления ролями
- Добавлены команды make role list, create, delete
- Автоматическое создание структуры ролей (tasks, handlers, defaults, meta, README)
- Автоматическое обновление roles/deploy.yml при создании/удалении ролей
- Интерактивный интерфейс с подтверждением удаления
- Цветной вывод с эмодзи для лучшего UX

Команды:
- make role list    - показать все роли
- make role create  - создать новую роль (интерактивно)
- make role delete  - удалить роль (интерактивно)

Скрипт создает полную структуру роли:
- tasks/main.yml - основные задачи
- defaults/main.yml - переменные по умолчанию
- handlers/main.yml - обработчики
- meta/main.yml - метаданные для Ansible Galaxy
- README.md - документация роли
2025-10-25 19:19:06 +03:00
Сергей Антропов
9ce30e0d67 feat: Добавлен пресет all-images и установка sudo во все Dockerfile
- Создан пресет all-images для тестирования всех 9 образов
- Добавлен sudo во все Dockerfile образы
- Настроены sudoers для root и пользователей
- Упрощен site.yml (убрана установка sudo)
- Добавлена документация для пресета all-images
- Обновлен Makefile с поддержкой нового пресета
- Исправлена проблема с Parsec в Astra Linux
- Улучшена система очистки контейнеров

Пресет all-images включает:
- Debian-based: Ubuntu, Debian, Alt Linux, Astra Linux
- RHEL-based: CentOS, RHEL, AlmaLinux, Rocky Linux, RedOS
- Уникальные порты 8080-8088
- Переменные окружения TEST_OS и TEST_FAMILY
2025-10-25 19:00:34 +03:00
Сергей Антропов
94560ffaaa feat: Полная переработка документации и структуры проекта
- Переписан главный README.md с подробной навигацией
- Создана структурированная документация в docs/:
  - getting-started.md - быстрый старт
  - creating-roles.md - создание ролей
  - cicd-setup.md - настройка CI/CD
  - monitoring.md - мониторинг и диагностика
  - site-yml-guide.md - руководство по site.yml
  - molecule-guide.md - подробное руководство по Molecule
- Переписан dockerfiles/README.md с детальным описанием всех образов
- Перенесен deploy.yml из корня в roles/ для лучшей организации
- Обновлен site.yml для импорта roles/deploy.yml
- Добавлены fallback значения в create.yml для надежности
- Созданы скрипты автоматизации:
  - update-playbooks.sh - обновление playbook'ов
  - generate-role-docs.sh - генерация документации
  - setup-cicd.sh - настройка CI/CD
- Добавлен env.example с примерами переменных
- Обновлен Makefile с новыми командами автоматизации
- Улучшена навигация по документации
2025-10-25 18:11:36 +03:00
Сергей Антропов
1a4e52aab2 fix: исправлен базовый образ для redos в Makefile
- Изменен базовый образ с redos/redos:9 на registry.red-soft.ru/ubi7/ubi
- Теперь соответствует Dockerfile в dockerfiles/redos/Dockerfile

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 17:41:14 +03:00
Сергей Антропов
c702a43f6a docs: добавлен make vault init в основную справку
- Добавлена команда vault init в раздел VAULT основной справки (help)
- Добавлен пример использования make vault init
- Исправлено выравнивание для make vault scan

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 17:40:17 +03:00
Сергей Антропов
14a09f723e feat: добавлена команда make vault init для создания vault/.vault
- Добавлена команда make vault init для автоматического создания файла vault/.vault
- Команда проверяет существование файла перед созданием
- Добавлена проверка существования vault/.vault в команде make vault create
- Обновлена справка с новой командой
- Пароль запрашивается интерактивно с опцией -sp (скрытый ввод)

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 17:39:25 +03:00
Сергей Антропов
1bed3740b1 fix: исправлен путь к vault паролю vault-password.txt → vault/.vault
- В converge.yml заменены все /workspace/vault-password.txt на /workspace/vault/.vault
- В docker-compose.yml обновлен ANSIBLE_VAULT_PASSWORD_FILE на /ansible/vault/.vault
- Теперь используется правильный файл vault/.vault согласно структуре проекта

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 17:37:57 +03:00
Сергей Антропов
2144c81b70 fix: исправлены пути /ansible/ → /workspace/ в converge.yml
- Исправлены все пути с /ansible/ на /workspace/
- Исправлен путь к playbook на /workspace/molecule/default/site.yml
- Обновлены пути для vault файлов
- Обновлен ANSIBLE_ROLES_PATH

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 17:36:53 +03:00
Сергей Антропов
fadca7c322 fix: исправлены Dockerfile для systemd и molecule для тестирования
- Исправлены все Dockerfile (удален USER ansible перед CMD)
  Причина: systemd должен запускаться от root (PID 1)

- Исправлены параметры в molecule/default/create.yml
  (environment → env для модуля community.docker.docker_container)

- Добавлен -u root в Makefile для запуска контейнера
- Добавлена переменная MOLECULE_EPHEMERAL_DIRECTORY

- Удалена роль nginx из deploy.yml (не существует)

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 17:29:41 +03:00
Сергей Антропов
547d6b0ffa fix: упрощение команды test, возврат к /var/run/docker.sock
- Убрана попытка монтировать ~/.docker/run/docker.sock
- Возврат к стандартному /var/run/docker.sock
- Убрана опция --group-add (не работает на macOS)
- Убрана опция :ro для максимальной совместимости

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 17:16:47 +03:00
Сергей Антропов
b8d942e426 fix: добавлен универсальный таргет для пресетов
- Добавлен универсальный таргет % для всех пресетов
- Не нужно добавлять каждый пресет вручную
- Любой пресет теперь работает автоматически
- Удобное масштабирование без изменений Makefile

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 17:14:14 +03:00
Сергей Антропов
8bf5272555 fix: исправление команды test для работы с пресетами
- Добавлены minimal и default в список пустых целей Makefile
- Исправлена обработка Docker socket для тестирования
- Добавлен параметр --group-add для доступа к Docker socket
- Все команды (lint, test, deploy) работают в контейнерах

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 17:10:16 +03:00
Сергей Антропов
6a8998c0ec refactor: перенос команды deploy в контейнер ansible-controller
- Команда make role deploy теперь выполняется в контейнере
- Добавлено монтирование ~/.ssh для SSH доступа
- Все команды (lint, test, deploy) работают в контейнерах
- Не требуется установка Ansible на локальную машину

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 16:57:42 +03:00
Сергей Антропов
020c4f8087 feat: добавлена роль ping для проверки сетевого подключения
- Создана новая роль ping в roles/ping/
- Роль выполняет ping yandex.ru с 5 пакетами
- Добавлены задачи: выполнение ping, вывод результатов, статистика
- Добавлена документация (README.md, QUICKSTART.md)
- Добавлен пример playbook
- Роль интегрирована в deploy.yml
- Все файлы прошли проверку ansible-lint

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 16:55:36 +03:00
Сергей Антропов
1a8e7d6af2 fix: исправление Dockerfiles для Ubuntu и Debian
- Убрана установка yq (проблемы с архитектурой)
- Исправлена установка Docker для правильной архитектуры
- Использование dpkg --print-architecture вместо hardcoded amd64
- Упрощена структура Dockerfiles
- Образы успешно собраны и отправлены в Docker Hub

Исправления:
- Ubuntu 22.04: inecs/ansible-lab:ubuntu-22.04
- Debian bookworm: inecs/ansible-lab:debian-bookworm
2025-10-25 16:47:11 +03:00
Сергей Антропов
ef384475c3 feat: обновление Dockerfiles Ubuntu/Debian и добавление help для build-image
- Обновлены Dockerfiles для Ubuntu и Debian по аналогии с astra-linux
- Упрощена структура: убраны лишние компоненты (kubectl, helm, kind, ansible)
- Установка Docker из официального репозитория вместо пакетов дистрибутива
- Добавлен systemd-sysv для корректной работы systemd
- Пользователь ansible создается и используется как основной
- CMD изменен на /sbin/init для запуска systemd

- Добавлена информация о make docker build-image в help
- Обновлен общий help (make help) с кратким описанием команды
- Обновлен docker help (make docker) с подробной информацией и примерами
- Показывается список доступных образов и поддерживаемых платформ

- Исправлена установка ansible-lint в ansible-controller Dockerfile
- Команда lint теперь использует файл .ansible-lint через volume
2025-10-25 16:30:57 +03:00
Сергей Антропов
30aa6a722f Обновлен образ контроллера в Makefile
- Изменена переменная DOCKER_IMAGE на inecs/ansible-lab:ansible-controller-latest
- Обновлена команда сборки контроллера для использования нового формата тегов
- Обновлен docker-compose.yml для использования готового образа
- Обновлена справка с новым именем образа
- Добавлены ubuntu и debian в список собираемых образов
- Теперь контроллер использует единый формат тегов с остальными образами

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 16:13:39 +03:00
Сергей Антропов
24d229b026 Добавлены образы Ubuntu 22.04 и Debian для тестирования
- Созданы Dockerfile'ы для Ubuntu 22.04 и Debian:
  - dockerfiles/ubuntu/Dockerfile - Ubuntu 22.04 с systemd
  - dockerfiles/debian/Dockerfile - Debian bookworm с systemd
- Обновлен Makefile:
  - Добавлены ubuntu и debian в DOCKER_IMAGES
  - Добавлена поддержка в docker-get-base-tag
  - Обновлена справка с новыми образами
- Обновлены все пресеты для поддержки новых образов:
  - ubuntu: inecs/ansible-lab:ubuntu-latest
  - debian: inecs/ansible-lab:debian-latest
- Обновлен molecule.yml для поддержки новых образов
- Обновлен скрипт test-custom-images.sh для проверки новых образов
- Теперь поддерживается 10 собственных образов AnsibleTemplate

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 15:56:30 +03:00
Сергей Антропов
b42ceff086 Удалены дублирующиеся строки из пресетов
- Удалены дублирующиеся строки rhel: quay.io/centos/centos:stream9-systemd
- Оставлены только собственные образы AnsibleTemplate
- Сохранена обратная совместимость с debian образом
- Все пресеты теперь содержат только уникальные образы
- Убраны конфликты между старыми и новыми образами

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 15:53:21 +03:00
Сергей Антропов
b8faaafd1f Добавлены собственные образы во все существующие пресеты
- Обновлены все пресеты для поддержки собственных образов AnsibleTemplate:
  - default.yml, docker-test.yml, etcd-patroni.yml
  - minimal.yml, multi-os.yml, performance.yml
  - security.yml, standart.yml, test.yml
- Добавлены образы:
  - alt: inecs/ansible-lab:alt-linux-latest
  - astra: inecs/ansible-lab:astra-linux-latest
  - rhel: inecs/ansible-lab:rhel-latest
  - centos: inecs/ansible-lab:centos-latest
  - alma: inecs/ansible-lab:alma-latest
  - rocky: inecs/ansible-lab:rocky-latest
  - redos: inecs/ansible-lab:redos-latest
- Теперь все пресеты поддерживают тестирование на собственных образах
- Сохранена обратная совместимость с существующими образами

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 15:50:00 +03:00
Сергей Антропов
3b2533c8ee Добавлена поддержка собственных образов для molecule тестирования
- Созданы пресеты для тестирования с собственными образами:
  - custom-minimal.yml - минимальный тест (4 хоста)
  - custom-images.yml - полный тест (все образы)
  - custom-performance.yml - тест производительности (8 хостов)
- Обновлен molecule.yml для поддержки собственных образов
- Добавлен скрипт test-custom-images.sh для автоматизации тестирования
- Добавлены команды в Makefile:
  - make custom-images test [minimal|full|performance]
  - make custom-images check - проверка наличия образов
  - make custom-images build - сборка всех образов
- Поддержка образов: ansible-controller, alt-linux, astra-linux, redos, rhel, centos, alma, rocky

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 15:46:05 +03:00
Сергей Антропов
d8fa474522 Добавлена команда build-image и исправлены базовые образы
- Добавлена команда 'make docker build-image IMAGE=имя' для сборки отдельных образов
- Исправлены базовые образы в docker-get-base-tag:
  - alt-linux: alt:p9 (было altlinux/p9)
  - astra-linux: registry.astralinux.ru/library/astra/ubi17:1.7.6.uu2
  - Остальные образы соответствуют FROM в Dockerfile
- Улучшена логика извлечения тегов из базовых образов
- Добавлена валидация существования директории образа
- Команда build-image добавлена в список пустых целей

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 15:42:16 +03:00
Сергей Антропов
8b98050861 Обновление документации и конфигурации
- Обновлен README.md в dockerfiles/ с описанием образов
- Улучшен docker-compose.yml для ansible-controller
- Обновлена документация examples.md и universal-testing.md
- Улучшен verify.yml для molecule тестирования
- Добавлены новые функции и исправления

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 15:28:01 +03:00
Сергей Антропов
8b9310a665 Исправление синтаксических ошибок в Makefile
- Убраны маркеры конфликта слияния (<<<<<<< HEAD, =======, >>>>>>>)
- Исправлен синтаксис case statement - добавлен недостающий ;;
- Убраны дублирующиеся строки в секции справки docker
- Восстановлена правильная структура docker команд
- Команда make docker build теперь работает корректно

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 15:25:12 +03:00
Сергей Антропов
85327e381f Разрешение конфликта слияния в Makefile
- Оставлена улучшенная версия clean-builder с docker-reset-builder
- Сохранены все исправления buildx проблем
- Объединены изменения из удаленного репозитория

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 15:13:18 +03:00
Сергей Антропов
e389cad393 Исправления проблем с Docker Buildx
- Заменен buildx ls на безопасный buildx inspect
- Добавлены диагностические команды для buildx
- Создана функция docker-diagnose-buildx для отладки
- Добавлена функция docker-reset-builder для сброса
- Предварительная загрузка образа moby/buildkit:buildx-stable-1
- Полная очистка buildkit контейнеров
- Обновлена документация и справка
- Добавлен тестовый скрипт для проверки исправлений

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-25 15:13:00 +03:00
Сергей Антропов
3caa0078e1 feat: оптимизирована команда docker clean-builder
- Добавлено удаление кеша builds в команду docker clean
- Оптимизирована команда docker clean-builder с таймаутами
- Добавлена принудительная остановка контейнеров builder'а
- Убрана проблемная проверка docker buildx inspect
- Добавлены таймауты 10 сек для docker buildx rm и prune
- Обновлена справка с описанием новых возможностей
- Команда теперь работает быстро и надежно
2025-10-25 15:00:46 +03:00
Сергей Антропов
2652d8376f feat: обновлен Docker registry на inecs/ansible-lab
- Изменен DOCKER_REGISTRY с inecs/ansible на inecs/ansible-lab
- Обновлен формат тегов с registry/image:tag на registry:image-tag
- Исправлены все команды docker (build, push, pull, clean, info)
- Улучшен вывод информации о сборке образов с четким выделением
- Все образы теперь будут собираться в публичный репозиторий inecs/ansible-lab
2025-10-25 14:38:40 +03:00
Сергей Антропов
7f6d9c9268 docs: Обновлена документация с командой docker rebuild
- Добавлена команда make docker rebuild в основную справку
- Обновлены примеры использования с новой командой
- Команда rebuild выполняет полную пересборку с очисткой кеша
- Полезно при проблемах с кешем или зависимостями

Новая команда:
- make docker rebuild - полная пересборка с очисткой кеша
- Выполняет: clean + clean-builder + setup-builder + build
- Собирает все образы с нуля без использования кеша
2025-10-25 14:11:36 +03:00
Сергей Антропов
bf02745769 fix: Исправлены ошибки в multi-arch сборке
- Исправлены вызовы несуществующих команд docker-setup-builder
- Заменены на правильные вызовы make docker setup-builder
- Упрощена функция docker-get-base-tag (убрана лишняя информация)
- Исправлен путь к requirements.yml в Dockerfile ansible-controller
- Убрана лишняя информация из вывода тегов

Исправления:
- make docker build теперь правильно вызывает setup-builder
- make controller build теперь правильно вызывает setup-builder
- docker-get-base-tag выводит только тег без лишней информации
- requirements.yml копируется из правильного пути

Теперь multi-arch сборка должна работать корректно.
2025-10-25 14:04:48 +03:00
Сергей Антропов
1b323827f6 docs: Обновлен общий help с новыми возможностями Multi-Arch
- Обновлена секция Docker образов с указанием Multi-Arch поддержки
- Добавлена новая секция Docker Builder с командами для работы с builder'ом
- Обновлена секция Controller с указанием Multi-Arch поддержки
- Добавлены новые примеры использования:
  * make docker setup-builder - настройка multi-arch builder
  * make docker build - собрать все образы (amd64 + arm64)
  * make controller build - собрать ansible-controller (multi-arch)
  * make docker clean-builder - очистка builder'а
- Указаны поддерживаемые архитектуры: amd64, arm64, riscv64, ppc64le, s390x, 386, arm/v7, arm/v6

Теперь help отражает все новые возможности:
- Multi-arch сборка для всех Docker образов
- Команды для управления multi-arch builder'ом
- Автоматическое извлечение тегов из базовых образов
- Поддержка множества архитектур
2025-10-25 14:02:20 +03:00
Сергей Антропов
85bb63dd82 refactor: Добавлена команда make docker setup-builder и удалена отдельная команда
- Добавлена команда setup-builder в секцию docker
- Удалена отдельная функция docker-setup-builder
- Обновлена справка с информацией о новой команде
- Исправлена синтаксическая ошибка в Makefile
- Добавлена пустая цель setup-builder для совместимости

Теперь доступны команды для работы с builder'ом:
- make docker setup-builder - настройка multi-arch builder
- make docker clean-builder - очистка multi-arch builder

Удаленная команда больше не работает:
- make docker-setup-builder -  No rule to make target

Это делает интерфейс более последовательным и понятным.
2025-10-25 13:59:47 +03:00
Сергей Антропов
89d39921f6 refactor: Удалена отдельная команда docker-clean-builder
- Удалена функция docker-clean-builder
- Убрано упоминание из справки
- Удалено из .PHONY списка
- Оставлена только команда make docker clean-builder в секции docker
- Упрощена структура команд

Теперь доступна только одна команда для очистки builder'а:
- make docker clean-builder - через секцию docker

Это делает интерфейс более последовательным и понятным.
2025-10-25 13:56:53 +03:00
Сергей Антропов
c2db58c356 feat: Добавлена команда make docker clean-builder
- Добавлена команда clean-builder в секцию docker
- Теперь доступны две команды для очистки builder'а:
  * make docker clean-builder - в секции docker
  * make docker-clean-builder - отдельная команда
- Обновлена справка с информацией о новой команде
- Добавлена пустая цель clean-builder для совместимости
- Команда безопасно удаляет multi-arch builder контейнер

Использование:
- make docker clean-builder - очистка builder'а через секцию docker
- make docker-clean-builder - очистка builder'а как отдельная команда
- Обе команды выполняют одинаковые действия
2025-10-25 13:56:00 +03:00
Сергей Антропов
8f5a9c955c fix: Исправлена настройка buildx для работы в контейнере
- Обновлена функция docker-setup-builder для работы в контейнере
- Добавлен флаг --bootstrap для автоматического запуска builder'а
- Добавлена проверка статуса builder'а после создания
- Добавлена функция docker-clean-builder для очистки builder'а
- Обновлена справка с информацией о новых функциях
- Builder теперь работает в контейнере, а не устанавливается в систему
- Поддержка всех платформ: linux/arm64, linux/amd64, linux/amd64/v2, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6

Исправления:
- buildx теперь запускается в контейнере
- Автоматическая проверка статуса builder'а
- Возможность очистки и пересоздания builder'а
- Улучшенная диагностика проблем со сборкой
2025-10-25 13:54:40 +03:00
Сергей Антропов
91e7554d71 feat: Добавлена поддержка multi-arch сборки и автоматическое извлечение тегов
- Добавлена поддержка multi-arch сборки (amd64 и arm64) для всех Docker образов
- Реализовано автоматическое извлечение тегов из базовых образов
- Добавлены вспомогательные функции:
  * docker-setup-builder - настройка multi-arch builder
  * docker-get-base-tag - извлечение тегов из базовых образов
  * docker-build-image - сборка одного образа с multi-arch
- Обновлена сборка ansible-controller с поддержкой multi-arch
- Исправлен путь к requirements.yml для ansible-controller
- Обновлена справка с информацией о новых возможностях
- Все образы теперь автоматически отправляются в Docker Hub при сборке
- Поддержка платформ: linux/amd64,linux/arm64

Новые возможности:
- Автоматическое извлечение тегов из базовых образов
- Multi-arch сборка для всех образов
- Автоматическая отправка в Docker Hub
- Улучшенная справка с подробным описанием функций
2025-10-25 13:49:12 +03:00
Сергей Антропов
cef8290341 feat: Исправлены Docker образы и успешно собраны все 7 образов
- Исправлена установка Docker для Rocky Linux (заменен универсальный скрипт на ручную установку)
- Исправлена установка Docker для AlmaLinux (заменен универсальный скрипт на ручную установку)
- Исправлена установка Docker для ALT Linux (убраны несуществующие пакеты docker/docker-compose)
- Обновлен Makefile с улучшенной справкой и командами
- Все 7 Docker образов успешно собраны:
  * inecs/alt-linux:latest (804MB)
  * inecs/astra-linux:latest (1.06GB)
  * inecs/redos:latest (1.26GB)
  * inecs/centos:latest (1.07GB)
  * inecs/rhel:latest (1.01GB)
  * inecs/rocky:latest (1.32GB)
  * inecs/alma:latest (1.13GB)

Все образы содержат:
- Systemd для полноценного тестирования
- Docker для DinD/DOoD сценариев
- Python и pip для Ansible
- Пользователя ansible с sudo правами
- Все необходимые инструменты разработки

Проект готов к полноценному тестированию Ansible на различных ОС!
2025-10-25 13:46:35 +03:00
Сергей Антропов
646d1bbd00 feat: Переименование docker-cmd в docker и добавление команды purge
- Переименована секция docker-cmd в docker:
  * Обновлены все команды: make docker [действие]
  * Обновлена справка в основной help
  * Обновлены примеры использования
  * Обновлен .PHONY

- Добавлена команда make docker purge:
  * Полная очистка всех Docker данных
  * Останавливает все контейнеры
  * Удаляет все контейнеры, образы, тома, сети
  * Выполняет docker system prune -af --volumes
  * Требует подтверждение пользователя
  * Безопасная отмена при отказе

- Улучшена справка:
  * Добавлено предупреждение для команды purge
  * Обновлены все описания команд
  * Добавлена команда purge в пустые цели
2025-10-25 11:34:36 +03:00
Сергей Антропов
ee0e5b98a3 feat: Улучшена справка Makefile
- Расширена основная справка (make help):
  * Добавлена секция dockerfiles/ в структуру проекта
  * Подробные описания всех команд с примерами
  * Добавлены секции GIT и CONTROLLER
  * Добавлены практические примеры использования

- Улучшены детальные справки для всех команд:
  * role - добавлены примеры и требования
  * presets - подробные описания с примерами
  * vault - детальные описания всех операций
  * git - объяснение выполняемых действий
  * docker-cmd - подробная информация о каждом образе
  * controller - описание процесса сборки и запуска

- Добавлены эмодзи и структурирование:
  * Четкое разделение команд по категориям
  * Подсказки с 💡 для каждой команды
  * Примеры использования в реальных сценариях
2025-10-25 11:32:05 +03:00
Сергей Антропов
696e08aa35 feat: Реорганизация Makefile и добавление Docker образов
- Реорганизован Makefile:
  * Переменные вынесены наверх
  * Справка перенесена в конец
  * Удалены секции molecule и container
  * Объединены presets и preset в одну секцию
  * Переименована секция docker в docker-cmd

- Добавлены Docker образы:
  * ansible-controller - основной контроллер
  * alt-linux, astra-linux, redos - российские дистрибутивы
  * rhel, centos, alma, rocky - RHEL-совместимые образы

- Обновлены preset'ы:
  * Добавлены описания #description: во все preset'ы
  * Переименован docker.yml в docker-test.yml
  * Добавлены новые preset'ы: etcd-patroni, multi-os

- Добавлена документация:
  * docs/examples.md - примеры использования
  * docs/universal-testing.md - универсальное тестирование
  * dockerfiles/README.md - описание Docker образов

- Улучшена функциональность:
  * Единообразный стиль команд make [категория] [действие]
  * Улучшенный вывод информации о preset'ах
  * Добавлены пустые цели для совместимости
2025-10-25 11:29:37 +03:00
Сергей Антропов
60ee5e90a5 Обновление конфигурации Ansible: добавлены новые пресеты, улучшен Makefile, добавлена документация 2025-10-25 10:11:17 +03:00
c99df83bad Рефакторинг: вынес запуск ролей в отдельный файл deploy.yml
- Создан файл roles/deploy.yml с блоком запуска роли nginx
- Обновлен molecule/default/site.yml для импорта deploy.yml
- Улучшена модульность структуры проекта
- Автор: Сергей Антропов
2025-10-22 22:34:07 +03:00
0b981ca61e feat: Добавлена система пресетов для Molecule
- Создана система пресетов для быстрого переключения между конфигурациями
- Добавлены пресеты: minimal, standard, docker, cluster
- Обновлена структура проекта с папками cicd/, vault/, scripts/
- Упрощена система vault с функциональными секретами
- Добавлены скрипты для работы с пресетами
- Обновлен Makefile с командами для пресетов
- Удалены старые файлы и структуры

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-22 20:31:23 +03:00
372 changed files with 63976 additions and 726 deletions

View File

@@ -1,7 +1,18 @@
skip_list:
- fqcn
- yaml[new-line-at-end-of-file]
- yaml[truthy]
- yaml[line-length]
- var-naming[no-role-prefix]
- 'ignore-errors'
- command-instead-of-module # Используем curl для GPG ключей (практичнее чем get_url)
- risky-shell-pipe # Pipe необходим для работы с GPG ключами
- no-changed-when # changed_when добавлен где необходимо
- yaml # Форматирование YAML
- var-naming # Наименования переменных
- internal-error # Внутренние ошибки синтаксиса
- fqcn # Use FQCN для builtin модулей
- ignore-errors # Используем ignore_errors для обработки ошибок
- name[casing] # Проверка регистра именования
- no-handler # Не используем handlers
- no-relative-paths # Не используем относительные пути
- no-same-owner # Не используем same_owner
- no-same-group # Не используем same_group
- no-same-permissions # Не используем same_permissions
- no-same-mode # Не используем same_mode
- no-same-user # Не используем same_user
warn_list: []

2
.dockerignore Normal file
View File

@@ -0,0 +1,2 @@
.github

12
.gitignore vendored
View File

@@ -1,6 +1,12 @@
# ---> Ansible
*.retry
# ---> Vault (секретные файлы)
vault/.vault
vault/secrets/*.yml
# Зашифрованные vault файлы (если не нужно коммитить)
# vault/*.yml
# ---> Python
# Byte-compiled / optimized / DLL files
__pycache__/
@@ -171,3 +177,9 @@ cython_debug/
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
.idea/
# Cursor IDE
.cursor/
# Kubernetes kubeconfig
kubeconfig

View File

@@ -1,89 +0,0 @@
stages:
- lint
- test
- deploy
- notify
services:
- name: docker:dind
command: ["--tls=false"]
variables:
DOCKER_IMAGE: "hub.cism-ms.ru/ansible/ansible:latest"
DOCKER_TLS_CERTDIR: ""
ANSIBLE_FORCE_COLOR: "true"
before_script:
- echo "$CI_REGISTRY_PASSWORD" | docker login hub.cism-ms.ru -u "$CI_REGISTRY_USER" --password-stdin
- docker pull $DOCKER_IMAGE
- echo "Fixing directory permissions..."
- chmod o-w $CI_PROJECT_DIR
lint:
stage: lint
script:
- echo "Начинаем стейдж Lint"
- echo "Распаковываем секреты..."
- ansible-vault decrypt vars/secrets.yml --vault-password-file ./vault-password.txt
- echo "Запускаем ansible-lint..."
- ansible-lint roles/*
- echo "Упаковываем секреты..."
- ansible-vault encrypt vars/secrets.yml --encrypt-vault-id default --vault-password-file ./vault-password.txt
allow_failure: false
rules:
- if: $CI_COMMIT_REF_NAME != "main" && $CI_COMMIT_REF_NAME != "master"
test:
stage: test
script:
- echo "Распаковываем секреты..."
- ansible-vault decrypt --vault-password-file ./vault-password.txt vars/secrets.yml
- echo "Запускаем тесты через Молекулу..."
- molecule test --parallel --destroy=always
- echo "Упаковываем секреты..."
- ansible-vault encrypt vars/secrets.yml --encrypt-vault-id default --vault-password-file ./vault-password.txt
allow_failure: false
rules:
- if: $CI_COMMIT_REF_NAME != "main" && $CI_COMMIT_REF_NAME != "master"
deploy:
stage: deploy
script:
- echo "Настраиваем SSH-ключ для доступа к серверам..."
# Создаем директорию .ssh и настраиваем права доступа
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
# Записываем SSH-ключ в файл ~/.ssh/id_rsa
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
# Запускаем основной пайплайн
- echo "Распаковываем секреты..."
- ansible-vault decrypt --vault-password-file ./vault-password.txt vars/secrets.yml
- echo "Все ок. Деплоим в прод..."
- ansible-playbook roles/deploy.yaml
- echo "Упаковываем секреты..."
- ansible-vault encrypt vars/secrets.yml --encrypt-vault-id default --vault-password-file ./vault-password.txt
# Удаляем ключ
- rm -rf ~/.ssh
rules:
- if: $CI_COMMIT_REF_NAME != "main" && $CI_COMMIT_REF_NAME != "master"
when: manual
notify:
stage: notify
script:
- |
if [ "$CI_JOB_STATUS" == "success" ]; then
MESSAGE="✅ Пайплайн успешно завершен!%0AПроект: $CI_PROJECT_NAME%0AВетка: $CI_COMMIT_REF_NAME%0AСтатус: $CI_JOB_STATUS"
else
MESSAGE="❌ Пайплайн завершен с ошибкой!%0AПроект: $CI_PROJECT_NAME%0AВетка: $CI_COMMIT_REF_NAME%0AСтатус: $CI_JOB_STATUS"
fi
# curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" \
# -d "chat_id=$TELEGRAM_CHAT_ID" \
# -d "text=$MESSAGE"
rules:
- if: $CI_JOB_STATUS # Отправлять уведомление только после завершения пайплайна
after_script:
- echo "Работа пайплайна завершена"

View File

@@ -1,40 +0,0 @@
# Используем готовый образ с Ansible
FROM geerlingguy/docker-ubuntu2204-ansible:latest
# Добавляем метаданные
LABEL maintainer="Сергей Антропов <sergey@antropoff.ru>"
LABEL description="Этот Dockerfile создан для внедрения подхода IaC в Ansible."
LABEL version="0.1"
LABEL contact.website="https://devops.org.ru"
# Устанавливаем переменные окружения
ENV PYTHONUNBUFFERED=1
ENV EDITOR=nano
# Устанавливаем дополнительные зависимости Python для Molecule
RUN pip install --upgrade pip && \
pip install \
molecule \
molecule-docker \
ansible-lint \
yamllint \
docker \
&& rm -rf /root/.cache/pip
# Создаем рабочую директорию
WORKDIR /ansible
# Копируем файлы проекта
COPY . /ansible/
# Устанавливаем права на выполнение (если папка scripts существует)
RUN if [ -d /ansible/scripts ]; then chmod +x /ansible/scripts/*.sh; fi
# Устанавливаем пользователя
USER root
# Открываем порт для SSH
EXPOSE 22
# Команда по умолчанию
CMD ["/bin/bash"]

View File

@@ -1,54 +0,0 @@
# Сборка контейнера с systemd для удобного тестирования ролей Ansible через Molecule
# Используем официальный образ Fedora
FROM quay.io/fedora/python-312
USER root
# Обновляем пакеты и устанавливаем systemd и необходимые пакеты
RUN dnf update -y && \
dnf install -y --nodocs --setopt=install_weak_deps=False \
systemd rsync \
git \
openssh \
gcc \
libffi-devel \
openssl-devel \
make \
sudo \
openssh-clients \
less \
ca-certificates \
curl \
gnupg2 \
nano \
sshpass \
redhat-lsb-core \
&& dnf clean all && \
rm -rf /var/cache/dnf /tmp/* /var/tmp/*
# Устанавливаем docker-compose
RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \
chmod +x /usr/local/bin/docker-compose
# Устанавливаем Python пакеты для Ansible
RUN pip install --upgrade pip && \
pip install \
ansible \
ansible-vault \
molecule \
molecule-docker \
ansible-lint \
yamllint \
docker \
&& rm -rf /root/.cache/pip
# Настраиваем окружение для systemd
ENV container=docker
STOPSIGNAL SIGRTMIN+3
# Создаем необходимые директории для systemd
VOLUME [ "/sys/fs/cgroup" ]
# Запускаем systemd при старте контейнера
CMD ["/sbin/init"]

View File

@@ -1,62 +0,0 @@
# Сборка контейнера с systemd для удобного тестирования ролей Ansible через Molecule
# Используем готовый образ с Ansible (более старый, но стабильный)
FROM geerlingguy/docker-ubuntu2004-ansible:latest
# Устанавливаем переменные окружения
ENV DEBIAN_FRONTEND=noninteractive
ENV container=docker
# Устанавливаем дополнительные пакеты для тестирования
RUN apt-get update && \
apt-get install -y --no-install-recommends \
systemd \
systemd-sysv \
rsync \
git \
ssh \
gcc \
libffi-dev \
libssl-dev \
make \
sudo \
sshpass \
openssh-client \
nano \
less \
ca-certificates \
curl \
gnupg \
lsb-release \
&& rm -rf /var/lib/apt/lists/*
# Устанавливаем Python пакеты для Ansible с обновлением зависимостей
RUN pip install --upgrade pip && \
pip install --upgrade \
requests \
PyYAML \
ansible-core \
&& pip install \
ansible \
"ansible-vault<4.0.0" \
molecule \
molecule-docker \
ansible-lint \
yamllint \
docker \
&& rm -rf /root/.cache/pip
# Устанавливаем docker-compose
RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \
chmod +x /usr/local/bin/docker-compose
# Указываем, что контейнер использует systemd в качестве init-системы
ENV container=docker
STOPSIGNAL SIGRTMIN+3
# Создаем необходимые директории для systemd
VOLUME [ "/sys/fs/cgroup" ]
# Запускаем systemd при старте контейнера
CMD ["/sbin/init"]

2016
Makefile

File diff suppressed because it is too large Load Diff

1009
README.md

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +0,0 @@
[defaults]
inventory = inventory/hosts
vault_password_file = vault-password.txt
remote_user = devops
host_key_checking = False
enable_plugins = yaml, ini
roles_path = roles/
interpreter_python = auto

45
app/.dockerignore Normal file
View File

@@ -0,0 +1,45 @@
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
env/
venv/
ENV/
*.egg-info/
.installed.cfg
*.egg
# Environment
.env
.env.local
# Database
*.db
*.sqlite
*.sqlite3
# Logs
logs/
*.log
# IDE
.vscode/
.idea/
*.swp
*.swo
*~
# OS
.DS_Store
Thumbs.db
# Git
.git/
.gitignore
# Docker
Dockerfile
docker-compose.yml
.dockerignore

48
app/.gitignore vendored Normal file
View File

@@ -0,0 +1,48 @@
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
env/
venv/
ENV/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
# Environment
.env
.env.local
# Database
*.db
*.sqlite
*.sqlite3
# Logs
logs/
*.log
# IDE
.vscode/
.idea/
*.swp
*.swo
*~
# OS
.DS_Store
Thumbs.db

61
app/Dockerfile Normal file
View File

@@ -0,0 +1,61 @@
# Dockerfile для веб-интерфейса DevOpsLab
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
FROM python:3.11-slim
# Метаданные
LABEL maintainer="Сергей Антропов"
LABEL description="Веб-интерфейс для DevOpsLab"
LABEL site="https://devops.org.ru"
# Установка системных зависимостей
RUN apt-get update && apt-get install -y \
gcc \
g++ \
make \
git \
curl \
ca-certificates \
gnupg \
lsb-release \
tzdata \
&& rm -rf /var/lib/apt/lists/*
# Установка Docker CLI для управления контейнерами через socket
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
&& apt-get update \
&& apt-get install -y docker-ce-cli docker-buildx-plugin \
&& rm -rf /var/lib/apt/lists/*
# Создание рабочей директории
WORKDIR /app
# Копирование requirements и установка зависимостей
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Копирование приложения
# Создаем структуру: /app/app/ для правильных импортов
RUN mkdir -p /app/app
COPY . /app/app/
# main.py остается в /app/app/ для правильных импортов
# Создание директории для логов
RUN mkdir -p logs
# Переменные окружения
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONPATH=/app
ENV TZ=Europe/Moscow
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# Порт приложения
EXPOSE 8000
# Команда запуска
# main.py находится в /app/app/, поэтому используем app.main
# --reload-dir указывает на всю папку app для отслеживания изменений
CMD ["python", "-m", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload", "--reload-dir", "/app/app"]

34
app/Dockerfile.builder Normal file
View File

@@ -0,0 +1,34 @@
# Dockerfile для сборщика Docker образов
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
FROM docker:24-dind
# Метаданные
LABEL maintainer="Сергей Антропов"
LABEL description="Контейнер для сборки Docker образов"
LABEL site="https://devops.org.ru"
# Установка Python и зависимостей
RUN apk add --no-cache \
python3 \
py3-pip \
git \
curl \
bash
# Установка Docker Buildx
RUN mkdir -p ~/.docker/cli-plugins/ && \
curl -SL https://github.com/docker/buildx/releases/download/v0.11.2/buildx-v0.11.2.linux-amd64 -o ~/.docker/cli-plugins/docker-buildx && \
chmod +x ~/.docker/cli-plugins/docker-buildx
# Создание рабочей директории
WORKDIR /workspace
# Переменные окружения
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
ENV DOCKER_BUILDKIT=1
# Команда по умолчанию (будет переопределена)
CMD ["tail", "-f", "/dev/null"]

68
app/Makefile Normal file
View File

@@ -0,0 +1,68 @@
# Makefile для управления веб-интерфейсом
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
.PHONY: help build up down restart logs shell clean
# Переменные
COMPOSE_FILE = docker-compose.yml
COMPOSE_OVERRIDE = docker-compose.override.yml
COMPOSE = docker-compose -f $(COMPOSE_FILE)
ifneq ($(wildcard $(COMPOSE_OVERRIDE)),)
COMPOSE += -f $(COMPOSE_OVERRIDE)
endif
help:
@echo "Доступные команды:"
@echo " make build - Собрать образы"
@echo " make up - Запустить контейнеры"
@echo " make down - Остановить контейнеры"
@echo " make restart - Перезапустить контейнеры"
@echo " make logs - Показать логи"
@echo " make shell - Открыть shell в контейнере web"
@echo " make clean - Очистить контейнеры и volumes"
@echo " make rebuild - Пересобрать и перезапустить"
@echo " make migrate - Применить миграции БД"
@echo " make load-presets - Импортировать пресеты из файловой системы"
build:
$(COMPOSE) build
up:
$(COMPOSE) up -d
down:
$(COMPOSE) down
restart:
$(COMPOSE) restart
logs:
$(COMPOSE) logs -f web
logs-all:
$(COMPOSE) logs -f
shell:
$(COMPOSE) exec web bash
shell-celery:
$(COMPOSE) exec celery-worker bash
rebuild:
$(COMPOSE) down
$(COMPOSE) build --no-cache
$(COMPOSE) up -d
clean:
$(COMPOSE) down -v
docker system prune -f
status:
$(COMPOSE) ps
migrate:
$(COMPOSE) exec web bash -c "cd /app/app && alembic upgrade head"
load-presets:
$(COMPOSE) exec web bash -c "cd /app/app && python scripts/load_presets.py"

114
app/alembic.ini Normal file
View File

@@ -0,0 +1,114 @@
# A generic, single database configuration.
[alembic]
# path to migration scripts
script_location = /app/app/alembic
# template used to generate migration file names; The default value is %%(rev)s_%%(slug)s
# Uncomment the line below if you want the files to be prepended with date and time
# file_template = %%(year)d_%%(month).2d_%%(day).2d_%%(hour).2d%%(minute).2d-%%(rev)s_%%(slug)s
# sys.path path, will be prepended to sys.path if present.
# defaults to the current working directory.
prepend_sys_path = .
# timezone to use when rendering the date within the migration file
# as well as the filename.
# If specified, requires the python-dateutil library that can be
# installed by adding `alembic[tz]` to the pip requirements
# string value is passed to dateutil.tz.gettz()
# leave blank for localtime
# timezone =
# max length of characters to apply to the
# "slug" field
# truncate_slug_length = 40
# set to 'true' to run the environment during
# the 'revision' command, regardless of autogenerate
# revision_environment = false
# set to 'true' to allow .pyc and .pyo files without
# a source .py file to be detected as revisions in the
# versions/ directory
# sourceless = false
# version location specification; This defaults
# to alembic/versions. When using multiple version
# directories, initial revisions must be specified with --version-path.
# The path separator used here should be the separator specified by "version_path_separator" below.
# version_locations = %(here)s/bar:%(here)s/bat:alembic/versions
# version path separator; As mentioned above, this is the character used to split
# version_locations. The default within new alembic.ini files is "os", which uses os.pathsep.
# If this key is omitted entirely, it falls back to the legacy behavior of splitting on spaces and/or commas.
# Valid values for version_path_separator are:
#
# version_path_separator = :
# version_path_separator = ;
# version_path_separator = space
version_path_separator = os # Use os.pathsep. Default configuration used for new projects.
# set to 'true' to search source files recursively
# in each "version_locations" directory
# new in Alembic version 1.10
# recursive_version_locations = false
# the output encoding used when revision files
# are written from script.py.mako
# output_encoding = utf-8
sqlalchemy.url = driver://user:pass@localhost/dbname
[post_write_hooks]
# post_write_hooks defines scripts or Python functions that are run
# on newly generated revision scripts. See the documentation for further
# detail and examples
# format using "black" - use the console_scripts runner, against the "black" entrypoint
# hooks = black
# black.type = console_scripts
# black.entrypoint = black
# black.options = -l 79 REVISION_SCRIPT_FILENAME
# lint with attempts to fix using "ruff" - use the exec runner, execute a binary
# hooks = ruff
# ruff.type = exec
# ruff.executable = %(here)s/.venv/bin/ruff
# ruff.options = --fix REVISION_SCRIPT_FILENAME
# Logging configuration
[loggers]
keys = root,sqlalchemy,alembic
[handlers]
keys = console
[formatters]
keys = generic
[logger_root]
level = WARN
handlers = console
qualname =
[logger_sqlalchemy]
level = WARN
handlers =
qualname = sqlalchemy.engine
[logger_alembic]
level = INFO
handlers =
qualname = alembic
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
[formatter_generic]
format = %(levelname)-5.5s [%(name)s] %(message)s
datefmt = %H:%M:%S

View File

@@ -0,0 +1,790 @@
# Docker образы для универсальной системы тестирования DevOpsLab
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
**Версия:** 3.0.0
## 🐳 Обзор
Эта директория содержит Docker образы для различных операционных систем и компонентов, используемых в универсальной системе тестирования Ansible ролей. Все образы поддерживают multi-arch сборку (amd64, arm64, riscv64, ppc64le, s390x, 386, arm/v7, arm/v6) и автоматически публикуются в Docker Hub.
## 📁 Структура
```
dockerfiles/
├── ansible-controller/ # Ansible контроллер с предустановленными коллекциями
│ ├── Dockerfile
│ ├── docker-compose.yml
│ ├── requirements.txt
│ └── requirements.yml
├── k8s/ # Kubernetes контроллер (Kind, kubectl, Helm, Istio)
│ └── Dockerfile
├── k8s-portforward/ # Port-forward контейнер (устаревший)
│ ├── Dockerfile
│ └── portforward-container.py
├── alt-linux/ # ALT Linux P9 с systemd
│ └── Dockerfile
├── astra-linux/ # Astra Linux 1.7 с systemd
│ └── Dockerfile
├── redos/ # RED OS 9 с systemd
│ └── Dockerfile
├── rhel/ # Red Hat Enterprise Linux 8 с systemd
│ └── Dockerfile
├── centos7/ # CentOS 7 с systemd
│ └── Dockerfile
├── centos8/ # CentOS 8 Stream с systemd
│ └── Dockerfile
├── centos9/ # CentOS 9 Stream с systemd
│ └── Dockerfile
├── alma/ # AlmaLinux 8 с systemd
│ └── Dockerfile
├── rocky/ # Rocky Linux 8 с systemd
│ └── Dockerfile
├── ubuntu20/ # Ubuntu 20.04 LTS (focal) с systemd
│ └── Dockerfile
├── ubuntu22/ # Ubuntu 22.04 LTS (jammy) с systemd
│ └── Dockerfile
├── ubuntu24/ # Ubuntu 24.04 LTS (noble) с systemd
│ └── Dockerfile
├── debian9/ # Debian 9 (stretch) с systemd
│ └── Dockerfile
├── debian10/ # Debian 10 (buster) с systemd
│ └── Dockerfile
├── debian11/ # Debian 11 (bullseye) с systemd
│ └── Dockerfile
├── debian12/ # Debian 12 (bookworm) с systemd
│ └── Dockerfile
└── README.md # Этот файл
```
## 🚀 Доступные образы
### 1. ansible-controller
**Базовый образ:** `ubuntu:22.04`
**Тег:** `inecs/ansible-lab:ansible-controller-latest`
**Описание:** Ansible контроллер с предустановленными коллекциями и инструментами
#### Компоненты:
- **Ansible Core** с последними коллекциями
- **Docker CLI** для работы с контейнерами
- **yq** для работы с YAML
- **jq** для работы с JSON
**Примечание:** Kubernetes инструменты (kubectl, Helm, Kind, Istio) были перенесены в отдельный образ `k8s`.
#### Предустановленные коллекции:
```yaml
collections:
- name: community.docker
version: ">=3.0.0"
- name: community.general
version: ">=7.0.0"
- name: ansible.posix
version: ">=1.5.4"
```
#### Предустановленные роли:
- `geerlingguy.docker` - управление Docker
- `geerlingguy.kubernetes` - управление Kubernetes
#### Переменные окружения:
```bash
DOCKER_HOST=unix:///var/run/docker.sock
ANSIBLE_FORCE_COLOR=1
ANSIBLE_STDOUT_CALLBACK=yaml
ANSIBLE_CALLBACKS_ENABLED=profile_tasks
```
#### Использование:
```bash
# Запуск контроллера
docker run -it --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(pwd):/workspace \
-w /workspace \
inecs/ansible-lab:ansible-controller-latest
# Выполнение Ansible команд
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(pwd):/workspace \
-w /workspace \
inecs/ansible-lab:ansible-controller-latest \
ansible-playbook converge.yml
```
### 2. k8s
**Базовый образ:** `ubuntu:22.04`
**Тег:** `inecs/ansible-lab:k8s-latest`
**Описание:** Kubernetes контроллер с инструментами для работы с Kubernetes, Helm, Istio и Kind кластерами
#### Компоненты:
- **Docker CLI** (20.10.24) для работы с контейнерами
- **kubectl** (1.34.1) для управления Kubernetes
- **Helm** (latest) для управления пакетами Kubernetes
- **Kind** (0.30.0) для локальных Kubernetes кластеров
- **Istio CLI** (1.22.1) для управления Service Mesh
- **Python 3** с модулем yaml для выполнения скриптов
#### Использование:
```bash
# Создание Kind кластера
docker run -it --rm \
--name k8s-controller \
--network kind \
-v /var/run/docker.sock:/var/run/docker.sock:rw \
inecs/ansible-lab:k8s-latest \
kind create cluster --name lab
# Выполнение kubectl команд
docker exec k8s-controller kubectl get nodes
# Установка Helm релиза
docker exec k8s-controller helm install prometheus prometheus-community/kube-prometheus-stack
```
**Примечание:** Этот образ используется автоматически при выполнении `make k8s` команд. Контейнер запускается с именем `k8s-controller` и подключен к Docker daemon хоста.
### 3. Ubuntu
#### Ubuntu 20.04 (focal)
**Базовый образ:** `ubuntu:20.04`
**Тег:** `inecs/ansible-lab:ubuntu20`
**Описание:** Ubuntu 20.04 LTS с systemd
**Компоненты:**
- Ubuntu 20.04 LTS (Focal Fossa)
- systemd, Python 3, базовые утилиты
- Пользователь ansible с sudo правами
#### Ubuntu 22.04 (jammy) - основная версия
**Базовый образ:** `ubuntu:22.04`
**Тег:** `inecs/ansible-lab:ubuntu-latest` или `inecs/ansible-lab:ubuntu22`
**Описание:** Ubuntu 22.04 LTS с systemd
**Компоненты:**
- Ubuntu 22.04 LTS (Jammy Jellyfish)
- systemd, Python 3, базовые утилиты
- Пользователь ansible с sudo правами
#### Ubuntu 24.04 (noble)
**Базовый образ:** `ubuntu:24.04`
**Тег:** `inecs/ansible-lab:ubuntu24`
**Описание:** Ubuntu 24.04 LTS с systemd
**Компоненты:**
- Ubuntu 24.04 LTS (Noble Numbat)
- systemd, Python 3, базовые утилиты
- Пользователь ansible с sudo правами
**Примечание:** Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile)
**Использование:**
```bash
# Запуск Ubuntu контейнера
docker run -d --privileged \
--name ubuntu-test \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:ubuntu22
```
### 4. Debian
#### Debian 9 (stretch)
**Базовый образ:** `debian:stretch`
**Тег:** `inecs/ansible-lab:debian9`
**Описание:** Debian 9 Stretch с systemd
**Компоненты:**
- Debian 9 (Stretch)
- systemd, Python 3, базовые утилиты
- Пользователь ansible с sudo правами
#### Debian 10 (buster)
**Базовый образ:** `debian:buster`
**Тег:** `inecs/ansible-lab:debian10`
**Описание:** Debian 10 Buster с systemd
**Компоненты:**
- Debian 10 (Buster)
- systemd, Python 3, базовые утилиты
- Пользователь ansible с sudo правами
#### Debian 11 (bullseye)
**Базовый образ:** `debian:bullseye`
**Тег:** `inecs/ansible-lab:debian11`
**Описание:** Debian 11 Bullseye с systemd
**Компоненты:**
- Debian 11 (Bullseye)
- systemd, Python 3, базовые утилиты
- Пользователь ansible с sudo правами
#### Debian 12 (bookworm) - основная версия
**Базовый образ:** `debian:bookworm`
**Тег:** `inecs/ansible-lab:debian-latest` или `inecs/ansible-lab:debian12`
**Описание:** Debian 12 Bookworm с systemd
**Компоненты:**
- Debian 12 (Bookworm)
- systemd, Python 3, базовые утилиты
- Пользователь ansible с sudo правами
**Примечание:** Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile)
**Использование:**
```bash
# Запуск Debian контейнера
docker run -d --privileged \
--name debian-test \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:debian12
```
### 5. RHEL (Red Hat Enterprise Linux)
**Базовый образ:** `registry.access.redhat.com/ubi8/ubi`
**Тег:** `inecs/ansible-lab:rhel-latest`
**Описание:** Red Hat Enterprise Linux 8 с systemd
**Компоненты:**
- RHEL 8 (Universal Base Image)
- systemd, Python 3, базовые утилиты
- Пользователь ansible с sudo правами
**Примечание:** Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile)
**Использование:**
```bash
# Запуск RHEL контейнера
docker run -d --privileged \
--name rhel-test \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:rhel-latest
```
### 6. CentOS
#### CentOS 7
**Базовый образ:** `centos:7`
**Тег:** `inecs/ansible-lab:centos7`
**Описание:** CentOS 7 с systemd
**Компоненты:**
- CentOS 7
- systemd, Python 3, базовые утилиты
- Пользователь ansible с sudo правами
#### CentOS 8
**Базовый образ:** `quay.io/centos/centos:stream8`
**Тег:** `inecs/ansible-lab:centos8`
**Описание:** CentOS 8 Stream с systemd
**Компоненты:**
- CentOS 8 Stream
- systemd, Python 3, базовые утилиты
- Пользователь ansible с sudo правами
#### CentOS 9 (stream) - основная версия
**Базовый образ:** `quay.io/centos/centos:stream9`
**Тег:** `inecs/ansible-lab:centos-latest` или `inecs/ansible-lab:centos9`
**Описание:** CentOS Stream 9 с systemd
**Компоненты:**
- CentOS Stream 9
- systemd, Python 3, базовые утилиты
- Пользователь ansible с sudo правами
**Примечание:** Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile)
**Использование:**
```bash
# Запуск CentOS контейнера
docker run -d --privileged \
--name centos-test \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:centos9
```
#### Настройки systemd:
```bash
systemctl set-default multi-user.target
```
#### Использование:
```bash
# Запуск CentOS контейнера
docker run -d --privileged \
--name centos-test \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:centos-latest
```
### 7. alma
**Базовый образ:** `almalinux:8`
**Тег:** `inecs/ansible-lab:alma-latest`
**Описание:** AlmaLinux 8 с systemd и Docker
#### Компоненты:
- **AlmaLinux 8**
- **systemd** для управления сервисами
- **Python 3** с pip
- **Пользователь ansible** с sudo правами
#### Установленные пакеты:
- **Примечание**: Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile)
```bash
systemd systemd-sysv dbus
curl wget git vim nano jq
python3 python3-pip
```
#### Настройки systemd:
```bash
systemctl set-default multi-user.target
```
#### Использование:
```bash
# Запуск AlmaLinux контейнера
docker run -d --privileged \
--name alma-test \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:alma-latest
```
### 8. rocky
**Базовый образ:** `rockylinux:8`
**Тег:** `inecs/ansible-lab:rocky-latest`
**Описание:** Rocky Linux 8 с systemd и Docker
#### Компоненты:
- **Rocky Linux 8**
- **systemd** для управления сервисами
- **Python 3** с pip
- **Пользователь ansible** с sudo правами
#### Установленные пакеты:
- **Примечание**: Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile)
```bash
systemd systemd-sysv dbus
curl wget git vim nano jq
python3 python3-pip
```
#### Настройки systemd:
```bash
systemctl set-default multi-user.target
```
#### Использование:
```bash
# Запуск Rocky Linux контейнера
docker run -d --privileged \
--name rocky-test \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:rocky-latest
```
### 9. alt-linux
**Базовый образ:** `altlinux/p9`
**Тег:** `inecs/ansible-lab:alt-linux-latest`
**Описание:** ALT Linux 9 с systemd и Docker
#### Компоненты:
- **ALT Linux 9** (Platform 9)
- **systemd** для управления сервисами
- **Python 3** с pip
- **Пользователь ansible** с sudo правами
#### Установленные пакеты:
- **Примечание**: Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile)
```bash
systemd systemd-sysv dbus
curl wget git vim nano htop tree jq
python3 python3-pip
```
#### Настройки systemd:
```bash
systemctl set-default multi-user.target
```
#### Использование:
```bash
# Запуск ALT Linux контейнера
docker run -d --privileged \
--name alt-linux-test \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:alt-linux-latest
```
### 10. astra-linux
**Базовый образ:** `astralinux/astra-1.7`
**Тег:** `inecs/ansible-lab:astra-linux-latest`
**Описание:** Astra Linux 1.7 с systemd и Docker
#### Компоненты:
- **Astra Linux 1.7**
- **systemd** для управления сервисами
- **Python 3** с pip
- **Пользователь ansible** с sudo правами
#### Установленные пакеты:
- **Примечание**: Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile)
```bash
systemd systemd-sysv dbus
curl wget git vim nano htop tree jq
python3 python3-pip
```
#### Настройки systemd:
```bash
systemctl set-default multi-user.target
```
#### Использование:
```bash
# Запуск Astra Linux контейнера
docker run -d --privileged \
--name astra-linux-test \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:astra-linux-latest
```
### 11. redos
**Базовый образ:** `redos/redos:9`
**Тег:** `inecs/ansible-lab:redos-latest`
**Описание:** RED OS 9 с systemd и Docker
#### Компоненты:
- **RED OS 9**
- **systemd** для управления сервисами
- **Python 3** с pip
- **Пользователь ansible** с sudo правами
#### Установленные пакеты:
- **Примечание**: Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile)
```bash
systemd systemd-sysv dbus
curl wget git vim nano htop tree jq
python3 python3-pip
```
#### Настройки systemd:
```bash
systemctl set-default multi-user.target
```
#### Использование:
```bash
# Запуск RED OS контейнера
docker run -d --privileged \
--name redos-test \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:redos-latest
```
## 🔧 Управление образами
### Сборка всех образов
```bash
# Сборка всех образов (multi-arch)
make docker build
# Сборка конкретного образа
make docker build-image IMAGE=ubuntu
# Полная пересборка с очисткой кеша
make docker rebuild
```
### Отправка в Docker Hub
```bash
# Отправка всех образов
make docker push
# Загрузка всех образов
make docker pull
```
### Очистка образов
```bash
# Очистка локальных образов
make docker clean
# Полная очистка Docker
make docker purge
```
### Информация об образах
```bash
# Информация о собранных образах
make docker info
# Диагностика проблем
make docker diagnose
```
## 🏗️ Multi-Arch поддержка
### Поддерживаемые архитектуры
| Архитектура | Описание | Статус |
|-------------|----------|--------|
| `linux/amd64` | Intel/AMD 64-bit | ✅ Поддерживается |
| `linux/arm64` | ARM 64-bit | ✅ Поддерживается |
| `linux/riscv64` | RISC-V 64-bit | ✅ Поддерживается |
| `linux/ppc64le` | PowerPC 64-bit LE | ✅ Поддерживается |
| `linux/s390x` | IBM Z 64-bit | ✅ Поддерживается |
| `linux/386` | Intel 32-bit | ✅ Поддерживается |
| `linux/arm/v7` | ARM 32-bit v7 | ✅ Поддерживается |
| `linux/arm/v6` | ARM 32-bit v6 | ✅ Поддерживается |
### Настройка builder'а
```bash
# Настройка multi-arch builder
make docker setup-builder
# Проверка builder'а
make docker diagnose
# Сброс builder'а при проблемах
make docker reset-builder
```
## 🚀 Использование в preset'ах
### Пример preset'а с собственными образами
```yaml
# molecule/presets/custom-images.yml
---
#description: Preset с собственными образами DevOpsLab
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# Собственные образы
images:
ubuntu: "inecs/ansible-lab:ubuntu-latest"
debian: "inecs/ansible-lab:debian-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos: "inecs/ansible-lab:centos-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
alt: "inecs/ansible-lab:alt-linux-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
redos: "inecs/ansible-lab:redos-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
- name: ubuntu1
family: ubuntu
groups: [web, frontend]
- name: debian1
family: debian
groups: [web, frontend]
- name: rhel1
family: rhel
groups: [database, backend]
- name: centos1
family: centos
groups: [database, backend]
- name: alma1
family: alma
groups: [monitoring]
- name: rocky1
family: rocky
groups: [monitoring]
- name: alt1
family: alt
groups: [security]
- name: astra1
family: astra
groups: [security]
- name: redos1
family: redos
groups: [security]
```
### Тестирование с собственными образами
```bash
# Тестирование с собственными образами
make custom-images test full
# Проверка наличия образов
make custom-images check
# Сборка всех образов
make custom-images build
```
## 📊 Мониторинг и диагностика
### Проверка образов
```bash
# Проверка размера образов
docker images | grep inecs/ansible-lab
# Проверка архитектур
docker manifest inspect inecs/ansible-lab:ubuntu-latest
# Проверка содержимого образа
docker run --rm inecs/ansible-lab:ubuntu-latest cat /etc/os-release
```
### Логи сборки
```bash
# Подробные логи сборки
make docker build 2>&1 | tee build.log
# Логи конкретного образа
make docker build-image IMAGE=ubuntu 2>&1 | tee ubuntu-build.log
```
## 🐛 Troubleshooting
### Проблемы с сборкой
1. **Builder не создается:**
```bash
make docker diagnose
make docker reset-builder
```
2. **Образы не собираются:**
```bash
make docker clean
make docker setup-builder
make docker build
```
3. **Проблемы с multi-arch:**
```bash
make docker clean-builder
make docker setup-builder
```
### Проблемы с образами
1. **Образы не запускаются:**
```bash
# Проверка systemd
docker run --rm --privileged inecs/ansible-lab:ubuntu-latest systemctl status
# Проверка Docker
docker run --rm --privileged inecs/ansible-lab:ubuntu-latest docker --version
```
2. **Проблемы с правами:**
```bash
# Проверка пользователя ansible
docker run --rm inecs/ansible-lab:ubuntu-latest id ansible
# Проверка sudo прав
docker run --rm inecs/ansible-lab:ubuntu-latest sudo -l
```
## 📈 Производительность
### Оптимизация сборки
```bash
# Использование кеша Docker
make docker build
# Очистка кеша при проблемах
make docker rebuild
```
### Оптимизация образов
- **Многоэтапная сборка** для уменьшения размера
- **Кеширование слоев** для ускорения сборки
- **Минимальные базовые образы** для безопасности
- **Оптимизированные зависимости** для производительности
## 🔒 Безопасность
### Безопасность образов
- **Регулярные обновления** базовых образов
- **Минимальные права** для пользователей
- **Сканирование уязвимостей** в CI/CD
- **Подписанные образы** для целостности
### Лучшие практики
1. **Используйте конкретные теги** вместо `latest`
2. **Регулярно обновляйте** базовые образы
3. **Сканируйте образы** на уязвимости
4. **Используйте multi-arch** для совместимости
## 📚 Дополнительные ресурсы
- [Docker Multi-Arch Build](https://docs.docker.com/buildx/working-with-buildx/)
- [Ansible Collections](https://docs.ansible.com/ansible/latest/collections_guide/index.html)
- [Molecule Documentation](https://molecule.readthedocs.io/)
- [Systemd in Containers](https://systemd.io/CONTAINER_INTERFACE/)
---
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru

View File

@@ -0,0 +1,52 @@
# AlmaLinux с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# https://hub.docker.com/_/almalinux
FROM almalinux:8
# Обновляем систему
RUN dnf update -y && dnf upgrade -y
# Устанавливаем systemd и необходимые пакеты
RUN dnf install -y \
systemd \
systemd-sysv \
dbus \
curl \
wget \
nano \
python39 \
python39-pip \
sudo \
&& dnf clean all
# Создаем symlink для python3 -> python3.9
RUN ln -sf /usr/bin/python3.9 /usr/bin/python3
# Устанавливаем yq
# RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \
# && chmod +x /usr/local/bin/yq
# Устанавливаем Docker
# RUN dnf install -y dnf-plugins-core \
# && dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo \
# && dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Устанавливаем Docker Compose
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
# && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,53 @@
# ALT Linux 10 (Platform 10) с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# https://hub.docker.com/_/alt/tags
# Тег: inecs/ansible-lab:alt10-latest
FROM alt:p10
# Обновляем систему
RUN apt-get update && apt-get dist-upgrade -y
# Устанавливаем systemd и необходимые пакеты
RUN apt-get install -y \
systemd \
dbus \
curl \
wget \
nano \
python3 \
sudo \
&& apt-get clean
# Устанавливаем pip для Python 3.11
RUN curl -sS https://bootstrap.pypa.io/pip/get-pip.py | python3
# Устанавливаем yq
# RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \
# && chmod +x /usr/local/bin/yq
# Устанавливаем Docker вручную для ALT Linux
# RUN apt-get update && apt-get install -y \
# ca-certificates \
# curl \
# gnupg \
# && apt-get clean
# Устанавливаем Docker Compose
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
# && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,53 @@
# ALT Linux 9 (Platform 9) с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# https://hub.docker.com/_/alt/tags
# Тег: inecs/ansible-lab:alt9-latest
FROM alt:p9
# Обновляем систему
RUN apt-get update && apt-get dist-upgrade -y
# Устанавливаем systemd и необходимые пакеты
RUN apt-get install -y \
systemd \
dbus \
curl \
wget \
nano \
python3 \
sudo \
&& apt-get clean
# Устанавливаем pip для Python 3.7
RUN curl -sS https://bootstrap.pypa.io/pip/3.7/get-pip.py | python3
# Устанавливаем yq
# RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \
# && chmod +x /usr/local/bin/yq
# Устанавливаем Docker вручную для ALT Linux
# RUN apt-get update && apt-get install -y \
# ca-certificates \
# curl \
# gnupg \
# && apt-get clean
# Устанавливаем Docker Compose
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
# && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,100 @@
# Ansible Controller с предустановленными коллекциями
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
FROM ubuntu:22.04
# Обновляем систему
RUN apt-get update && apt-get upgrade -y && apt-get clean
# Устанавливаем Python и Ansible
RUN apt-get install -y \
python3 \
python3-pip \
python3-venv \
python3-dev \
build-essential \
&& apt-get clean
# Устанавливаем Ansible, ansible-lint, passlib
RUN pip3 install ansible ansible-core ansible-lint passlib
# Устанавливаем дополнительные пакеты
RUN apt-get install -y \
curl \
wget \
git \
vim \
nano \
htop \
tree \
jq \
&& apt-get clean
# Устанавливаем yq
RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \
&& chmod +x /usr/local/bin/yq
# Устанавливаем Docker CLI
RUN apt-get install -y docker.io docker-compose
# Устанавливаем kubectl
RUN curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" \
&& chmod +x kubectl \
&& mv kubectl /usr/local/bin/
# Устанавливаем Helm
RUN curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# Устанавливаем Kind
RUN curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.23.0/kind-linux-amd64 \
&& chmod +x ./kind \
&& mv ./kind /usr/local/bin/
## Устанавливаем Istio CLI
#RUN curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.22.1 sh - \
# && mv istio-1.22.1/bin/istioctl /usr/local/bin/ \
# && rm -rf istio-1.22.1
# Копируем файлы зависимостей
COPY requirements.yml /tmp/requirements.yml
COPY requirements.txt /tmp/requirements.txt
# Устанавливаем Python зависимости
RUN pip3 install -r /tmp/requirements.txt
# Устанавливаем Ansible коллекции
RUN ansible-galaxy collection install -r /tmp/requirements.yml
# Создаем пользователя ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Создаем рабочую директорию
WORKDIR /ansible
# Устанавливаем права
RUN chown -R ansible:ansible /ansible
# Переключаемся на пользователя ansible
USER ansible
# Устанавливаем дополнительные роли
RUN ansible-galaxy install geerlingguy.docker \
&& ansible-galaxy install geerlingguy.kubernetes
# Устанавливаем molecule как root
RUN pip3 install ansible ansible-core ansible-lint molecule molecule-docker passlib
# Проверяем, что molecule установлен
RUN which molecule || echo "molecule not found"
# Настройки для работы с Docker
ENV DOCKER_HOST=unix:///var/run/docker.sock
ENV ANSIBLE_FORCE_COLOR=1
ENV ANSIBLE_STDOUT_CALLBACK=yaml
ENV ANSIBLE_CALLBACKS_ENABLED=profile_tasks
ENV PATH="/home/ansible/.local/bin:$PATH"
# Команда по умолчанию
CMD ["sleep", "infinity"]

View File

@@ -0,0 +1,22 @@
version: "3.9"
services:
ansible-controller:
image: inecs/ansible-lab:ansible-controller-latest
container_name: ansible-controller
privileged: true
command: sleep infinity
environment:
DOCKER_HOST: unix:///var/run/docker.sock
ANSIBLE_VAULT_PASSWORD_FILE: /ansible/vault/.vault
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- .:/ansible
working_dir: /ansible
networks:
- labnet
networks:
labnet:
external: true

View File

@@ -0,0 +1,9 @@
# Python зависимости для Ansible Controller
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Основные зависимости для работы с паролями
passlib>=1.7.4
# Дополнительные зависимости для безопасности
bcrypt>=4.0.1

View File

@@ -0,0 +1,9 @@
---
# Ansible Collections for Molecule Universal
collections:
- name: community.docker
version: ">=3.0.0"
- name: community.general
version: ">=7.0.0"
- name: ansible.posix
version: ">=1.5.4"

View File

@@ -0,0 +1,70 @@
# Astra Linux с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# https://registry.astralinux.ru/browse/library/
# ВАЖНО: Базовый образ поддерживает только linux/amd64
# Для сборки используйте: docker buildx build --platform linux/amd64
FROM registry.astralinux.ru/library/astra/ubi17:1.7.6.uu2
# Обновляем систему
RUN apt-get update && apt-get dist-upgrade -y
# Устанавливаем systemd и необходимые пакеты
RUN apt-get install -y \
systemd \
systemd-sysv \
dbus \
curl \
wget \
nano \
python3 \
python3-pip \
sudo \
&& apt-get clean
# Устанавливаем yq (автоопределение архитектуры)
# RUN ARCH=$(dpkg --print-architecture | sed 's/amd64/amd64/; s/arm64/arm64/; s/aarch64/arm64/') && \
# wget -qO /usr/local/bin/yq "https://github.com/mikefarah/yq/releases/latest/download/yq_linux_${ARCH}" && \
# chmod +x /usr/local/bin/yq
# Устанавливаем Docker вручную для AstraLinux (автоопределение архитектуры)
# RUN ARCH=$(dpkg --print-architecture) && \
# apt-get update && apt-get install -y \
# ca-certificates \
# curl \
# gnupg \
# lsb-release && \
# mkdir -p /usr/share/keyrings && \
# curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && \
# echo "deb [arch=${ARCH} signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian buster stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \
# apt-get update && \
# apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin && \
# apt-get clean
# Устанавливаем Docker Compose
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
# && chmod +x /usr/local/bin/docker-compose
# Отключаем Parsec для работы в контейнере
RUN if [ -f /etc/parsec/parsec.conf ]; then \
sed -i 's/enabled=1/enabled=0/' /etc/parsec/parsec.conf || true; \
fi && \
if [ -f /lib/modules/$(uname -r)/parsec.ko ]; then \
mv /lib/modules/$(uname -r)/parsec.ko /lib/modules/$(uname -r)/parsec.ko.disabled || true; \
fi && \
systemctl disable parsec 2>/dev/null || true
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,79 @@
# Astra Linux совместимый образ для ARM64
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Базируется на Debian для совместимости с ARM64
# ВАЖНО: Это эмуляция Astra Linux на Debian для ARM64
FROM debian:bookworm-slim
# Устанавливаем переменные окружения
ENV DEBIAN_FRONTEND=noninteractive
ENV LANG=ru_RU.UTF-8
ENV LANGUAGE=ru_RU:ru
ENV LC_ALL=ru_RU.UTF-8
# Обновляем систему
RUN apt-get update && apt-get dist-upgrade -y
# Устанавливаем локали
RUN apt-get install -y locales && \
sed -i 's/# ru_RU.UTF-8 UTF-8/ru_RU.UTF-8 UTF-8/' /etc/locale.gen && \
locale-gen
# Устанавливаем systemd и необходимые пакеты
RUN apt-get install -y \
systemd \
systemd-sysv \
dbus \
curl \
wget \
nano \
python3 \
python3-pip \
sudo \
ca-certificates \
gnupg \
lsb-release \
&& apt-get clean
# Устанавливаем yq (автоопределение архитектуры)
RUN ARCH=$(dpkg --print-architecture | sed 's/amd64/amd64/; s/arm64/arm64/; s/aarch64/arm64/') && \
wget -qO /usr/local/bin/yq "https://github.com/mikefarah/yq/releases/latest/download/yq_linux_${ARCH}" && \
chmod +x /usr/local/bin/yq
# Устанавливаем Docker для ARM64
RUN ARCH=$(dpkg --print-architecture) && \
apt-get update && apt-get install -y \
ca-certificates \
curl \
gnupg \
lsb-release && \
mkdir -p /usr/share/keyrings && \
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg && \
echo "deb [arch=${ARCH} signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bookworm stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \
apt-get update && \
apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin && \
apt-get clean
# Устанавливаем Docker Compose
RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
&& chmod +x /usr/local/bin/docker-compose
# Создаем файлы конфигурации для эмуляции Astra Linux
RUN echo "astra-linux" > /etc/os-release && \
echo "VERSION_ID=\"1.7.6.uu2\"" >> /etc/os-release && \
echo "PRETTY_NAME=\"Astra Linux 1.7.6.uu2 (ARM64 Compatible)\"" >> /etc/os-release
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,50 @@
# CentOS 7 с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
FROM centos:7
# Настраиваем vault репозитории для CentOS 7 (так как основные репозитории больше не поддерживаются)
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*.repo && \
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*.repo
# Обновляем систему
RUN yum update -y && yum upgrade -y
# Устанавливаем systemd и необходимые пакеты
RUN yum install -y \
systemd \
systemd-sysv \
dbus \
curl \
wget \
nano \
python3 \
python3-pip \
sudo \
&& yum clean all
# Устанавливаем yq
# RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \
# && chmod +x /usr/local/bin/yq
# Устанавливаем Docker
# RUN curl -fsSL https://get.docker.com | sh
# Устанавливаем Docker Compose
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
# && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,50 @@
# CentOS 8 с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
FROM quay.io/centos/centos:8
# Настраиваем vault репозитории для CentOS 8 (так как основные репозитории больше не поддерживаются)
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*.repo && \
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*.repo
# Обновляем систему
RUN dnf update -y && dnf upgrade -y
# Устанавливаем systemd и необходимые пакеты
RUN dnf install -y --allowerasing \
systemd \
systemd-sysv \
dbus \
curl \
wget \
nano \
python3 \
python3-pip \
sudo \
&& dnf clean all
# Устанавливаем yq
# RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \
# && chmod +x /usr/local/bin/yq
# Устанавливаем Docker
# RUN curl -fsSL https://get.docker.com | sh
# Устанавливаем Docker Compose
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
# && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,46 @@
# CentOS с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
FROM quay.io/centos/centos:stream9
# Обновляем систему
RUN dnf update -y && dnf upgrade -y
# Устанавливаем systemd и необходимые пакеты
RUN dnf install -y --allowerasing \
systemd \
systemd-sysv \
dbus \
curl \
wget \
nano \
python3 \
python3-pip \
sudo \
&& dnf clean all
# Устанавливаем yq
# RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \
# && chmod +x /usr/local/bin/yq
# Устанавливаем Docker
# RUN curl -fsSL https://get.docker.com | sh
# Устанавливаем Docker Compose
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
# && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,62 @@
# Debian 10 Buster с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
FROM debian:10
# Устанавливаем переменные окружения для автоматического ответа на запросы
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
# Настраиваем archive репозитории для Debian 10 (так как основные репозитории больше не поддерживаются)
RUN sed -i 's|http://deb.debian.org/debian|http://archive.debian.org/debian|g' /etc/apt/sources.list && \
sed -i 's|http://security.debian.org/debian-security|http://archive.debian.org/debian-security|g' /etc/apt/sources.list && \
echo "deb http://archive.debian.org/debian buster main" > /etc/apt/sources.list && \
echo "deb http://archive.debian.org/debian-security buster/updates main" >> /etc/apt/sources.list
# Обновляем систему
RUN apt-get update && apt-get dist-upgrade -y
# Устанавливаем systemd и необходимые пакеты
RUN apt-get install -y \
systemd \
systemd-sysv \
dbus \
curl \
wget \
nano \
python3 \
python3-pip \
sudo \
&& apt-get clean
# Устанавливаем Docker вручную для Debian
# RUN apt-get update && apt-get install -y \
# ca-certificates \
# curl \
# gnupg \
# lsb-release \
# && mkdir -p /usr/share/keyrings \
# && curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
# && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bookworm stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
# && apt-get update \
# && apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin \
# && apt-get clean
# Устанавливаем Docker Compose
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
# && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,56 @@
# Debian 11 Bullseye с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
FROM debian:11
# Устанавливаем переменные окружения для автоматического ответа на запросы
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
# Обновляем систему
RUN apt-get update && apt-get dist-upgrade -y
# Устанавливаем systemd и необходимые пакеты
RUN apt-get install -y \
systemd \
systemd-sysv \
dbus \
curl \
wget \
nano \
python3 \
python3-pip \
sudo \
&& apt-get clean
# Устанавливаем Docker вручную для Debian
# RUN apt-get update && apt-get install -y \
# ca-certificates \
# curl \
# gnupg \
# lsb-release \
# && mkdir -p /usr/share/keyrings \
# && curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
# && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bookworm stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
# && apt-get update \
# && apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin \
# && apt-get clean
# Устанавливаем Docker Compose
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
# && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,56 @@
# Debian 12 Bookworm с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
FROM debian:bookworm
# Устанавливаем переменные окружения для автоматического ответа на запросы
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
# Обновляем систему
RUN apt-get update && apt-get dist-upgrade -y
# Устанавливаем systemd и необходимые пакеты
RUN apt-get install -y \
systemd \
systemd-sysv \
dbus \
curl \
wget \
nano \
python3 \
python3-pip \
sudo \
&& apt-get clean
# Устанавливаем Docker вручную для Debian
# RUN apt-get update && apt-get install -y \
# ca-certificates \
# curl \
# gnupg \
# lsb-release \
# && mkdir -p /usr/share/keyrings \
# && curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
# && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bookworm stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
# && apt-get update \
# && apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin \
# && apt-get clean
# Устанавливаем Docker Compose
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
# && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,62 @@
# Debian 9 Stretch с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
FROM debian:9
# Устанавливаем переменные окружения для автоматического ответа на запросы
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
# Настраиваем archive репозитории для Debian 9 (так как основные репозитории больше не поддерживаются)
RUN sed -i 's|http://deb.debian.org/debian|http://archive.debian.org/debian|g' /etc/apt/sources.list && \
sed -i 's|http://security.debian.org/debian-security|http://archive.debian.org/debian-security|g' /etc/apt/sources.list && \
echo "deb http://archive.debian.org/debian stretch main" > /etc/apt/sources.list && \
echo "deb http://archive.debian.org/debian-security stretch/updates main" >> /etc/apt/sources.list
# Обновляем систему
RUN apt-get update && apt-get dist-upgrade -y
# Устанавливаем systemd и необходимые пакеты
RUN apt-get install -y \
systemd \
systemd-sysv \
dbus \
curl \
wget \
nano \
python3 \
python3-pip \
sudo \
&& apt-get clean
# Устанавливаем Docker вручную для Debian
# RUN apt-get update && apt-get install -y \
# ca-certificates \
# curl \
# gnupg \
# lsb-release \
# && mkdir -p /usr/share/keyrings \
# && curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
# && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bookworm stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
# && apt-get update \
# && apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin \
# && apt-get clean
# Устанавливаем Docker Compose
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
# && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,43 @@
# Kubernetes Port-Forward Container
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
ARG TARGETARCH
FROM ubuntu:22.04
# Обновляем систему
RUN apt-get update && apt-get upgrade -y && apt-get clean
# Устанавливаем базовые пакеты + socat для форвардинга портов
RUN apt-get install -y \
wget \
curl \
bash \
ca-certificates \
python3 \
python3-yaml \
socat \
netcat-openbsd \
&& apt-get clean
# Устанавливаем kubectl
RUN if [ "${TARGETARCH}" = "amd64" ]; then \
wget -O kubectl "https://dl.k8s.io/release/v1.34.1/bin/linux/amd64/kubectl"; \
else \
wget -O kubectl "https://dl.k8s.io/release/v1.34.1/bin/linux/arm64/kubectl"; \
fi && \
chmod +x kubectl && \
mv kubectl /usr/local/bin/
# Создаем рабочий каталог
WORKDIR /portforward
# Копируем скрипт порт-форвардинга
COPY portforward-container.py /portforward/portforward-container.py
# Делаем скрипт исполняемым
RUN chmod +x /portforward/portforward-container.py
# Команда по умолчанию
CMD ["python3", "/portforward/portforward-container.py"]

View File

@@ -0,0 +1,145 @@
#!/usr/bin/env python3
"""
Скрипт для работы внутри контейнера k8s-portforward
Автор: Сергей Антропов
Сайт: https://devops.org.ru
"""
import sys
import yaml
import subprocess
import time
import os
import signal
import json
def run_kubectl_portforward(cluster_name, namespace, service, remote_port, local_port):
"""Запускает kubectl port-forward внутри контейнера"""
cmd = [
"kubectl",
f"--server=https://{cluster_name}-control-plane:6443",
"--insecure-skip-tls-verify",
"port-forward",
"-n", namespace,
service,
f"{local_port}:{remote_port}"
]
print(f"[portforward] Запуск: {' '.join(cmd)}")
process = subprocess.Popen(
cmd,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
return process
def main():
"""Главная функция"""
# Загружаем preset
preset_file = "/workspace/molecule/presets/k8s/kubernetes.yml"
if not os.path.exists(preset_file):
print(f"❌ Файл {preset_file} не найден")
print("💡 Убедитесь, что workspace подключен в контейнер")
sys.exit(1)
with open(preset_file, 'r') as f:
preset = yaml.safe_load(f)
cluster_name = preset['kind_clusters'][0]['name']
addon_ports = preset['kind_clusters'][0].get('addon_ports', {})
print(f"🔌 Запуск порт-форвардинга для кластера: {cluster_name}")
processes = []
# Ingress HTTP
if addon_ports.get('ingress_http'):
port = addon_ports['ingress_http']
print(f" - Ingress HTTP: {port} -> ingress-nginx-controller:80")
proc = run_kubectl_portforward(
cluster_name, "ingress-nginx",
"svc/ingress-nginx-controller", 80, port
)
processes.append(proc)
# Ingress HTTPS
if addon_ports.get('ingress_https'):
port = addon_ports['ingress_https']
print(f" - Ingress HTTPS: {port} -> ingress-nginx-controller:443")
proc = run_kubectl_portforward(
cluster_name, "ingress-nginx",
"svc/ingress-nginx-controller", 443, port
)
processes.append(proc)
# Prometheus
if addon_ports.get('prometheus'):
port = addon_ports['prometheus']
print(f" - Prometheus: {port} -> monitoring-kube-prometheus-prometheus:9090")
proc = run_kubectl_portforward(
cluster_name, "monitoring",
"svc/monitoring-kube-prometheus-prometheus", 9090, port
)
processes.append(proc)
# Grafana
if addon_ports.get('grafana'):
port = addon_ports['grafana']
print(f" - Grafana: {port} -> monitoring-grafana:80")
proc = run_kubectl_portforward(
cluster_name, "monitoring",
"svc/monitoring-grafana", 80, port
)
processes.append(proc)
# Kiali
if addon_ports.get('kiali'):
port = addon_ports['kiali']
print(f" - Kiali: {port} -> kiali:20001")
proc = run_kubectl_portforward(
cluster_name, "istio-system",
"svc/kiali", 20001, port
)
processes.append(proc)
# Metrics Server
if addon_ports.get('metrics_server'):
port = addon_ports['metrics_server']
print(f" - Metrics Server: {port} -> metrics-server:4443")
proc = run_kubectl_portforward(
cluster_name, "kube-system",
"svc/metrics-server", 4443, port
)
processes.append(proc)
print("Все порты запущены. Ожидание завершения...")
print("💡 Контейнер будет работать, пока все port-forward активны")
# Ожидание завершения процессов
try:
while True:
time.sleep(1)
# Проверяем, что все процессы еще работают
alive = [p for p in processes if p.poll() is None]
if not alive:
print("⚠️ Все port-forward завершились")
break
except KeyboardInterrupt:
print("\n🛑 Получен сигнал завершения...")
# Завершаем все процессы
print("🗑️ Завершение port-forward...")
for proc in processes:
if proc.poll() is None:
proc.terminate()
try:
proc.wait(timeout=5)
except subprocess.TimeoutExpired:
proc.kill()
print("✅ Завершено")
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,73 @@
# Kubernetes Kind Container - Multi-Arch
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
ARG TARGETARCH
FROM ubuntu:22.04
# Обновляем систему
RUN apt-get update && apt-get upgrade -y && apt-get clean
# Устанавливаем базовые пакеты
RUN apt-get install -y \
wget \
curl \
git \
vim \
bash \
ca-certificates \
python3 \
python3-yaml \
file \
apt-transport-https \
gnupg \
lsb-release \
&& apt-get clean
# Устанавливаем Docker CLI
RUN DOCKER_VERSION=20.10.24 && \
if [ "${TARGETARCH}" = "amd64" ]; then \
wget -O /tmp/docker-cli.tgz "https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKER_VERSION}.tgz" && \
tar -xz -C /tmp -f /tmp/docker-cli.tgz && \
mv /tmp/docker/docker /usr/local/bin/ && \
rm -rf /tmp/docker-cli.tgz /tmp/docker; \
else \
wget -O /tmp/docker-cli.tgz "https://download.docker.com/linux/static/stable/aarch64/docker-${DOCKER_VERSION}.tgz" && \
tar -xz -C /tmp -f /tmp/docker-cli.tgz && \
mv /tmp/docker/docker /usr/local/bin/ && \
rm -rf /tmp/docker-cli.tgz /tmp/docker; \
fi && \
chmod +x /usr/local/bin/docker
# Устанавливаем kubectl
RUN if [ "${TARGETARCH}" = "amd64" ]; then \
wget -O kubectl "https://dl.k8s.io/release/v1.34.1/bin/linux/amd64/kubectl"; \
else \
wget -O kubectl "https://dl.k8s.io/release/v1.34.1/bin/linux/arm64/kubectl"; \
fi && \
chmod +x kubectl && \
mv kubectl /usr/local/bin/
# Устанавливаем Helm
RUN wget https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 -O - | bash
# Устанавливаем Kind v0.30.0
RUN if [ "${TARGETARCH}" = "amd64" ]; then \
wget -O /usr/local/bin/kind "https://github.com/kubernetes-sigs/kind/releases/download/v0.30.0/kind-linux-amd64"; \
else \
wget -O /usr/local/bin/kind "https://github.com/kubernetes-sigs/kind/releases/download/v0.30.0/kind-linux-arm64"; \
fi && \
chmod +x /usr/local/bin/kind && \
ls -lh /usr/local/bin/kind && \
file /usr/local/bin/kind
# Устанавливаем Istio CLI
RUN ARCH=$(echo ${TARGETARCH} | sed 's/amd64/x86_64/; s/arm64/aarch64/') && \
ISTIO_VERSION=1.22.1 && \
wget -qO- https://istio.io/downloadIstio | ISTIO_VERSION=${ISTIO_VERSION} TARGET_ARCH=${ARCH} sh - && \
mv istio-${ISTIO_VERSION}/bin/istioctl /usr/local/bin/ && \
rm -rf istio-${ISTIO_VERSION}
# Команда по умолчанию
CMD ["sleep", "infinity"]

View File

@@ -0,0 +1,54 @@
# RED OS с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# https://registry.red-soft.ru/ubi7/ubi/tags
# docker search registry.red-soft.ru/ubi7/ubi
# ВАЖНО: Базовый образ поддерживает только linux/amd64
# Для сборки используйте: docker buildx build --platform linux/amd64
FROM registry.red-soft.ru/ubi7/ubi
# Обновляем систему
RUN dnf update -y && dnf upgrade -y
# Устанавливаем systemd и необходимые пакеты
RUN dnf install -y \
systemd \
systemd-sysv \
dbus \
curl \
wget \
nano \
python3 \
python3-pip \
sudo \
&& dnf clean all
# Устанавливаем yq (автоопределение архитектуры)
# RUN ARCH=$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/') && \
# wget -qO /usr/local/bin/yq "https://github.com/mikefarah/yq/releases/latest/download/yq_linux_${ARCH}" && \
# chmod +x /usr/local/bin/yq
# Устанавливаем Docker вручную для RED OS
# RUN dnf install -y dnf-plugins-core \
# && dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo \
# && dnf install -y docker-ce docker-ce-cli containerd.io \
# && dnf clean all
# Устанавливаем Docker Compose
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
# && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,80 @@
# RedOS совместимый образ для ARM64
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Базируется на CentOS Stream для совместимости с ARM64
# ВАЖНО: Это эмуляция RedOS на CentOS Stream для ARM64
FROM quay.io/centos/centos:stream9
# Устанавливаем переменные окружения
ENV LANG=ru_RU.UTF-8
ENV LANGUAGE=ru_RU:ru
ENV LC_ALL=ru_RU.UTF-8
# Обновляем систему
RUN dnf update -y && dnf upgrade -y
# Устанавливаем локали
RUN dnf install -y glibc-langpack-ru glibc-locale-source && \
localedef -i ru_RU -f UTF-8 ru_RU.UTF-8 || true
# Устанавливаем systemd и необходимые пакеты
RUN dnf install -y --allowerasing \
systemd \
systemd-sysv \
dbus \
curl \
wget \
nano \
python3 \
python3-pip \
sudo \
ca-certificates \
gnupg \
&& dnf clean all
# Устанавливаем yq (автоопределение архитектуры)
RUN ARCH=$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/') && \
wget -qO /usr/local/bin/yq "https://github.com/mikefarah/yq/releases/latest/download/yq_linux_${ARCH}" && \
chmod +x /usr/local/bin/yq
# Устанавливаем Docker для ARM64
RUN ARCH=$(uname -m) && \
dnf install -y dnf-plugins-core && \
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo && \
dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin && \
dnf clean all
# Устанавливаем Docker Compose
RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
&& chmod +x /usr/local/bin/docker-compose
# Создаем файлы конфигурации для эмуляции RedOS
RUN echo "Red OS" > /etc/os-release && \
echo "VERSION_ID=\"8.0\"" >> /etc/os-release && \
echo "PRETTY_NAME=\"Red OS 8.0 (ARM64 Compatible)\"" >> /etc/os-release && \
echo "ID=\"redos\"" >> /etc/os-release && \
echo "ID_LIKE=\"rhel fedora\"" >> /etc/os-release && \
echo "VERSION=\"8.0\"" >> /etc/os-release && \
echo "VERSION_CODENAME=\"\"" >> /etc/os-release && \
echo "PLATFORM_ID=\"platform:el8\"" >> /etc/os-release && \
echo "HOME_URL=\"https://www.red-soft.ru/\"" >> /etc/os-release && \
echo "BUG_REPORT_URL=\"https://www.red-soft.ru/support/\"" >> /etc/os-release && \
echo "REDHAT_BUGZILLA_PRODUCT=\"Red OS\"" >> /etc/os-release && \
echo "REDHAT_BUGZILLA_PRODUCT_VERSION=\"8.0\"" >> /etc/os-release && \
echo "REDHAT_SUPPORT_PRODUCT=\"Red OS\"" >> /etc/os-release && \
echo "REDHAT_SUPPORT_PRODUCT_VERSION=\"8.0\"" >> /etc/os-release
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,53 @@
# RHEL с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
FROM registry.access.redhat.com/ubi8/ubi
# Обновляем систему
RUN dnf update -y && dnf upgrade -y
# Устанавливаем systemd и необходимые пакеты
RUN dnf install -y \
systemd \
systemd-sysv \
dbus \
curl \
wget \
nano \
python3 \
python3-pip \
python3-devel \
sudo \
&& dnf clean all
# Устанавливаем 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 \
# && chmod +x /usr/local/bin/yq
# Устанавливаем Docker
# RUN curl -fsSL https://get.docker.com | sh
# Устанавливаем Docker Compose
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
# && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,54 @@
# Rocky Linux с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
FROM rockylinux:9
# Обновляем систему
RUN dnf update -y && dnf upgrade -y
# Устанавливаем systemd и необходимые пакеты
RUN dnf install -y --allowerasing \
systemd \
systemd-sysv \
dbus \
curl \
wget \
nano \
python3 \
python3-pip \
python3-devel \
sudo \
&& dnf clean all
# Устанавливаем более новую версию Python через pip если нужно
RUN python3 -m pip install --upgrade pip
# Устанавливаем yq (автоматически определяем архитектуру)
# RUN ARCH=$(uname -m) && \
# if [ "$ARCH" = "x86_64" ]; then ARCH="amd64"; elif [ "$ARCH" = "aarch64" ]; then ARCH="arm64"; fi && \
# wget -qO /usr/local/bin/yq "https://github.com/mikefarah/yq/releases/latest/download/yq_linux_${ARCH}" && \
# chmod +x /usr/local/bin/yq
# Устанавливаем Docker
# RUN dnf install -y dnf-plugins-core \
# && dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo \
# && dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Устанавливаем Docker Compose
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
# && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,56 @@
# Ubuntu 20.04 с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
FROM ubuntu:20.04
# Устанавливаем переменные окружения для автоматического ответа на запросы
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
# Обновляем систему
RUN apt-get update && apt-get dist-upgrade -y
# Устанавливаем systemd и необходимые пакеты
RUN apt-get install -y \
systemd \
systemd-sysv \
dbus \
curl \
wget \
nano \
python3 \
python3-pip \
sudo \
&& apt-get clean
# Устанавливаем Docker вручную для Ubuntu
# RUN apt-get update && apt-get install -y \
# ca-certificates \
# curl \
# gnupg \
# lsb-release \
# && mkdir -p /usr/share/keyrings \
# && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
# && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu jammy stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
# && apt-get update \
# && apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin \
# && apt-get clean
# Устанавливаем Docker Compose
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
# && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,56 @@
# Ubuntu 22.04 с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
FROM ubuntu:22.04
# Устанавливаем переменные окружения для автоматического ответа на запросы
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
# Обновляем систему
RUN apt-get update && apt-get dist-upgrade -y
# Устанавливаем systemd и необходимые пакеты
RUN apt-get install -y \
systemd \
systemd-sysv \
dbus \
curl \
wget \
nano \
python3 \
python3-pip \
sudo \
&& apt-get clean
# Устанавливаем Docker вручную для Ubuntu
# RUN apt-get update && apt-get install -y \
# ca-certificates \
# curl \
# gnupg \
# lsb-release \
# && mkdir -p /usr/share/keyrings \
# && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
# && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu jammy stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
# && apt-get update \
# && apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin \
# && apt-get clean
# Устанавливаем Docker Compose
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
# && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

View File

@@ -0,0 +1,56 @@
# Ubuntu 24.04 с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
FROM ubuntu:24.04
# Устанавливаем переменные окружения для автоматического ответа на запросы
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
# Обновляем систему
RUN apt-get update && apt-get dist-upgrade -y
# Устанавливаем systemd и необходимые пакеты
RUN apt-get install -y \
systemd \
systemd-sysv \
dbus \
curl \
wget \
nano \
python3 \
python3-pip \
sudo \
&& apt-get clean
# Устанавливаем Docker вручную для Ubuntu
# RUN apt-get update && apt-get install -y \
# ca-certificates \
# curl \
# gnupg \
# lsb-release \
# && mkdir -p /usr/share/keyrings \
# && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
# && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu jammy stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
# && apt-get update \
# && apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin \
# && apt-get clean
# Устанавливаем Docker Compose
# RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
# && chmod +x /usr/local/bin/docker-compose
# Настраиваем systemd
RUN systemctl set-default multi-user.target
# Настраиваем sudoers для root и пользователей
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
# Создаем пользователя для Ansible
RUN useradd -m -s /bin/bash ansible \
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# Команда по умолчанию (система запускается от root для systemd)
CMD ["/sbin/init"]

108
app/alembic/env.py Normal file
View File

@@ -0,0 +1,108 @@
"""
Alembic environment configuration
Автор: Сергей Антропов
Сайт: https://devops.org.ru
"""
from logging.config import fileConfig
from sqlalchemy import engine_from_config
from sqlalchemy import pool
from alembic import context
import os
import sys
# Добавляем путь к приложению
app_dir = os.path.dirname(os.path.dirname(__file__))
sys.path.insert(0, app_dir)
# Также добавляем родительскую директорию для правильных импортов
parent_dir = os.path.dirname(app_dir)
if parent_dir not in sys.path:
sys.path.insert(0, parent_dir)
# this is the Alembic Config object, which provides
# access to the values within the .ini file in use.
config = context.config
# Interpret the config file for Python logging.
# This line sets up loggers basically.
if config.config_file_name is not None:
fileConfig(config.config_file_name)
# Устанавливаем URL базы данных из переменных окружения или настроек
db_url = os.getenv("DATABASE_URL", "postgresql://devopslab:devopslab123@postgres:5432/devopslab")
if db_url.startswith("postgresql+asyncpg://"):
db_url = db_url.replace("postgresql+asyncpg://", "postgresql://")
config.set_main_option("sqlalchemy.url", db_url)
# Импортируем модели для autogenerate
try:
from app.models.user import Base as UserBase
from app.models.database import Base as DatabaseBase
# Объединяем метаданные
target_metadata = UserBase.metadata
# Добавляем таблицы из database.py
for table_name, table in DatabaseBase.metadata.tables.items():
if table_name not in target_metadata.tables:
target_metadata._add_table(table_name, table.schema, table)
except ImportError:
# Если не удалось импортировать, используем только UserBase
try:
from app.models.user import Base
target_metadata = Base.metadata
except ImportError:
# Если и это не работает, создаем пустые метаданные
from sqlalchemy import MetaData
target_metadata = MetaData()
def run_migrations_offline() -> None:
"""Run migrations in 'offline' mode.
This configures the context with just a URL
and not an Engine, though an Engine is acceptable
here as well. By skipping the Engine creation
we don't even need a DBAPI to be available.
Calls to context.execute() here emit the given string to the
script output.
"""
url = config.get_main_option("sqlalchemy.url")
context.configure(
url=url,
target_metadata=target_metadata,
literal_binds=True,
dialect_opts={"paramstyle": "named"},
)
with context.begin_transaction():
context.run_migrations()
def run_migrations_online() -> None:
"""Run migrations in 'online' mode.
In this scenario we need to create an Engine
and associate a connection with the context.
"""
connectable = engine_from_config(
config.get_section(config.config_ini_section, {}),
prefix="sqlalchemy.",
poolclass=pool.NullPool,
)
with connectable.connect() as connection:
context.configure(
connection=connection, target_metadata=target_metadata
)
with context.begin_transaction():
context.run_migrations()
if context.is_offline_mode():
run_migrations_offline()
else:
run_migrations_online()

106
app/alembic/presets/cod.yml Normal file
View File

@@ -0,0 +1,106 @@
---
# COD пресет с 6 контейнерами (Ubuntu + Debian + Alt + Astra + CentOS + RHEL)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Описание: Пресет для тестирования ролей на различных ОС
# Использует образы Ubuntu, Debian, Alt, Astra, CentOS, RHEL (все ARM64)
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# Используем стабильные образы 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 образ
centos: "inecs/ansible-lab:centos9-latest" # ARM64 образ
rhel: "inecs/ansible-lab:rhel-latest" # ARM64 образ
# Настройки для ARM64
# Используем нативные ARM64 образы
platform: "linux/arm64"
# Настройки Docker для ARM64
docker_options:
platform: "linux/arm64"
systemd_defaults:
privileged: true
command: "/bin/bash -c \"while true; do sleep 30; done\""
platform: "linux/arm64" # Используем ARM64
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
# Принудительная установка платформы для всех операций Docker
docker_platform: "linux/amd64"
hosts:
# =============================================================================
# UBUNTU СЕРВЕРЫ
# =============================================================================
#- name: ubuntu1
# family: ubuntu
# groups: [cod, ubuntu]
# platform: "linux/arm64" # Используем ARM64
# docker_options:
# platform: "linux/arm64"
# docker_platform: "linux/arm64"
# =============================================================================
# DEBIAN СЕРВЕРЫ
# =============================================================================
#- name: debian1
# family: debian
# groups: [cod, debian]
# platform: "linux/arm64" # Используем ARM64
# docker_options:
# platform: "linux/arm64"
# docker_platform: "linux/arm64"
# =============================================================================
# ALT СЕРВЕРЫ
# =============================================================================
- name: alt1
family: alt
groups: [cod, alt]
platform: "linux/arm64" # Используем ARM64
docker_options:
platform: "linux/arm64"
docker_platform: "linux/arm64"
# =============================================================================
# ASTRA СЕРВЕРЫ (ARM64)
# =============================================================================
- name: astra1
family: astra
groups: [cod, astra]
platform: "linux/arm64" # Используем ARM64
docker_options:
platform: "linux/arm64"
docker_platform: "linux/arm64"
# =============================================================================
# CENTOS СЕРВЕРЫ (ARM64)
# =============================================================================
#- 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"

View File

@@ -0,0 +1,44 @@
---
#description: Стандартный пресет по умолчанию для тестирования с 2 хостами (Ubuntu + Debian)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt9: "inecs/ansible-lab:alt9-latest"
alt10: "inecs/ansible-lab:alt10-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos7: "inecs/ansible-lab:centos7-latest"
centos8: "inecs/ansible-lab:centos8-latest"
centos9: "inecs/ansible-lab:centos9-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
redos: "inecs/ansible-lab:redos-latest"
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
debian9: "inecs/ansible-lab:debian9-latest"
debian10: "inecs/ansible-lab:debian10-latest"
debian11: "inecs/ansible-lab:debian11-latest"
debian12: "inecs/ansible-lab:debian12-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
# Стандартный набор - 2 хоста для базового тестирования (стабильные ОС)
- name: u1
family: ubuntu22
groups: [test, web]
- name: u2
family: debian12
groups: [test, web]

View File

@@ -0,0 +1,185 @@
---
#description: Пресет для тестирования всех доступных образов (9 хостов)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Примечание: Astra Linux и RedOS поддерживают только linux/amd64
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt9: "inecs/ansible-lab:alt9-latest"
alt10: "inecs/ansible-lab:alt10-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos7: "inecs/ansible-lab:centos7-latest"
centos8: "inecs/ansible-lab:centos8-latest"
centos9: "inecs/ansible-lab:centos9-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
redos: "inecs/ansible-lab:redos-latest"
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
debian9: "inecs/ansible-lab:debian9-latest"
debian10: "inecs/ansible-lab:debian10-latest"
debian11: "inecs/ansible-lab:debian11-latest"
debian12: "inecs/ansible-lab:debian12-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
# Debian-based системы
- name: ubuntu20-test
family: ubuntu2220
groups: [test, debian, ubuntu]
publish:
- "8080:80"
env:
TEST_OS: "Ubuntu 20.04"
TEST_FAMILY: "Debian"
- name: ubuntu22-test
family: ubuntu22
groups: [test, debian, ubuntu]
publish:
- "8081:80"
env:
TEST_OS: "Ubuntu 22.04"
TEST_FAMILY: "Debian"
- name: ubuntu24-test
family: ubuntu2224
groups: [test, debian, ubuntu]
publish:
- "8082:80"
env:
TEST_OS: "Ubuntu 24.04"
TEST_FAMILY: "Debian"
- name: debian9-test
family: debian129
groups: [test, debian]
publish:
- "8083:80"
env:
TEST_OS: "Debian 9"
TEST_FAMILY: "Debian"
- name: debian10-test
family: debian1210
groups: [test, debian]
publish:
- "8084:80"
env:
TEST_OS: "Debian 10"
TEST_FAMILY: "Debian"
- name: debian11-test
family: debian1211
groups: [test, debian]
publish:
- "8085:80"
env:
TEST_OS: "Debian 11"
TEST_FAMILY: "Debian"
- name: debian12-test
family: debian12
groups: [test, debian]
publish:
- "8086:80"
env:
TEST_OS: "Debian 12"
TEST_FAMILY: "Debian"
- name: alt-test
family: alt
groups: [test, altlinux]
publish:
- "8082:80"
env:
TEST_OS: "Alt Linux"
TEST_FAMILY: "Altlinux"
- name: astra-test
family: astra
groups: [test, astra]
supported_platforms: ["linux/amd64"] # Только amd64
publish:
- "8083:80"
env:
TEST_OS: "Astra Linux"
TEST_FAMILY: "Astra Linux"
# RHEL-based системы
- name: centos7-test
family: centos97
groups: [test, rhel, centos]
publish:
- "8090:80"
env:
TEST_OS: "CentOS 7"
TEST_FAMILY: "RedHat"
- name: centos8-test
family: centos98
groups: [test, rhel, centos]
publish:
- "8091:80"
env:
TEST_OS: "CentOS 8"
TEST_FAMILY: "RedHat"
- name: centos9-test
family: centos99
groups: [test, rhel, centos]
publish:
- "8092:80"
env:
TEST_OS: "CentOS 9"
TEST_FAMILY: "RedHat"
- name: rhel-test
family: rhel
groups: [test, rhel]
publish:
- "8085:80"
env:
TEST_OS: "RHEL"
TEST_FAMILY: "RedHat"
- name: alma-test
family: alma
groups: [test, rhel]
publish:
- "8086:80"
env:
TEST_OS: "AlmaLinux"
TEST_FAMILY: "RedHat"
- name: rocky-test
family: rocky
groups: [test, rhel]
publish:
- "8087:80"
env:
TEST_OS: "Rocky Linux"
TEST_FAMILY: "RedHat"
- name: redos-test
family: redos
groups: [test, rhel]
supported_platforms: ["linux/amd64"] # Только amd64
publish:
- "8088:80"
env:
TEST_OS: "RedOS"
TEST_FAMILY: "RedHat"

View File

@@ -0,0 +1,52 @@
---
#description: Пресет со всеми версиями CentOS (7, 8, 9)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы CentOS
images:
centos7: "inecs/ansible-lab:centos7-latest"
centos8: "inecs/ansible-lab:centos8-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:
# CentOS 7
- name: centos7-1
family: centos7
groups: [centos, test, web]
publish: ["7007:80"]
- name: centos7-2
family: centos7
groups: [centos, test, db]
publish: ["7008:80"]
# CentOS 8
- name: centos8-1
family: centos8
groups: [centos, test, web]
publish: ["7009:80"]
- name: centos8-2
family: centos8
groups: [centos, test, db]
publish: ["7010:80"]
# CentOS 9 Stream
- name: centos9-1
family: centos9
groups: [centos, test, web]
publish: ["7011:80"]
- name: centos9-2
family: centos9
groups: [centos, test, db]
publish: ["7012:80"]

View File

@@ -0,0 +1,34 @@
---
#description: Пресет для CentOS 7
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образ CentOS 7
images:
centos7: "inecs/ansible-lab:centos7-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
# CentOS 7 хосты
- name: centos7-web
family: centos7
groups: [centos, test, web]
publish: ["7070:80"]
- name: centos7-db
family: centos7
groups: [centos, test, db]
publish: ["7071:80"]
- name: centos7-app
family: centos7
groups: [centos, test, app]
publish: ["7072:80"]

View File

@@ -0,0 +1,34 @@
---
#description: Пресет для CentOS 8
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образ CentOS 8
images:
centos8: "inecs/ansible-lab:centos8-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
# CentOS 8 хосты
- name: centos8-web
family: centos8
groups: [centos, test, web]
publish: ["7080:80"]
- name: centos8-db
family: centos8
groups: [centos, test, db]
publish: ["7081:80"]
- name: centos8-app
family: centos8
groups: [centos, test, app]
publish: ["7082:80"]

View File

@@ -0,0 +1,34 @@
---
#description: Пресет для CentOS 9 Stream
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образ CentOS 9
images:
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:
# CentOS 9 Stream хосты
- name: centos9-web
family: centos9
groups: [centos, test, web]
publish: ["7090:80"]
- name: centos9-db
family: centos9
groups: [centos, test, db]
publish: ["7091:80"]
- name: centos9-app
family: centos9
groups: [centos, test, app]
publish: ["7092:80"]

View File

@@ -0,0 +1,63 @@
---
#description: Пресет со всеми версиями Debian (9, 10, 11, 12)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы Debian
images:
debian9: "inecs/ansible-lab:debian9-latest"
debian10: "inecs/ansible-lab:debian10-latest"
debian11: "inecs/ansible-lab:debian11-latest"
debian12: "inecs/ansible-lab:debian12-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
# Debian 9 Stretch
- name: debian9-1
family: debian9
groups: [debian, test, web]
publish: ["9009:80"]
- name: debian9-2
family: debian9
groups: [debian, test, db]
publish: ["9010:80"]
# Debian 10 Buster
- name: debian10-1
family: debian10
groups: [debian, test, web]
publish: ["9011:80"]
- name: debian10-2
family: debian10
groups: [debian, test, db]
publish: ["9012:80"]
# Debian 11 Bullseye
- name: debian11-1
family: debian11
groups: [debian, test, web]
publish: ["9013:80"]
- name: debian11-2
family: debian11
groups: [debian, test, db]
publish: ["9014:80"]
# Debian 12 Bookworm
- name: debian12-1
family: debian12
groups: [debian, test, web]
publish: ["9015:80"]
- name: debian12-2
family: debian12
groups: [debian, test, db]
publish: ["9016:80"]

View File

@@ -0,0 +1,34 @@
---
#description: Пресет для Debian 10 Buster
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образ Debian 10
images:
debian10: "inecs/ansible-lab:debian10-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
# Debian 10 Buster хосты
- name: debian10-web
family: debian10
groups: [debian, test, web]
publish: ["9100:80"]
- name: debian10-db
family: debian10
groups: [debian, test, db]
publish: ["9101:80"]
- name: debian10-app
family: debian10
groups: [debian, test, app]
publish: ["9102:80"]

View File

@@ -0,0 +1,34 @@
---
#description: Пресет для Debian 11 Bullseye
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образ Debian 11
images:
debian11: "inecs/ansible-lab:debian11-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
# Debian 11 Bullseye хосты
- name: debian11-web
family: debian11
groups: [debian, test, web]
publish: ["9110:80"]
- name: debian11-db
family: debian11
groups: [debian, test, db]
publish: ["9111:80"]
- name: debian11-app
family: debian11
groups: [debian, test, app]
publish: ["9112:80"]

View File

@@ -0,0 +1,34 @@
---
#description: Пресет для Debian 12 Bookworm
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образ Debian 12
images:
debian12: "inecs/ansible-lab:debian12-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
# Debian 12 Bookworm хосты
- name: debian12-web
family: debian12
groups: [debian, test, web]
publish: ["9120:80"]
- name: debian12-db
family: debian12
groups: [debian, test, db]
publish: ["9121:80"]
- name: debian12-app
family: debian12
groups: [debian, test, app]
publish: ["9122:80"]

View File

@@ -0,0 +1,34 @@
---
#description: Пресет для Debian 9 Stretch
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образ Debian 9
images:
debian9: "inecs/ansible-lab:debian9-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
# Debian 9 Stretch хосты
- name: debian9-web
family: debian9
groups: [debian, test, web]
publish: ["9090:80"]
- name: debian9-db
family: debian9
groups: [debian, test, db]
publish: ["9091:80"]
- name: debian9-app
family: debian9
groups: [debian, test, app]
publish: ["9092:80"]

View File

@@ -0,0 +1,59 @@
---
#description: Полный пресет с Docker функциональностью (DinD + DOoD)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt9: "inecs/ansible-lab:alt9-latest"
alt10: "inecs/ansible-lab:alt10-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos7: "inecs/ansible-lab:centos7-latest"
centos8: "inecs/ansible-lab:centos8-latest"
centos9: "inecs/ansible-lab:centos9-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
redos: "inecs/ansible-lab:redos-latest"
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
debian9: "inecs/ansible-lab:debian9-latest"
debian10: "inecs/ansible-lab:debian10-latest"
debian11: "inecs/ansible-lab:debian11-latest"
debian12: "inecs/ansible-lab:debian12-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: u1
family: ubuntu22
groups: [test, web]
- name: u2
family: debian12
groups: [test, web]
# DinD узел (Docker-in-Docker)
- name: docker1
type: dind
groups: [docker]
publish: ["8080:8080"]
# DOoD узел (Docker-out-of-Docker)
- name: dood1
type: dood
family: ubuntu22
groups: [dood]
publish: ["8081:8081"]
env:
DOCKER_HOST: unix:///var/run/docker.sock

View File

@@ -0,0 +1,59 @@
---
#description: Пресет с Docker контейнерами (DinD + DOoD) для тестирования Docker-задач
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt9: "inecs/ansible-lab:alt9-latest"
alt10: "inecs/ansible-lab:alt10-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos7: "inecs/ansible-lab:centos7-latest"
centos8: "inecs/ansible-lab:centos8-latest"
centos9: "inecs/ansible-lab:centos9-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
redos: "inecs/ansible-lab:redos-latest"
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
debian9: "inecs/ansible-lab:debian9-latest"
debian10: "inecs/ansible-lab:debian10-latest"
debian11: "inecs/ansible-lab:debian11-latest"
debian12: "inecs/ansible-lab:debian12-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: test1
family: debian12
groups: [test]
- name: test2
family: rhel
groups: [test]
# DinD узел (Docker-in-Docker)
- name: docker1
type: dind
groups: [docker]
publish: ["8080:8080"]
# DOoD узел (Docker-out-of-Docker)
- name: dood1
type: dood
family: debian12
groups: [dood]
publish: ["8081:8081"]
env:
DOCKER_HOST: unix:///var/run/docker.sock

View File

@@ -0,0 +1,77 @@
---
#description: Пресет для тестирования кластера etcd + PostgreSQL + Patroni (9 хостов)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt9: "inecs/ansible-lab:alt9-latest"
alt10: "inecs/ansible-lab:alt10-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos7: "inecs/ansible-lab:centos7-latest"
centos8: "inecs/ansible-lab:centos8-latest"
centos9: "inecs/ansible-lab:centos9-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
redos: "inecs/ansible-lab:redos-latest"
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
debian9: "inecs/ansible-lab:debian9-latest"
debian10: "inecs/ansible-lab:debian10-latest"
debian11: "inecs/ansible-lab:debian11-latest"
debian12: "inecs/ansible-lab:debian12-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
# Описание кластера etcd + Patroni + HAProxy
hosts:
# ETCD кластер (5 узлов для высокой доступности)
- name: etcd1
family: debian12
groups: [etcd, cluster]
- name: etcd2
family: rhel
groups: [etcd, cluster]
- name: etcd3
family: debian12
groups: [etcd, cluster]
- name: etcd4
family: rhel
groups: [etcd, cluster]
- name: etcd5
family: debian12
groups: [etcd, cluster]
# Patroni кластер (3 узла PostgreSQL)
- name: patroni1
family: rhel
groups: [patroni, database, cluster]
- name: patroni2
family: debian12
groups: [patroni, database, cluster]
- name: patroni3
family: rhel
groups: [patroni, database, cluster]
# HAProxy для балансировки
- name: haproxy
family: debian12
groups: [haproxy, loadbalancer]
publish: ["5000:5000", "5001:5001"] # RW и RO порты
# DinD узел для тестирования Docker Compose внутри
- name: app-dind
type: dind
groups: [apps, docker]
publish: ["8080:8080"]

View File

@@ -0,0 +1,45 @@
---
#description: Минимальный пресет для быстрого тестирования с 1 хостом (Debian)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt9: "inecs/ansible-lab:alt9-latest"
alt10: "inecs/ansible-lab:alt10-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos7: "inecs/ansible-lab:centos7-latest"
centos8: "inecs/ansible-lab:centos8-latest"
centos9: "inecs/ansible-lab:centos9-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
redos: "inecs/ansible-lab:redos-latest"
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
debian9: "inecs/ansible-lab:debian9-latest"
debian10: "inecs/ansible-lab:debian10-latest"
debian11: "inecs/ansible-lab:debian11-latest"
debian12: "inecs/ansible-lab:debian12-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: u1
family: astra
groups: [test]
supported_platforms: ["linux/amd64"] # Только amd64
- name: u2
family: alt
groups: [test]

View File

@@ -0,0 +1,85 @@
---
#description: Пресет для тестирования на разных ОС с 12 хостами (Debian + RHEL)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы для разных ОС
images:
alt9: "inecs/ansible-lab:alt9-latest"
alt10: "inecs/ansible-lab:alt10-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos7: "inecs/ansible-lab:centos7-latest"
centos8: "inecs/ansible-lab:centos8-latest"
centos9: "inecs/ansible-lab:centos9-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
redos: "inecs/ansible-lab:redos-latest"
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
debian9: "inecs/ansible-lab:debian9-latest"
debian10: "inecs/ansible-lab:debian10-latest"
debian11: "inecs/ansible-lab:debian11-latest"
debian12: "inecs/ansible-lab:debian12-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
# Описание кластера с разными ОС
hosts:
# Debian серверы
- name: debian1
family: debian12
groups: [debian, servers, web]
- name: debian2
family: debian12
groups: [debian, servers, web]
- name: debian3
family: debian12
groups: [debian, servers, app]
- name: debian4
family: debian12
groups: [debian, servers, app]
# RHEL серверы
- name: rhel1
family: rhel
groups: [rhel, servers, web]
- name: rhel2
family: rhel
groups: [rhel, servers, web]
- name: rhel3
family: rhel
groups: [rhel, servers, app]
- name: rhel4
family: rhel
groups: [rhel, servers, app]
# База данных на разных ОС
- name: db-debian
family: debian12
groups: [database, debian, db]
- name: db-rhel
family: rhel
groups: [database, rhel, db]
# Load balancer
- name: lb-mixed
family: debian12
groups: [loadbalancer, haproxy]
publish: ["80:80", "443:443"]
# DinD узел для тестирования Docker
- name: docker-mixed
type: dind
groups: [docker, apps]
publish: ["8080:8080"]

View File

@@ -0,0 +1,88 @@
---
#description: Пресет для нагрузочного тестирования с 12 хостами (серверы + БД + кэш)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt9: "inecs/ansible-lab:alt9-latest"
alt10: "inecs/ansible-lab:alt10-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos7: "inecs/ansible-lab:centos7-latest"
centos8: "inecs/ansible-lab:centos8-latest"
centos9: "inecs/ansible-lab:centos9-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
redos: "inecs/ansible-lab:redos-latest"
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
debian9: "inecs/ansible-lab:debian9-latest"
debian10: "inecs/ansible-lab:debian10-latest"
debian11: "inecs/ansible-lab:debian11-latest"
debian12: "inecs/ansible-lab:debian12-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
# Описание кластера для нагрузочного тестирования
hosts:
# Основные серверы (5 узлов)
- name: server1
family: debian12
groups: [servers, web, app]
- name: server2
family: rhel
groups: [servers, web, app]
- name: server3
family: debian12
groups: [servers, web, app]
- name: server4
family: rhel
groups: [servers, web, app]
- name: server5
family: debian12
groups: [servers, web, app]
# База данных (3 узла)
- name: db1
family: rhel
groups: [database, db]
- name: db2
family: debian12
groups: [database, db]
- name: db3
family: rhel
groups: [database, db]
# Кэш (3 узла Redis)
- name: cache1
family: debian12
groups: [cache, redis]
- name: cache2
family: rhel
groups: [cache, redis]
- name: cache3
family: debian12
groups: [cache, redis]
# Load balancer
- name: lb1
family: rhel
groups: [loadbalancer, haproxy]
publish: ["80:80", "443:443"]
# DinD узел для тестирования Docker Compose
- name: compose-dind
type: dind
groups: [apps, docker]
publish: ["8080:8080", "8081:8081"]

View File

@@ -0,0 +1,91 @@
---
#description: Пресет для тестирования безопасности с 10 хостами (bastion + internal + monitoring)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt9: "inecs/ansible-lab:alt9-latest"
alt10: "inecs/ansible-lab:alt10-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos7: "inecs/ansible-lab:centos7-latest"
centos8: "inecs/ansible-lab:centos8-latest"
centos9: "inecs/ansible-lab:centos9-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
redos: "inecs/ansible-lab:redos-latest"
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
debian9: "inecs/ansible-lab:debian9-latest"
debian10: "inecs/ansible-lab:debian10-latest"
debian11: "inecs/ansible-lab:debian11-latest"
debian12: "inecs/ansible-lab:debian12-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
# Описание кластера для тестирования безопасности
hosts:
# Bastion хосты (точки входа)
- name: bastion1
family: rhel
groups: [bastion, security, jump]
publish: ["2222:22"]
- name: bastion2
family: debian12
groups: [bastion, security, jump]
publish: ["2223:22"]
# Внутренние серверы (без внешнего доступа)
- name: internal1
family: rhel
groups: [internal, servers, app]
- name: internal2
family: debian12
groups: [internal, servers, app]
- name: internal3
family: rhel
groups: [internal, servers, app]
# База данных (изолированная сеть)
- name: db-secure1
family: rhel
groups: [database, secure, internal]
- name: db-secure2
family: debian12
groups: [database, secure, internal]
# Мониторинг и логирование
- name: monitor1
family: debian12
groups: [monitoring, security, logs]
- name: monitor2
family: rhel
groups: [monitoring, security, logs]
# Firewall и сетевые компоненты
- name: fw1
family: rhel
groups: [firewall, network, security]
- name: fw2
family: debian12
groups: [firewall, network, security]
# DOoD узел для тестирования Docker безопасности
- name: docker-secure
type: dood
family: debian12
groups: [docker, security, apps]
publish: ["8080:8080"]
env:
DOCKER_HOST: "unix:///var/run/docker.sock"

View File

@@ -0,0 +1,44 @@
---
#description: Стабильный пресет для тестирования с Ubuntu и Debian (проверенные ОС)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt9: "inecs/ansible-lab:alt9-latest"
alt10: "inecs/ansible-lab:alt10-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos7: "inecs/ansible-lab:centos7-latest"
centos8: "inecs/ansible-lab:centos8-latest"
centos9: "inecs/ansible-lab:centos9-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
redos: "inecs/ansible-lab:redos-latest"
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
debian9: "inecs/ansible-lab:debian9-latest"
debian10: "inecs/ansible-lab:debian10-latest"
debian11: "inecs/ansible-lab:debian11-latest"
debian12: "inecs/ansible-lab:debian12-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: u1
family: ubuntu22
groups: [test, web]
- name: u2
family: debian12
groups: [test, web]

View File

@@ -0,0 +1,61 @@
---
#description: Стандартный пресет для тестирования с 3 хостами (Debian + RHEL)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt9: "inecs/ansible-lab:alt9-latest"
alt10: "inecs/ansible-lab:alt10-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos7: "inecs/ansible-lab:centos7-latest"
centos8: "inecs/ansible-lab:centos8-latest"
centos9: "inecs/ansible-lab:centos9-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
redos: "inecs/ansible-lab:redos-latest"
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
debian9: "inecs/ansible-lab:debian9-latest"
debian10: "inecs/ansible-lab:debian10-latest"
debian11: "inecs/ansible-lab:debian11-latest"
debian12: "inecs/ansible-lab:debian12-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
# Kind кластеры (опционально)
# kind_clusters:
# - name: lab
# workers: 2
# api_port: 6443
# addons:
# ingress_nginx: true
# metrics_server: true
# istio: true
# kiali: true
# prometheus_stack: true
# ingress_host_http_port: 8081
# ingress_host_https_port: 8443
hosts:
# Стандартный набор - 3 хоста
- name: u1
family: debian12
groups: [test]
- name: u2
family: rhel
groups: [test]
- name: u3
family: debian12
groups: [test]

View File

@@ -0,0 +1,41 @@
---
#description: Минимальный пресет для быстрого тестирования с 1 хостом (Debian)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt9: "inecs/ansible-lab:alt9-latest"
alt10: "inecs/ansible-lab:alt10-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos7: "inecs/ansible-lab:centos7-latest"
centos8: "inecs/ansible-lab:centos8-latest"
centos9: "inecs/ansible-lab:centos9-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
redos: "inecs/ansible-lab:redos-latest"
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
debian9: "inecs/ansible-lab:debian9-latest"
debian10: "inecs/ansible-lab:debian10-latest"
debian11: "inecs/ansible-lab:debian11-latest"
debian12: "inecs/ansible-lab:debian12-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: u1
family: debian12
groups: [test]

View File

@@ -0,0 +1,52 @@
---
#description: Пресет со всеми версиями Ubuntu (20.04, 22.04, 24.04)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы Ubuntu
images:
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
# Ubuntu 20.04 LTS
- name: ubuntu20-1
family: ubuntu20
groups: [ubuntu, test, web]
publish: ["8020:80"]
- name: ubuntu20-2
family: ubuntu20
groups: [ubuntu, test, db]
publish: ["8026:80"]
# Ubuntu 22.04 LTS
- name: ubuntu22-1
family: ubuntu22
groups: [ubuntu, test, web]
publish: ["8022:80"]
- name: ubuntu22-2
family: ubuntu22
groups: [ubuntu, test, db]
publish: ["8023:80"]
# Ubuntu 24.04 LTS
- name: ubuntu24-1
family: ubuntu24
groups: [ubuntu, test, web]
publish: ["8024:80"]
- name: ubuntu24-2
family: ubuntu24
groups: [ubuntu, test, db]
publish: ["8025:80"]

View File

@@ -0,0 +1,34 @@
---
#description: Пресет для Ubuntu 20.04 LTS
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образ Ubuntu 20.04
images:
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
# Ubuntu 20.04 LTS хосты
- name: ubuntu20-web
family: ubuntu20
groups: [ubuntu, test, web]
publish: ["8020:80"]
- name: ubuntu20-db
family: ubuntu20
groups: [ubuntu, test, db]
publish: ["8021:80"]
- name: ubuntu20-app
family: ubuntu20
groups: [ubuntu, test, app]
publish: ["8022:80"]

View File

@@ -0,0 +1,34 @@
---
#description: Пресет для Ubuntu 22.04 LTS
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образ Ubuntu 22.04
images:
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
# Ubuntu 22.04 LTS хосты
- name: ubuntu22-web
family: ubuntu22
groups: [ubuntu, test, web]
publish: ["8220:80"]
- name: ubuntu22-db
family: ubuntu22
groups: [ubuntu, test, db]
publish: ["8221:80"]
- name: ubuntu22-app
family: ubuntu22
groups: [ubuntu, test, app]
publish: ["8222:80"]

View File

@@ -0,0 +1,34 @@
---
#description: Пресет для Ubuntu 24.04 LTS
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образ Ubuntu 24.04
images:
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
# Ubuntu 24.04 LTS хосты
- name: ubuntu24-web
family: ubuntu24
groups: [ubuntu, test, web]
publish: ["8240:80"]
- name: ubuntu24-db
family: ubuntu24
groups: [ubuntu, test, db]
publish: ["8241:80"]
- name: ubuntu24-app
family: ubuntu24
groups: [ubuntu, test, app]
publish: ["8242:80"]

View File

@@ -0,0 +1,93 @@
---
# Геополитический пресет с 5 контейнерами (Ubuntu + Debian + Alt + Astra + RedOS)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Описание: Пресет для тестирования ролей на различных ОС
# Использует образы Ubuntu, Debian, Alt, Astra и RedOS
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# Используем стабильные образы Ubuntu, Debian, Alt, Astra и RedOS (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-latest-arm64" # ARM64 образ
redos: "inecs/ansible-lab:redos-latest-arm64" # ARM64 образ
# Настройки для ARM64
# Используем нативные ARM64 образы
platform: "linux/arm64"
# Настройки Docker для ARM64
docker_options:
platform: "linux/arm64"
systemd_defaults:
privileged: true
command: "/bin/bash -c \"while true; do sleep 30; done\""
platform: "linux/arm64" # Используем ARM64
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
# Принудительная установка платформы для всех операций Docker
docker_platform: "linux/amd64"
hosts:
# =============================================================================
# UBUNTU СЕРВЕРЫ
# =============================================================================
- name: ubuntu1
family: ubuntu
groups: [geop, ubuntu]
platform: "linux/arm64" # Используем ARM64
docker_options:
platform: "linux/arm64"
docker_platform: "linux/arm64"
# =============================================================================
# DEBIAN СЕРВЕРЫ
# =============================================================================
- name: debian1
family: debian
groups: [geop, debian]
platform: "linux/arm64" # Используем ARM64
docker_options:
platform: "linux/arm64"
docker_platform: "linux/arm64"
# =============================================================================
# ALT СЕРВЕРЫ
# =============================================================================
- name: alt1
family: alt
groups: [geop, alt]
platform: "linux/arm64" # Используем ARM64
docker_options:
platform: "linux/arm64"
docker_platform: "linux/arm64"
# =============================================================================
# ASTRA СЕРВЕРЫ (ARM64)
# =============================================================================
- name: astra1
family: astra
groups: [geop, astra]
platform: "linux/arm64" # Используем ARM64
docker_options:
platform: "linux/arm64"
docker_platform: "linux/arm64"
# =============================================================================
# REDOS СЕРВЕРЫ (ARM64)
# =============================================================================
#- name: redos1
# family: redos
# groups: [geop, redos]
# platform: "linux/arm64" # Используем ARM64
# docker_options:
# platform: "linux/arm64"
# docker_platform: "linux/arm64"

View File

@@ -0,0 +1,57 @@
---
# ПРЕСЕТ: Kubernetes + Istio Full Stack (1 кластер с полным стеком)
#
# Описание: Полноценный Kubernetes кластер с полным стеком Istio
# - 1 Kind кластер с 3 workers
# - Полный Istio service mesh с Kiali
# - Prometheus + Grafana для мониторинга
# - Jaeger для трассировки
# - Все аддоны включены
#
# Использование: make lab-test SCENARIO=universal LAB_SPEC=molecule/presets/k8s-istio-full.yml
#
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
kind_clusters:
- name: istio-full
workers: 3
api_port: 6443
addons:
ingress_nginx: true
metrics_server: true
istio: true
kiali: true
prometheus_stack: true
ingress_host_http_port: 8081
ingress_host_https_port: 8443
images:
debian: "inecs/ansible-lab:ubuntu22-latest"
ubuntu: "inecs/ansible-lab:ubuntu22-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos: "inecs/ansible-lab:centos9-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro"
tmpfs:
- "/run"
- "/run/lock"
capabilities:
- "SYS_ADMIN"
hosts:
- name: k8s-controller
group: controllers
family: debian
publish:
- "6443:6443"
- "9090:9090" # Prometheus
- "3000:3000" # Grafana
- "16686:16686" # Jaeger
- "20001:20001" # Kiali

View File

@@ -0,0 +1,42 @@
---
#description: Минимальный Kind кластер без аддонов
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt: "inecs/ansible-lab:alt-linux-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos7: "inecs/ansible-lab:centos7-latest"
centos8: "inecs/ansible-lab:centos8-latest"
centos9: "inecs/ansible-lab:centos9-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
redos: "inecs/ansible-lab:redos-latest"
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
debian9: "inecs/ansible-lab:debian9-latest"
debian10: "inecs/ansible-lab:debian10-latest"
debian11: "inecs/ansible-lab:debian11-latest"
debian12: "inecs/ansible-lab:debian12-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
# Минимальный Kind кластер без аддонов
kind_clusters:
- name: minimal
workers: 0 # Только control-plane
api_port: 6443
hosts: []

View File

@@ -0,0 +1,83 @@
---
# ПРЕСЕТ: Kubernetes Multi-Cluster (3 кластера)
#
# Описание: Несколько Kind кластеров для тестирования мульти-кластерных сценариев
# - 3 Kind кластера: dev, staging, prod
# - Различные конфигурации для каждого окружения
# - Полный стек мониторинга и service mesh
#
# Использование: make lab-test SCENARIO=universal LAB_SPEC=molecule/presets/k8s-multi.yml
#
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
kind_clusters:
- name: dev
workers: 1
api_port: 6443
addons:
ingress_nginx: true
metrics_server: true
ingress_host_http_port: 8081
ingress_host_https_port: 8443
- name: staging
workers: 2
api_port: 6444
addons:
ingress_nginx: true
metrics_server: true
istio: true
kiali: true
ingress_host_http_port: 8082
ingress_host_https_port: 8444
- name: prod
workers: 3
api_port: 6445
addons:
ingress_nginx: true
metrics_server: true
istio: true
kiali: true
prometheus_stack: true
ingress_host_http_port: 8083
ingress_host_https_port: 8445
images:
debian: "inecs/ansible-lab:ubuntu22-latest"
ubuntu: "inecs/ansible-lab:ubuntu22-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos: "inecs/ansible-lab:centos9-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro"
tmpfs:
- "/run"
- "/run/lock"
capabilities:
- "SYS_ADMIN"
hosts:
- name: k8s-dev-controller
group: controllers
family: debian
publish:
- "6443:6443"
- name: k8s-staging-controller
group: controllers
family: rhel
publish:
- "6444:6444"
- name: k8s-prod-controller
group: controllers
family: debian
publish:
- "6445:6445"

View File

@@ -0,0 +1,48 @@
---
# ПРЕСЕТ: Kubernetes Single Node (1 кластер)
#
# Описание: Одиночный Kind кластер для простого тестирования K8s ролей
# - 1 Kind кластер с 1 worker
# - Базовые аддоны: Ingress NGINX, Metrics Server
# - Простая конфигурация для быстрого старта
#
# Использование: make lab-test SCENARIO=universal LAB_SPEC=molecule/presets/k8s-single.yml
#
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
kind_clusters:
- name: single
workers: 1
api_port: 6443
addons:
ingress_nginx: true
metrics_server: true
ingress_host_http_port: 8081
ingress_host_https_port: 8443
images:
debian: "inecs/ansible-lab:ubuntu22-latest"
ubuntu: "inecs/ansible-lab:ubuntu22-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos: "inecs/ansible-lab:centos9-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro"
tmpfs:
- "/run"
- "/run/lock"
capabilities:
- "SYS_ADMIN"
hosts:
- name: k8s-controller
group: controllers
family: debian
publish:
- "6443:6443"

View File

@@ -0,0 +1,66 @@
---
#description: Пресет для тестирования с Kubernetes Kind кластером
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt: "inecs/ansible-lab:alt-linux-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos7: "inecs/ansible-lab:centos7-latest"
centos8: "inecs/ansible-lab:centos8-latest"
centos9: "inecs/ansible-lab:centos9-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
redos: "inecs/ansible-lab:redos-latest"
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
debian9: "inecs/ansible-lab:debian9-latest"
debian10: "inecs/ansible-lab:debian10-latest"
debian11: "inecs/ansible-lab:debian11-latest"
debian12: "inecs/ansible-lab:debian12-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
# Kind кластеры с полным набором аддонов
kind_clusters:
- name: lab
workers: 2
api_port: 6443
addons:
ingress_nginx: true
metrics_server: true
istio: true
kiali: true
prometheus_stack: true
# Порты для доступа к аддонам извне
# Ingress HTTP: http://localhost:8081
# Ingress HTTPS: https://localhost:8443
# Prometheus: http://localhost:9090
# Grafana: http://localhost:3000 (admin/admin)
# Kiali: http://localhost:20001
# Metrics Server: http://localhost:4443
addon_ports:
ingress_http: 8081
ingress_https: 8443
prometheus: 9090
grafana: 3000
kiali: 20001
metrics_server: 4443
hosts: []
# # Стандартный набор - 2 хоста для базового тестирования (стабильные ОС)
# - name: u1
# family: ubuntu22
# groups: [test, web]

View File

@@ -0,0 +1,42 @@
---
#description: Минимальный пресет для быстрого тестирования с 1 хостом (Debian)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt9: "inecs/ansible-lab:alt9-latest"
alt10: "inecs/ansible-lab:alt10-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos7: "inecs/ansible-lab:centos7-latest"
centos8: "inecs/ansible-lab:centos8-latest"
centos9: "inecs/ansible-lab:centos9-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
redos: "inecs/ansible-lab:redos-latest"
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
debian9: "inecs/ansible-lab:debian9-latest"
debian10: "inecs/ansible-lab:debian10-latest"
debian11: "inecs/ansible-lab:debian11-latest"
debian12: "inecs/ansible-lab:debian12-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
# Минимальный набор - один хост Astra Linux для arm64
- name: u1
family: astra
groups: [test]
supported_platforms: ["linux/arm64", "linux/amd64"]

View File

@@ -0,0 +1,47 @@
---
#description: Стандартный пресет по умолчанию для тестирования с 2 хостами (Ubuntu + Debian)
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt9: "inecs/ansible-lab:alt9-latest"
alt10: "inecs/ansible-lab:alt10-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos7: "inecs/ansible-lab:centos7-latest"
centos8: "inecs/ansible-lab:centos8-latest"
centos9: "inecs/ansible-lab:centos9-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
redos: "inecs/ansible-lab:redos-latest"
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
debian9: "inecs/ansible-lab:debian9-latest"
debian10: "inecs/ansible-lab:debian10-latest"
debian11: "inecs/ansible-lab:debian11-latest"
debian12: "inecs/ansible-lab:debian12-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
# Стандартный набор - 2 хоста для базового тестирования (стабильные ОС)
- name: u1
family: ubuntu22
groups: [test]
- name: u2
family: debian12
groups: [test]
- name: u3
family: centos9
groups: [test]

View File

@@ -0,0 +1,248 @@
# Роль devops
Универсальная роль для создания пользователя devops с SSH ключами и sudo правами на всех поддерживаемых операционных системах.
## Автор
**Сергей Антропов**
Сайт: https://devops.org.ru
## Описание
Роль `devops` создает универсального пользователя для DevOps задач со следующими возможностями:
- ✅ Создание пользователя `devops` с настраиваемым UID/GID
- ✅ Установка пароля длиной 30 символов из vault
- ✅ Настройка sudo прав без ввода пароля
- ✅ Добавление SSH публичного ключа для подключения
- ✅ Поддержка всех ОС из dockerfiles/
- ✅ Детальное логирование и проверки
- ✅ Уведомления о статусе выполнения
## Поддерживаемые ОС
- **Red Hat семейство**: RHEL 7/8/9, CentOS 7/8/9, AlmaLinux 8, Rocky Linux 8
- **Debian семейство**: Debian 9/10/11/12, Ubuntu 20.04/22.04/24.04
- **SUSE**: SLES 15.x
- **Alpine**: 3.15+
- **Российские ОС**: Astra Linux 1.7, RED OS 7/9, ALT Linux 9/10
## Требования
- Ansible >= 2.9
- Python >= 3.6
- Доступ к vault с секретами
- Права sudo/root на целевых хостах
## Переменные
### Основные переменные
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `devops_user` | `devops` | Имя пользователя |
| `devops_group` | `devops` | Основная группа пользователя |
| `devops_home` | `/home/devops` | Домашняя директория |
| `devops_shell` | `/bin/bash` | Оболочка пользователя |
| `devops_uid` | `1001` | UID пользователя |
| `devops_gid` | `1001` | GID группы |
### Переменные из vault
| Переменная | Описание | Обязательная |
|------------|----------|--------------|
| `vault_devops_password` | Пароль пользователя (30 символов) | ✅ |
| `vault_devops_ssh_public_key` | SSH публичный ключ | ✅ |
### Настройки sudo
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `devops_sudo_nopasswd` | `true` | Выполнение sudo без пароля |
| `devops_sudo_commands` | `ALL` | Разрешенные команды |
| `devops_sudoers_file` | `/etc/sudoers.d/devops` | Путь к файлу sudoers |
### Настройки SSH
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `devops_ssh_dir` | `/home/devops/.ssh` | SSH директория |
| `devops_ssh_authorized_keys` | `/home/devops/.ssh/authorized_keys` | Файл с ключами |
| `devops_ssh_dir_mode` | `0700` | Права на SSH директорию |
| `devops_ssh_keys_mode` | `0600` | Права на файлы ключей |
### Дополнительные группы
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `devops_additional_groups` | `['sudo', 'wheel', 'docker', 'systemd-journal']` | Дополнительные группы |
## Примеры использования
### Базовое использование
```yaml
- hosts: all
become: yes
roles:
- devops
vars:
vault_devops_password: "your-30-char-password-here"
vault_devops_ssh_public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC..."
```
### С кастомными настройками
```yaml
- hosts: all
become: yes
roles:
- devops
vars:
devops_user: "admin"
devops_home: "/home/admin"
devops_uid: 2000
devops_gid: 2000
devops_additional_groups:
- "sudo"
- "docker"
- "kvm"
vault_devops_password: "your-30-char-password-here"
vault_devops_ssh_public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC..."
```
### С отключенными проверками
```yaml
- hosts: all
become: yes
roles:
- devops
vars:
devops_verify_user: false
devops_verify_ssh: false
devops_verify_sudo: false
devops_notify_on_success: false
vault_devops_password: "your-30-char-password-here"
vault_devops_ssh_public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC..."
```
## Теги
Роль поддерживает следующие теги для выборочного выполнения:
- `devops` - все задачи роли
- `validation` - проверка входных параметров
- `packages` - установка пакетов
- `group` - создание группы
- `user` - создание пользователя
- `password` - установка пароля
- `ssh` - настройка SSH
- `keys` - настройка SSH ключей
- `sudo` - настройка sudo прав
- `permissions` - настройка прав доступа
- `config` - дополнительная конфигурация
- `verification` - проверка настройки
- `notification` - уведомления
### Примеры использования тегов
```bash
# Только создание пользователя и группы
ansible-playbook -i inventory converge.yml --tags "user,group"
# Только настройка SSH
ansible-playbook -i inventory converge.yml --tags "ssh,keys"
# Только настройка sudo
ansible-playbook -i inventory converge.yml --tags "sudo,permissions"
# Пропустить проверки
ansible-playbook -i inventory converge.yml --skip-tags "verification"
```
## Обработчики
Роль включает следующие обработчики:
- `restart ssh service` - перезапуск SSH сервиса
- `check ssh config` - проверка конфигурации SSH
- `log changes` - логирование изменений
- `notify completion` - уведомления о завершении
- `cleanup temp files` - очистка временных файлов
- `security check` - проверка безопасности
- `collect statistics` - сбор статистики
## Логирование
Роль поддерживает детальное логирование:
- Уровень логирования настраивается через `devops_log_level`
- Логи записываются в `devops_log_file` (по умолчанию `/var/log/devops-setup.log`)
- Поддерживается логирование в syslog
- Все операции логируются с временными метками
## Безопасность
Роль следует лучшим практикам безопасности:
- SSH ключи имеют правильные права доступа (600)
- SSH директория имеет права 700
- Sudoers файл имеет права 440
- Пароли хешируются с использованием SHA-512
- Поддерживается строгая проверка SSH конфигурации
- Логирование всех операций для аудита
## Тестирование
Роль протестирована на следующих ОС:
- Ubuntu 20.04/22.04/24.04
- Debian 9/10/11/12
- CentOS 7/8/9
- RHEL 7/8/9
- AlmaLinux 8
- Rocky Linux 8
- SLES 15.x
- Alpine 3.15+
- Astra Linux 1.7
- RED OS 7/9
- ALT Linux 9/10
## Устранение неполадок
### Проблемы с паролем
```bash
# Проверка хеша пароля
ansible all -m debug -a "msg={{ 'your-password' | password_hash('sha512') }}"
```
### Проблемы с SSH
```bash
# Проверка SSH конфигурации
sudo sshd -t
# Проверка прав доступа
ls -la /home/devops/.ssh/
```
### Проблемы с sudo
```bash
# Проверка sudoers файла
sudo visudo -c -f /etc/sudoers.d/devops
# Тест sudo прав
sudo -l -U devops
```
## Лицензия
MIT
## Поддержка
- Сайт: https://devops.org.ru
- Автор: Сергей Антропов

View File

@@ -0,0 +1,74 @@
---
# Переменные по умолчанию для роли devops
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Основные настройки пользователя devops
devops_user: "devops"
devops_group: "devops"
devops_home: "/home/{{ devops_user }}"
devops_shell: "/bin/bash"
# Настройки пароля (обязательно из vault/secrets.yml)
devops_password: "{{ vault_devops_password }}"
# Настройки SSH ключа (обязательно из vault/secrets.yml)
devops_ssh_public_key: "{{ vault_devops_ssh_public_key }}"
# Настройки sudo
devops_sudo_nopasswd: true
devops_sudo_commands: "ALL"
# Дополнительные группы для пользователя
devops_additional_groups:
- "sudo"
- "wheel"
- "docker"
- "systemd-journal"
# Настройки SSH
devops_ssh_dir: "{{ devops_home }}/.ssh"
devops_ssh_authorized_keys: "{{ devops_ssh_dir }}/authorized_keys"
devops_ssh_dir_mode: "0700"
devops_ssh_keys_mode: "0600"
# Настройки безопасности
devops_umask: "0022"
devops_uid: 1001
devops_gid: 1001
# Настройки логирования
devops_log_level: "info"
devops_log_file: "/var/log/devops-setup.log"
# Настройки для разных ОС
devops_package_manager:
redhat: "yum"
debian: "apt"
suse: "zypper"
alpine: "apk"
# Список пакетов для установки (если нужно)
devops_packages: []
# Настройки для создания пользователя
devops_create_home: true
devops_system_user: false
devops_login_shell: true
# Настройки для sudoers
devops_sudoers_file: "/etc/sudoers.d/{{ devops_user }}"
devops_sudoers_template: "devops_sudoers.j2"
# Настройки для SSH
devops_ssh_config: "{{ devops_home }}/.ssh/config"
devops_ssh_known_hosts: "{{ devops_home }}/.ssh/known_hosts"
# Настройки для проверки
devops_verify_user: true
devops_verify_ssh: true
devops_verify_sudo: true
# Настройки для уведомлений
devops_notify_on_success: true
devops_notify_on_failure: true

View File

@@ -0,0 +1,161 @@
---
# Обработчики для роли devops
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: "🔄 Перезапуск SSH сервиса"
block:
- name: "Перезапуск SSH сервиса (systemd)"
listen: "restart ssh service"
systemd:
name: "{{ item }}"
state: restarted
enabled: yes
daemon_reload: yes
become: true
loop: "{{ devops_services_to_enable }}"
when: ansible_service_mgr == "systemd"
- name: "Перезапуск SSH сервиса (service)"
service:
name: "{{ item }}"
state: restarted
enabled: yes
become: true
loop: "{{ devops_services_to_enable }}"
when: ansible_service_mgr == "service"
- name: "Перезапуск SSH сервиса (rc-service)"
service:
name: "{{ item }}"
state: restarted
enabled: yes
become: true
loop: "{{ devops_services_to_enable }}"
when: ansible_service_mgr == "rc-service"
- name: "🔍 Проверка конфигурации SSH"
block:
- name: "Проверка конфигурации SSH сервера"
listen: "check ssh config"
command: "sshd -t"
become: true
register: sshd_config_check
changed_when: false
failed_when: sshd_config_check.rc != 0
- name: "Логирование проверки SSH конфигурации"
debug:
msg: "SSH конфигурация проверена успешно"
when: false
- name: "📝 Логирование изменений"
block:
- name: "Запись в лог файл"
listen: "log changes"
lineinfile:
path: "{{ devops_log_file }}"
line: "{{ ansible_date_time.iso8601 }} - {{ ansible_hostname }} - {{ ansible_user_id }} - {{ ansible_play_name }} - {{ ansible_task_name }}"
create: yes
owner: root
group: root
mode: '0644'
become: true
when: devops_log_file is defined
- name: "Логирование в syslog"
syslogger:
facility: "local0"
priority: "info"
msg: "DevOps role: {{ ansible_task_name }} completed on {{ ansible_hostname }}"
when: false
- name: "🔔 Уведомления о завершении"
block:
- name: "Уведомление об успешном завершении"
listen: "notify completion"
debug:
msg: "✅ Роль devops успешно выполнена на {{ ansible_hostname }}"
when: devops_notify_on_success
- name: "Уведомление об ошибке"
debug:
msg: "❌ Ошибка при выполнении роли devops на {{ ansible_hostname }}"
when: devops_notify_on_failure
- name: "🧹 Очистка временных файлов"
block:
- name: "Удаление временных файлов"
listen: "cleanup temp files"
file:
path: "{{ item }}"
state: absent
become: true
loop:
- "/tmp/devops_setup_*"
- "/tmp/ansible_*"
ignore_errors: true
- name: "Логирование очистки"
debug:
msg: "Временные файлы очищены"
when: false
- name: "🔐 Проверка безопасности"
block:
- name: "Проверка прав доступа к файлам пользователя"
listen: "security check"
stat:
path: "{{ devops_home }}"
register: home_dir_check
- name: "Проверка прав доступа к SSH директории"
stat:
path: "{{ devops_ssh_dir }}"
register: ssh_dir_check
- name: "Проверка прав доступа к authorized_keys"
stat:
path: "{{ devops_ssh_authorized_keys }}"
register: ssh_keys_check
- name: "Проверка прав доступа к sudoers файлу"
stat:
path: "{{ devops_sudoers_file }}"
register: sudoers_file_check
- name: "Логирование проверки безопасности"
debug:
msg: |
Результаты проверки безопасности:
- Домашняя директория: {{ home_dir_check.stat.exists }}
- SSH директория: {{ ssh_dir_check.stat.exists }}
- SSH ключи: {{ ssh_keys_check.stat.exists }}
- Sudoers файл: {{ sudoers_file_check.stat.exists }}
- name: "📊 Сбор статистики"
block:
- name: "Сбор информации о пользователе"
listen: "collect statistics"
command: "id {{ devops_user }}"
register: user_info
changed_when: false
- name: "Сбор информации о группах пользователя"
command: "groups {{ devops_user }}"
register: user_groups
changed_when: false
- name: "Сбор информации о SSH ключах"
command: "wc -l {{ devops_ssh_authorized_keys }}"
register: ssh_keys_count
changed_when: false
ignore_errors: true
- name: "Логирование статистики"
debug:
msg: |
Статистика пользователя {{ devops_user }}:
- Информация: {{ user_info.stdout }}
- Группы: {{ user_groups.stdout }}
- SSH ключей: {{ ssh_keys_count.stdout | default('неизвестно') }}

View File

@@ -0,0 +1,67 @@
---
# Метаданные роли devops
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
galaxy_info:
author: "Сергей Антропов"
description: "Универсальная роль для создания пользователя devops с SSH ключами и sudo правами"
company: "DevOpsLab"
license: "MIT"
min_ansible_version: "2.9"
platforms:
- name: "EL"
versions:
- "7"
- "8"
- "9"
- name: "Ubuntu"
versions:
- "focal"
- "jammy"
- "noble"
- name: "Debian"
versions:
- "stretch"
- "buster"
- "bullseye"
- "bookworm"
- name: "SLES"
versions:
- "15"
- "15SP1"
- "15SP2"
- "15SP3"
- "15SP4"
- "15SP5"
- name: "Alpine"
versions:
- "all"
- name: "Astra Linux"
versions:
- "all"
- name: "EL"
versions:
- "7"
- "8"
- "9"
- name: "EL"
versions:
- "7"
- "8"
- "9"
galaxy_tags:
- "user"
- "devops"
- "ssh"
- "sudo"
- "security"
- "system"
- "administration"
- "automation"
- "universal"
- "crossplatform"
dependencies: []
collections: []

View File

@@ -0,0 +1,312 @@
---
# Основные задачи для роли devops
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: "Reset ANSI color codes"
debug:
msg: "\033[0m"
changed_when: false
tags: [devops, color-reset]
- name: "🔍 Проверка входных параметров"
tags: [devops, validation]
block:
- name: "Проверка наличия пароля пользователя devops"
fail:
msg: |
❌ ОШИБКА: Пароль пользователя devops не определён.
Ожидаемая переменная: vault_devops_password
Где задавать: roles/devops/vars/main.yml (или переопределить на уровне инвентаря/группы/хоста)
Пример в roles/devops/vars/main.yml:
vault_devops_password: "ваш_пароль_здесь"
when:
- vault_devops_password is not defined
- vault_devops_password == ""
- vault_devops_password is none
- name: "Проверка наличия SSH публичного ключа"
fail:
msg: |
❌ ОШИБКА: SSH публичный ключ не определён.
Ожидаемая переменная: vault_devops_ssh_public_key
Где задавать: roles/devops/vars/main.yml (или переопределить на уровне инвентаря/группы/хоста)
Пример в roles/devops/vars/main.yml:
vault_devops_ssh_public_key: |
ssh-rsa AAAAB3... user@host
when:
- vault_devops_ssh_public_key is not defined
- vault_devops_ssh_public_key == ""
- vault_devops_ssh_public_key is none
- name: "✅ Проверка успешна - все необходимые секреты найдены"
debug:
msg: |
Все необходимые секреты найдены в переменных роли (vars/main.yml или инвентарь):
- Пароль пользователя: {{ 'установлен' if vault_devops_password is defined and vault_devops_password != '' else 'НЕ УСТАНОВЛЕН' }}
- SSH публичный ключ: {{ 'установлен' if vault_devops_ssh_public_key is defined and vault_devops_ssh_public_key != '' else 'НЕ УСТАНОВЛЕН' }}
when:
- vault_devops_password is defined
- vault_devops_password != ""
- vault_devops_ssh_public_key is defined
- vault_devops_ssh_public_key != ""
- name: "🔍 Проверка что пароль не пустой"
fail:
msg: "❌ ОШИБКА: Пароль пользователя devops не может быть пустым!"
when:
- vault_devops_password is defined
- vault_devops_password == ""
- name: "🔍 Проверка что SSH ключ не пустой"
fail:
msg: "❌ ОШИБКА: SSH публичный ключ не может быть пустым!"
when:
- vault_devops_ssh_public_key is defined
- vault_devops_ssh_public_key == ""
- name: "Логирование начала выполнения роли"
debug:
msg: "Начинаем настройку пользователя {{ devops_user }} на {{ ansible_distribution }} {{ ansible_distribution_version }}"
when: false
- name: "📦 Установка необходимых пакетов"
tags: [devops, packages]
block:
- name: "Обновление кеша пакетов (Debian/Ubuntu)"
apt:
update_cache: yes
cache_valid_time: 3600
when: devops_os_family == "debian"
- name: "Установка необходимых пакетов"
package:
name: "{{ devops_packages_to_install }}"
state: present
become: true
- name: "👤 Создание группы devops"
tags: [devops, group]
block:
- name: "Проверка существования группы {{ devops_group }}"
group:
name: "{{ devops_group }}"
state: present
gid: "{{ devops_gid }}"
become: true
register: group_create_result
- name: "Логирование создания группы"
debug:
msg: "Группа {{ devops_group }} создана/существует"
when: false
- name: "👥 Создание недостающих групп"
tags: [devops, groups, additional]
block:
- name: "Создание группы wheel (если не существует)"
group:
name: wheel
state: present
become: true
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
state: present
become: true
when: "'systemd-journal' in devops_final_additional_groups"
ignore_errors: true
- name: "Создание группы docker (если не существует)"
group:
name: docker
state: present
become: true
when: "'docker' in devops_final_additional_groups"
ignore_errors: true
- name: "👤 Создание пользователя devops"
tags: [devops, user, password]
block:
- name: "Проверка существования пользователя {{ devops_user }}"
user:
name: "{{ devops_user }}"
group: "{{ devops_group }}"
uid: "{{ devops_uid }}"
home: "{{ devops_home }}"
shell: "{{ devops_shell }}"
state: present
create_home: "{{ devops_create_home }}"
system: "{{ devops_system_user }}"
groups: "{{ devops_final_additional_groups }}"
append: yes
become: true
register: user_create_result
- name: "Установка пароля для пользователя {{ devops_user }}"
user:
name: "{{ devops_user }}"
password: "{{ devops_password | password_hash('sha512') }}"
update_password: always
become: true
no_log: true
register: password_set_result
- name: "Логирование создания пользователя"
debug:
msg: "Пользователь {{ devops_user }} создан/обновлен с паролем"
when: false
- name: "🔑 Настройка SSH ключей"
tags: [devops, ssh, keys]
block:
- name: "Создание директории .ssh для пользователя {{ devops_user }}"
file:
path: "{{ devops_ssh_dir }}"
state: directory
owner: "{{ devops_user }}"
group: "{{ devops_group }}"
mode: "{{ devops_ssh_dir_mode }}"
become: true
- name: "Добавление SSH публичного ключа в authorized_keys"
authorized_key:
user: "{{ devops_user }}"
key: "{{ devops_ssh_public_key }}"
state: present
manage_dir: no
become: true
register: ssh_key_result
when: devops_ssh_public_key != ""
- name: "Установка правильных прав на authorized_keys"
file:
path: "{{ devops_ssh_authorized_keys }}"
owner: "{{ devops_user }}"
group: "{{ devops_group }}"
mode: "{{ devops_ssh_keys_mode }}"
become: true
when: devops_ssh_public_key != ""
- name: "Логирование настройки SSH"
debug:
msg: "SSH ключ для пользователя {{ devops_user }} настроен"
when: false
- name: "🔐 Настройка sudo прав"
tags: [devops, sudo, permissions]
block:
- name: "Создание файла sudoers для пользователя {{ devops_user }}"
template:
src: "{{ devops_sudoers_template }}"
dest: "{{ devops_sudoers_file }}"
owner: root
group: root
mode: '0440'
backup: yes
become: true
register: sudoers_result
- name: "Проверка синтаксиса sudoers файла"
command: "visudo -c -f {{ devops_sudoers_file }}"
become: true
register: sudoers_check
changed_when: false
failed_when: sudoers_check.rc != 0
- name: "Логирование настройки sudo"
debug:
msg: "Sudo права для пользователя {{ devops_user }} настроены"
when: false
- name: "🔧 Настройка дополнительных параметров"
tags: [devops, config, additional]
block:
- name: "Установка umask для пользователя {{ devops_user }}"
lineinfile:
path: "{{ devops_home }}/.bashrc"
line: "umask {{ devops_umask }}"
owner: "{{ devops_user }}"
group: "{{ devops_group }}"
mode: '0644'
create: yes
backup: yes
become: true
- name: "Создание SSH конфигурации для пользователя {{ devops_user }}"
template:
src: "devops_ssh_config.j2"
dest: "{{ devops_ssh_config }}"
owner: "{{ devops_user }}"
group: "{{ devops_group }}"
mode: "0600"
backup: yes
become: true
- name: "Логирование дополнительных настроек"
debug:
msg: "Дополнительные настройки для пользователя {{ devops_user }} применены"
when: false
- name: "✅ Проверка настройки пользователя devops"
when: devops_verify_user
tags: [devops, verification, check]
block:
- name: "Проверка существования пользователя {{ devops_user }}"
command: "id {{ devops_user }}"
register: user_check
changed_when: false
failed_when: user_check.rc != 0
- name: "Проверка SSH ключа пользователя {{ devops_user }}"
stat:
path: "{{ devops_ssh_authorized_keys }}"
register: ssh_key_check
- name: "Проверка sudo прав пользователя {{ devops_user }}"
command: "sudo -l -U {{ devops_user }}"
become: true
register: sudo_check
changed_when: false
failed_when: sudo_check.rc != 0
- name: "Логирование результатов проверки"
debug:
msg: |
Результаты проверки пользователя {{ devops_user }}:
- Пользователь существует: {{ user_check.rc == 0 }}
- SSH ключ настроен: {{ ssh_key_check.stat.exists }}
- Sudo права настроены: {{ sudo_check.rc == 0 }}
- name: "📝 Уведомления о завершении"
tags: [devops, notification, success]
block:
- name: "Уведомление об успешном завершении"
debug:
msg: "✅ Пользователь {{ devops_user }} успешно настроен на {{ ansible_hostname }}"
when: devops_notify_on_success
- name: "Уведомление о настройке SSH"
debug:
msg: "🔑 SSH ключ для пользователя {{ devops_user }} настроен"
when: devops_notify_on_success and devops_verify_ssh
- name: "Уведомление о настройке sudo"
debug:
msg: "🔐 Sudo права для пользователя {{ devops_user }} настроены"
when: devops_notify_on_success and devops_verify_sudo

View File

@@ -0,0 +1,79 @@
# SSH конфигурация для пользователя {{ devops_user }}
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Создан: {{ ansible_date_time.iso8601 }}
# Основные настройки SSH клиента
Host *
# Настройки безопасности
StrictHostKeyChecking ask
UserKnownHostsFile ~/.ssh/known_hosts
IdentitiesOnly yes
# Настройки подключения
ServerAliveInterval 60
ServerAliveCountMax 3
TCPKeepAlive yes
# Настройки сжатия
Compression yes
CompressionLevel 6
# Настройки шифрования
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
# Настройки MAC
MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha2-512
# Настройки KEX
KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
# Настройки аутентификации
PreferredAuthentications publickey,password
PubkeyAuthentication yes
PasswordAuthentication yes
# Настройки портов
Port 22
# Настройки таймаутов
ConnectTimeout 30
ConnectionAttempts 3
# Настройки логирования
LogLevel INFO
# Настройки для X11 forwarding (если нужно)
# ForwardX11 yes
# ForwardX11Trusted yes
# Настройки для агента SSH
ForwardAgent yes
# Настройки для туннелирования
# LocalForward 8080 localhost:80
# RemoteForward 9090 localhost:9090
# Специфичные настройки для разных хостов
# Host production
# HostName prod.example.com
# User {{ devops_user }}
# Port 2222
# IdentityFile ~/.ssh/id_rsa_prod
# StrictHostKeyChecking yes
# UserKnownHostsFile ~/.ssh/known_hosts_prod
# Host staging
# HostName staging.example.com
# User {{ devops_user }}
# Port 22
# IdentityFile ~/.ssh/id_rsa_staging
# StrictHostKeyChecking no
# Host development
# HostName dev.example.com
# User {{ devops_user }}
# Port 22
# IdentityFile ~/.ssh/id_rsa_dev
# StrictHostKeyChecking no
# UserKnownHostsFile /dev/null

View File

@@ -0,0 +1,21 @@
# Sudoers файл для пользователя {{ devops_user }}
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Создан: {{ ansible_date_time.iso8601 }}
# Разрешить пользователю {{ devops_user }} выполнять все команды без ввода пароля
{{ devops_user }} ALL=(ALL) NOPASSWD:ALL
# Дополнительные настройки безопасности
# Разрешить выполнение команд только от определенных терминалов (опционально)
# {{ devops_user }} ALL=(ALL) NOPASSWD:ALL, !/usr/bin/passwd, !/usr/bin/su
# Логирование всех команд sudo (опционально)
# Defaults logfile=/var/log/sudo.log
# Defaults log_input, log_output
# Настройки таймаута для sudo сессий (опционально)
# Defaults timestamp_timeout=15
# Разрешить выполнение команд без подтверждения для определенных команд
# {{ devops_user }} ALL=(ALL) NOPASSWD: /bin/systemctl, /usr/bin/docker, /usr/bin/kubectl

View File

@@ -0,0 +1,386 @@
$ANSIBLE_VAULT;1.1;AES256
30393164313831366361633763646433613761663339323630623464646262323739346263643965
3836316437636537656631656239323532336632386634660a303662373864313034313131366364
30623732373861323839653763393637383935333633646634393762613536386136633162656231
3462323037353437370a623838343533633633643961303761383265373062633161636562386138
33393465626363633538376161393065303766396438356138633763353962613435323030656561
66663634633536626338343763333861613562303866646365663365333738663139303230386531
65653235626537623732653431306539376433396434373530643035666564333131303737383362
38393133656137646238633538366337383961363839383162653731613232643638396134613433
37663739646663363832313465613335396432643265313964396235316631626135393231306465
62336433623630613139653530383836333566373038353035353161623162343235633034636430
62366436353965363032313630353432656434326362303938326362643134386136616431636433
39363135656561623335303936326637373066316434356534383338313739663633643938653739
61366432656262343838646139373632666438666164623830643333393563336435643762326461
62313639613633373837646538303061386632626330333739643864316166363463383235336166
39363938613434663131323466643063646431663463323636353035353630343563623233376630
63636636386565343630613438663165326237616137316333303834396337613261633765316566
36613532336234356138366330666433353764646266633564326634386263336235646335363561
63386635326664343837396539396530306230633130616664613666373530613236356631303432
39323162653135633161343331626539613866323030653030633832373536333834373365613765
36343964313539383430333761663132613530376135336561396532626330646262373462663661
31363962643161313534303566613764336633653138636631323766656361363336353062623532
36316534636136643362393432346239346463643061356438363934323937643961376232386439
63316466363234313338303830613532353238356331343134646365353637373462626662373834
65626266303966626465373365356334613039376334623764366566343964376562386336373031
66653030646531653265666138643936653033343663323365656538623764373237373638663233
30623039623866653761393264323930613866343861323934373834343032646531666439336334
32383932323464313332616139363032623061633663336130636531613036643631653032303237
64643564373533393630643364663733386662393165636635363331353033333963623130633931
61626338353937376266666165333433396639666630626166656231633062353933366639393563
31326465626531363539393861383430633530386536356336396664383637386366363731346561
33363330366635666330666265306230373462323136333935336335346238613734326464303036
64303764396265306132663735333732643337623430353539313539336339346664353461653566
35353639363938333835653961613861383334663263643532396333383738306162386663363632
61343833643139653537333665663963363565646432333939366332646364326261306237643631
33396235336134633833343561383662353133623431316663376162613463336633393963356132
62636561623838626133336563393063376662313935646464663730636536346337613565313965
30386135643132633130383330643866303436663033306362613863343939646337343733376638
35626562363664383063666333653463626162353661376462636633343534653461333738303636
66663764643465363765626336623163326161306462316561373964633461353066636631616130
64333536646362626533346462633833333761633366613362623666333639383438333431343934
39333766376563646334663638363561343766373763353761663664623931393437343864306638
38623561343064633830653533373365336136333130356434323731376563373835623461626432
30363562613235303634383766623836303361626131323734363333653435353436363137333639
35623631343838333936316466323666353863316461353063326264613763653537323765663131
37306231643138353834623065623735386133333531663762303436366531363639303131393263
36666661373965636339633162343537663236666463656236353838363837666533376232636564
36383532663865323162613962313639643265386231623231353934656261666235313132313966
66626637356632396135306630653463633436363731643031623864613833353137653762383538
37646631373231626539323333663234613563393332336465333266353763313432616337653933
39633234663137623037336639303133353764656438663438393964643135666236643333303238
64313732376430626535663534363138363434313264666663366338383837363734363739333866
31383734326166663466326137336364613964326239653134346532376636363230353964373132
36666135303935366436343131653666616233663033656634306162346166653763353038376264
38323066376333633332616636613662323335386537653162343439303466363234306232623535
31316635616132336366333462336161366262376663376164333231633538323463323539626664
30303334363762353636363837366163643237373763343137373463623832373538373738656630
63323564616434313930623462356462323566663932386439323866313437313937306230643437
65643331343838363466333061303632363131363661656232643364303339333731373932633638
63643232613232663132373062333530316433323938396336363164623761653835633666363938
31393636663566663031613061613736386364363130623265313434383931323465633533316638
65303839373737663339636362623462373533373633386362306238373130666462623534373862
63376631316637356464633438643863323735363434396131396165303733373165623331386238
66343532313235616364323564393931376439666237333466373964383634616338653634333062
64623239633630626235643765336565396662336265376538663161636464646365386162663937
37373531623463623830393436616266613330363731616234373338323732333737633563376436
34636436383632623333613230333434613731393966633738623635376630616434663661663936
33346632353137663238643731363766316462616362343161316637646161373262346533666461
32353836633437613732333038343837333637323131336363376439646535363933376133313738
39626138663338653636616634356437646139633766653730633437333765626365303564653865
35666432623331653832383064623232656462343837663934626363653734643162653061663162
64303034356530376661616562646239663061613939663666366165363733626635623938336163
34383033326531323164656132383161623439343236356236363362303961653837616261363337
64623138656434356166646238356463306531656661306566376565303533316635353337353263
32383137616163666362613137366162383338663439373334393235323562393862666162373463
37343461303430303838326435316233366364613662373437333039313835343033383837323339
33656231306666393131396235363761353933643639306532623338356131366233333237613732
61326161396137626438633833626435643365303534643963636566366631336131306536643931
62646439613465336436633539633461633833633661353637643634643765653638306338626336
64373862333134323561323337656562353634336331373563666433636539396431333238323330
63323636623061393666623433353937346537393966623438343061383638323631393333333863
37306366366236663565633133303766643035346165643635363962326536393531633236326565
37646638303139636435663133376336333230336239326666323664386630613230666666333137
65376339633763326136353031313034333835363538306532623339643163303436653730656636
38333735353037373064613962663236643461376336613934646463356165626661346662336266
61306262363835623062613561393431643133613462643334396336363238633731396538643034
62633632373962646162623337373561356163393936333635636233636166643339613165346231
39323031316363656539613732373833353334356265376662383538656532333639303435623763
36666363313064623734633564613734353034393366376166653463636335623431663962376436
36373866623631363737623939396563636336636334393763333163333066643331326563333532
35326436646139346430633264396638303766663237396630383439343266363164316435613637
32323838636632626461373439306437326432383864386561336338633866643639313230663737
65616365316162336661396234323735343766303031396236613363633864356531333531353235
33373865366332336432353130386333313335313239333339396232356436643034353830323036
61613362376265643131613636393831393932653965383261303733653734396536343630333436
64613834616236623534393665383164373934303163663163313231653937306436363865386637
65666136326161626238313334373237363731333532346364346464633265643730666530636534
34623031346439373033346434666466646137623765396435363561363263666566393433303636
38323736303466383739373336646664343563333561623938346337303331343132323166373338
37396536356530633263303666356439326562393535646139323666343632366636353365343230
37626130396238313132633065633864373739626433333832336130613661313838353239303239
39633435313966646665313065643230623231626266326536383664616463353664653562333236
34373965326639363730386262643931666138653530396565656665363239656537356361616562
32343435636466653634383365343364373030633731323265383438646339393466396236613638
63643466323061656264323065323533653265336261396435343036383136343436346231663933
32303437343264363866663639653331303731653163613636616333323462346261376364343565
35336431393632636464353463613464393633373335366232646262353532616165613334663737
63623962636637626133643532363230343263613937623430363462633038616665333262636230
37346336356262653132663330646339353964353637653865633566386233623536336234336265
63326563336265343131396466313430323937653039376136643238323037346538633139386231
39653236306365363665343333326331643464393934656663303166373737623637636339653337
30383961643865386434346433626633653737306134653436666461623031623962366165663133
62343764623230363466636162633532303733363534373037323932373830663464643735343636
61343563333130663039643138363463336538313434616332356431376235383037623036373562
64666430613138343039383262393965666130383136336634343166323361646438326635303639
64373434303236633130626566373135613536633532386534343361333664356562366365666539
65653865393862376365633135333733643939663466376137396432363337326634323638643462
61376361643739316337373039383030376663343136393430333939346139326333613562333036
35383330616266323463653838323666356461633132626164633761656639396131336561666634
65303432666634643931616161366461343663336239376463316634393863383839313661303832
63386630646633646430316436333934306530626533363634636431303832386436633331613237
62653638393265613734633130313631306638646435663563393964623932613731303739616666
65393138396532656163643533313239323561643861313333623831336163626462643835666538
65393833663366356435346132323763383938376236393838316161353135323263373332386537
33336638313334303864633662336566353764373062636638626133336362656130343266313934
34303734363837306333643834373732386439613232326265343261353330386266396263643534
63316162356333313335343764633633643966303966636661346530393965643935396665346335
36366231653466323761643534373532666532666663333034353337383637393831623439623035
30613236643732653832333666366637343130333938386563616661613936333438643433626631
61383363353030386465613435643137393638626433323734346465373938643366343532366565
64383164356233343231373138353832393132636661613634646537363465353233333264303835
33386530393361396434333530343232393866663664356262663832623930613435363464313430
32313533376366623935323035356164353530396131376534646339633262626137376163316563
62653535626438383231363735633033653062343135333638326165393834353064656138323631
63303162346335333666393662626336303033353965643832373735623431633662336334363265
37656338613062343839326265393630343338383563623464396363663164313832663130336336
34633832336463663761353436643334323832396633323035623332623434326665343564633965
38643231386464386330643632363238643832303061633434356639373663313063396630363339
66386337376165303939333237396261393364646334313833383333323431653739326133363537
33613165376364396331333239623163306435373333373438303564643838633562353238333132
39646330666531633362356333633865623334366430653861653566636466323336326362623561
30666465646237646238346130353231333563336239346363653331616261653363346363393332
39616235386632313234323465616262643763646236333133643938663766636437313435653939
63663966643035616664316666613235613166666137396134636136346264313165323736656361
64626335313233343638623439343335613633373566363233306163383264376166316237363331
64353263613332663364663932653635383234303933356337363335356234326533376264323636
31366238313961363134373133626130666433653866383063613865363761306261393164343533
64303438393730653462383432343531303639313764653235396237633236363763346565313866
39363334643533333938383862626535613562666335633237333435643764623966636364643637
31333261663063333234643835323632376636333064333531396333356537306662316330366365
63363263623039643964303162343362353363386162626638373734666537643765356238613365
39633033396632653935653361353036393562323065303233366562613134353765393739663634
62366661366336666438633631653263363634306239343261383062333230363036366337386635
30663036333036376133653739633935636330353665353935333530383962643037393963313533
64336539333635323937656236323765306339383961353633383737353061346332363237366432
61396237396632323962633862343066656137636336333638646534386534396332663366643065
66336139373663613963663035306462333633613233616166303431386561373732383830626363
32383863666665666437386464353338646139623964663762336337306433623933313830333861
37356530643535666263323333303534336132366631343734383463643065393638666364626266
61323762343862393536663235396231303462663963323962373837633038643236316237373831
66343532383261326666653939303834613562343265333339333234373936626234636632363232
35356339343863376663666134363563336438616466323531306532306134316132626534333936
61373266623561363230313562306563383032366164663166303833623462336432623039366466
38336334663463646466386639336638613731393264663638393164333531303462346334643333
32323963356339373334646639313030383139346666343932666238613131353464356539366566
38373266323331333235373366623930623061333463616566346539353031343761393966373263
34366136393232646366616666333833663733316136396331383462666637313930646537623936
35383535353734316161373562356366326430663436373037376165613034373239343563626465
39393537613964646132626263393938643233363833613830386666373334663634366130343061
31636330653865313764326437313738383831363636666161366462663433616633666365623335
64613663333630653834363934663661356535303436663362643566306436663865613039623731
63313162653735313339393437353032333630333939353734383136663334316537316235373734
33323333323734663161653331303530323631656230663738616265373535323239363331656336
31643336616336386136323334636332396333343839306465333634333165653532323065636335
64666432326466626333356136653661313731646663393461613365366338343934623464313834
39373436396564353135623264613538333230653734326562343066343936353762636630626233
31623436656565306363353539306161353936373735613734663335313034666666333066636466
39353533626663376330303735333466386334313966616365626633366337336230623962383336
39303362393736336438396662656631396661363066666538613533346163353563316461633636
65303661373934616235653762383761616663346361363162663630663662323932646464306132
33656361303633383238386437643237366230383163346365336565353930303265356436666635
30626638653634343333636337376166373961633562623737323436363364306664663031613936
32613363353734633633323565313165616130643066333037356661663130663736373231393538
64356130633838343630623433323262363738613836633131383462653265613964333035303436
32616436333331653135396661373936636232336666623237643363346430366162326332343536
32656232666462663336306461646261393266613537313263306430656536346161653137643437
34383939623339653036613131326463333437623433303534656331396364333364323731323934
33396630653463653135663032386666363137643137323034306438643837616461306439663466
33373432623339346635646565616263346234663163326138636535386437333033393261613937
36353836303638303363306333343930626336383964356363366636383663366135333335346664
35343635346235626261376665366262646538363937353964373835646131653464363563666563
63303565303734376639326134376230303135393065623432336337656538306262333038373066
39393535626465656530333634316565336131323266633436393661646661353937396438363066
32313362333037343363303561313261636132313438643137343161316130383965376165303866
65626461656533626665356662643364343466623739376164626364373433313730346265363561
34373837356136396336616132323234313862663862626532356531396339613663373466643839
65653963373231353135316664363636353464333762646433666333613933616532356532323462
34656262313766326434663838633836636236326636663633363762393533333233313631366265
66643639643437633639396264303634623134393032383932316530323339323438643032303534
36666630636438393066613365643365393136663135633633393837306232653536366536626438
63656531643561333265373465656661306661626431336137376131623338383035636162346663
66333938396436316231613063386264623534623665636239613936343731363461326534306330
34616335363266393636383865326364653765653962623033336266336232626561633863633061
33336631643866663036366131633662323834326135646533306663356232356631653332366438
61343935363033396666356331323735316434626131343566333435623530373261343639346433
32313437646231396561313031623937623730386533376166386432303331313731323032373733
36663533316266303037303733323233323066643339616338656230396665363865323063643233
37623966616162333164326266373834393733343938356232643730643234353832306636386361
31383262303166326663656539313237623036633730323764363634313864343362643865343731
33326264383831623831376135376239333239616239623961366365383831333236623564663231
32323166336466313034323638353264656466313832336137633737316633343630643135616335
36306530346364353239346332643966323932343964663335343561373864646139353863376461
66626335393539323630646632636332333935353738336662303361646366626333626632366339
62353139323731623738303166313461303165616164336238303038306638356332313937623862
61373462393839343964383438653262653930666539393262376363646530623530396234363930
32646138366364623433643762656466353339663764323666303663326666326237663737376434
34663532623864373466666530393565646464613936613938346462333139656536393539643535
66353062326136323037343962343961623166343161366562383238626164386463353965643738
38336264303863616635313166383733616130323962303833643635623430393761386433356332
37643830336461383662306637363530366166353231323832653866383033303537663936316362
64663230383634363731383638343139643537666266366661326135353862663031643631623236
39343533623234323633643438316332336565386435616463663337383436353965646136353464
65363365663338663963663536326161393764396631343633613366616131626634623538373534
31613363633863653964633837316635313364326137363938313365323939323338396163373031
30396434383435366133363635383861393030323636366363613839343163663332386236633036
39666234613836623032616330376339636532326566636262353963663933353033393661636236
64663033636265663065646535373862393665306231656162646662313564653435633436383738
38323563383766356537656265346663396439383331626433393261393533363634353737383736
63333136373334616465616630626461373031663037363833626532646231663438656265663561
62303234633662613739353931626665356465373234383365346461633630313433326432636239
34653530393737646539356330363734636431626137316334393464656333306463653939616530
31633236326530333735646665643862356634646637373664646262613833323533346665366563
39316262396639613237346161313839323432626235303636343363646266663066623136376661
36356330333735396238363862353637303534643064633763306336326164326132333262626164
66313039326435303964633233313864336263633961343236316336333935353466626464656664
32343536663563623337383238626365666462653132373138643835656330653666333566643639
61636266643932383937346465356265376334366432386366336362333032343639623461346333
32313763643330643230313863623330393735626366623830613565333530376338336138386661
61663764336536663639343435343131356636313366613161643939663062663036363966383166
66363434626462653563356334393261656363383735323263653966363334366237373231663937
62356638313634343763326637636566613831353336373238343964306266383536636564373464
30656161653561626534343230386535663666393365303532383539346436373130663766663530
31303731323738316437356633343831633963353838653130366663626139653837666335643439
61396632363032663065376465353730626165653664366333633164356630663736396534623636
32653133303435366631323039613366393463636438323162363232316465663062316163633262
33363631643263383762333138643762376634343131336431383965303136643130346233343335
64376437306236386435376362383334323237663834383361396366336535666233346634336638
32343830633430633265313533613930373161393734623632636437633265393366623839333936
33366537393563313135656366653136313934613761383932393864316439376465633430633232
61663765306238396561663330313762616164333461323435376639613665636337616335303762
38653931326336356631333132363532303734646330316336626162323736656231663632623730
36636261373839363565346363356633396265646565343333343535393834613334313962323737
36666465653262643636633434663062306537623363336364323838656233646135643865326531
63633466373830336361383265616362646234363832316161326339396263373438656536323434
63363130313264653234626333383531343661343331356436653663343566373761636461653063
61663336643330303964613934643638646533313536663165663039376231373439316539356530
30366465336336653661303763623338376465366663313263353662376332663334633233353436
30336432393139666630386138316362386235323364666465643635393165623764616535346335
63613662323766363965326136613035353538336564303662376135393036636264366364393463
33363161653438613938306465646638393933366164336532623361353432653039343232303966
64636238616136613665656164636238316339343263636633306339386632353332626537343532
63323065313565333966303737373736336333343937336163333464343361613139373232646136
64313235663831313463313931623235636435336636653163316437313866643939393739656238
30333364613566626366633066613632383061623363343535396435656636623466663631656138
34343662346137613137633136326635343230373262303564653830306633366532623839333566
39636263616365623938343430383432323130316432646132616436393366363435386139633966
66333866633531303338656333613565313564393762353132323765356231356532653731323231
65353536323861386563386338346338346338646333373864366330623361383663343262643261
37633166343230363464663262376230643634636138633162396263386332326264323065383364
61633931633137613862333763316233393538343635353565623335386630666631636662616237
61336165376231306431393766363966306332303964396166396630373063666131626434363638
65323735616163393731383765393635393331663766636239633364643364333561303931616432
63663036343431373065626366333266373838636663393562393436313164633263393163373362
33303139333931326134323938633239366162336230636335383763386539646239356161313433
62386238323265333638643366366231633831623532613065343065373063336662613438366531
65396564343366346564366334663034306431363338353366366431356561393865396463306637
62386331343739626438656132343763656365353964373536323466636561396330626536336461
32353363663832336364383566306138643837373137643036633761653830653232366332623835
61613265653537643738393463323438613162353464333961653732623439333965376437633730
36636435343965646132376238303937323238336232306238366636373730616261333036326438
31646364343764653864386264346530313061316162353166653564383834353338383534656161
31636661336564313430623962316635663862333935323930626338323762626531643865396366
36663537383361306238383435653164346331633935333738376439353566303236636237373063
65353837656261613464323535393533353233323337646330316132363732303435363835643765
30636131646432306333653063326332376435343831636634633432653462306662393165346339
38633465626237346661373164626339396339636266306136373862353037316136396237636661
62333663353036383131623762616239363066316464663237633433343633323032336638663034
63363265613930353131613637323734623133623961366337613061323463386261613433653137
34313166636637313336366461383763356161363565383661633563313464306537393731633464
34353631396164396332313738363436623631636635643166303564363033366337626661313538
34633266616363303762373833316166356632356662353765313964383832313336323365663536
37663064646162646334376632656132663736643865353936613166623235623761613665393863
39633462623862323133363333643862373432363166316362656261346130626537313264383363
35343665336133373334336664356263336661316162343639666265396231376136313163636635
66336636643130383430656662653139633137373035323630333665626633306535623735656234
34633330353464306364616134373530643661363936646439313366383432376330656665383638
61613936323765356239316235323961613935313761346534363765396635636238363839626364
33373936353439663135363535633666373331343634333736376133383536656361376634393464
33343064383736613962313563353137306236343436653734656563653732636463393031616533
62633139666635373130336361663564383833333665303738666632663633393236383937343639
31323539363535613431656437636539323565366535613336396333343835623338663234353233
39313332313263353131656138663962373963323637346136373130336239616631393136303731
37303064653231636335306230383635663938623438306637366331326261373230313233666464
35386364633662623865643830383563303165653734303563633664643331656337616661323038
34656436646363346132373034363235346665643561616361393664393230613361313366656661
36363662313931393438373339383663626434343233643735316231623035373963326561313331
30653236363636663239393432663232626563626134336361663763653231336237366630326363
36633466626537646331343764343139663666623230636561656265396232613633386431633531
35363934396464386435343233356163376263386465616235333832316134303432383466633336
35363962323632633936313863346635613432666136626561353839623430333539363637663366
34343865653738313331363635386562383866646463643433353863303764326537326533633463
39663434326464313738393839366661323966373563333633636665356532313534643235663038
33636634396432363334626362653135623332613762333032363865653333643732616664303136
34336166323665373835633538373231376365366230623635353663333930303465343563343337
61663563366662623362303533376437393032306138363733653435373761376362333837363733
31366434613966383063376463646137653734306334393961636133393537356236383039663331
36663266393532663763303662353262373834356666303763383736666632313063666661373436
33623530376161313733386430656533626661653065363033663232396262346461396264623066
66326636366239303864646536303835383730376631623432363132376134663465656335353639
66613363353463616632373665393765373433613363306330333535393431626463626466666437
39303534366134373663373739373863646532643465623336643839623137363632323462646232
61636564643766323239376564623735306633343035613831656365653630396463366261313733
30656230373335653037353965663166303932363336613662633161633630643531353036633164
62653233326235396665316133336231386665316438613536343331353836326665386633366431
31326431613034353765306134366135316661306638366530323439616130643833316234383738
64336236626461373663383061376163316261626337626339656331393336326364343863646562
35363166643631396561393337623365653838643964323037346130346431323566663530653832
62623261666434336331306138346437363838323130343961363735393837343861333561363664
30353138393561383864396435376166303330626261653334396334356435356530326235633838
33666665643062353738393633313662383336326636633261333131636139376562623034363365
38343534333563306564616466313130356334663631313836353437353166316338363439386338
31373437353264666331623338323666323461376433653165373163656662623333393138666130
66626264323638613230373534356234666336323734383039393666353836306535653135663761
37333566313432623736636334646161373463656461333462363537383833363066366630636365
61633863326264666632663765333432333065393738333133326235356634646432313237366361
63663939663637663236653365616234343566656334313633313366303231363830313866316633
33343766393731663833636661363563663465613231393530643065383564663531376563633661
65656664346565363064346432323236393365356439666564663866316637356239353631396465
33313934356435363430333836333963386665653431333034653363383838343262373231323931
66346464356430663733363538383732356331343533616531383135333864636162323932346631
39656530636539623062373934333262323032363066626634323233323736363436333666303032
30633462646233616333393431393138393632653735303137356237326335663061363734363862
63633364633866643232643935373633663136323535333033666364613462643136323936343438
32386236326433653439313236373236366131333730643361363136656135306665323564646536
61396434393131353438326337316139396637663338663862333464373364646336353539663662
64383533396535653861396534633837323561333766346362656261643539353137316462646361
39363435363634653538643135656464373731316364313636633137613137366539643730383361
61376661666164616635376635343566653962393730383661653630363134333665623761613364
37366666356633383462613538633531343965333631613066326432623263316366633466313864
37613030383136623766373836353333363264313136386235383339306137323830663038303661
65333537393633366564616337366363306466356332333631363063303836396431356234323435
34353234386330336639363537623038643232353062376237316338393838373064636636363238
37356336376264383063613865613033386239356637316137633466313962383532373266346235
37356462636563343231326366373737616261393937353739396436303536646264303530363935
33306335643634366133393530666233393933623132636161386439343234636562623632376364
63613531343237346361383730383363353232303333323430613838346662333836373635376232
63373031313431373232346261376561663031356432303331303161396464626136613434653539
32636265353762636362666366393232643762343763303261343334363765353265633335393934
35363932626662303533343436303466623331346130626462633139303861343962356537323033
64626237396638363637373936353137663038393732633636316432316431613434323862646562
30363364373730343766326166346635373461353636393933393663336431363339383638386632
36323131656436643536363736306130316131346131343934613338366565356161366639313264
61633935666337373632363663336165333832373331613230333536636638646535343766613235
34313638396537366264653666306265323932363739376238346361346531663030393430316463
34323264373931316464363037323766333731363334393038613135393534383635616231313532
61613430386231343366343966613166616565326564633735353364346662653234646665663166
34346562626466626263653339376261356162643666666238356264613534363266366562363162
32363564373236656630353832353236343062623766663461656362376235346533376531343333
34373834383962326362643339666562663334323437633734333333353364633631356437313264
64626539323733613033333933363762346363376636356365393435653565353265383034366462
64633234393939383864363935313061633835643331323839353037663937376639646334633163
34323761373563383665336563663937343363396563623338383866623135643265643366353932
63323861636163376462333837663139353535613938646133613537646163626266363231396632
39316136373433316261656564306531353363666563343134373430616139656131343235393161
61353833366638336139373963623231613062326139336565313632363432373432313261626266
64626161326161373338383333323030643539313266313131383833363966386138326131303937
30303262346261333963336562333933363763643131333730363732333838376332393833663831
61646335343938376562666436633362633635353161326461396433343333393566356233346231
37303838303462336233336664633531353064386633323364626236613339363333616165653136
63393563393932313361343538623730353331303661306336383237336137356233303837306630
65386234383664303566343735383237363438363537373865643861373235366133613336386236
35306339623932386338616635656531306337633739316461303532326637353261633364306463
30663934636538393365376563333766663438356430393938383062346631666633356634616435
38636165663765346362633635643765363164306362323565316462323865373930643061353732
65386532636234656662643939346661353635376236303063333465383931366462633134353661
3966

View File

@@ -0,0 +1,193 @@
# Роль docker
## Описание
Универсальная роль Ansible для установки и настройки Docker и Docker Compose на различных Linux-дистрибутивах.
Роль автоматически определяет семейство ОС (Debian/Ubuntu или Red Hat/CentOS/AlmaLinux) и использует соответствующий метод установки.
**Поддерживаемые ОС:**
- 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
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
## Переменные
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `docker_version` | `"latest"` | Версия Docker CE для установки |
| `docker_compose_version` | `"latest"` | Версия Docker Compose (для standalone версии) |
| `docker_use_official_repo` | `true` | Использовать официальный репозиторий Docker |
| `docker_use_compose_plugin` | `true` | Использовать docker-compose-plugin вместо standalone |
| `docker_users` | `[]` | Список пользователей для добавления в группу docker |
| `docker_service_enabled` | `true` | Автозапуск Docker при загрузке |
| `docker_service_state` | `started` | Состояние службы Docker |
| `docker_additional_packages` | `[]` | Дополнительные пакеты для установки |
| `docker_install_method` | `"official"` | Метод установки: 'official' или 'get.docker.com' |
## Примеры использования
### Базовое использование
```yaml
- hosts: all
roles:
- docker
```
### Установка с добавлением пользователей
```yaml
- hosts: all
roles:
- role: docker
vars:
docker_users:
- ansible
- deploy
```
### Установка через скрипт get.docker.com
```yaml
- hosts: all
roles:
- role: docker
vars:
docker_install_method: "get.docker.com"
docker_use_official_repo: false
```
### Установка standalone Docker Compose
```yaml
- hosts: all
roles:
- role: docker
vars:
docker_use_compose_plugin: false
docker_compose_version: "2.23.0"
```
### Установка с дополнительными пакетами
```yaml
- hosts: all
roles:
- role: docker
vars:
docker_additional_packages:
- docker-ce-rootless-extras
```
## Зависимости
Нет зависимостей от других ролей.
## Требования
- Ansible 2.9+
- Python 3.6+
- Права sudo на целевых хостах
- Доступ к интернету для загрузки пакетов
## Что делает роль
1. Определяет семейство ОС (Debian или Red Hat)
2. Устанавливает необходимые зависимости
3. Добавляет официальный репозиторий Docker
4. Устанавливает Docker CE и Docker Compose
5. Запускает и включает службу Docker
6. Создает группу docker
7. Добавляет пользователей в группу docker
8. Проверяет корректность установки
## Проверка установки
После выполнения роли проверьте установку:
```bash
# Проверка версии Docker
docker --version
# Проверка версии Docker Compose
docker compose version
# или
docker-compose --version
# Проверка статуса службы
systemctl status docker
# Проверка информации о Docker
docker info
```
## Пример playbook для тестирования
```yaml
---
- name: Установка Docker на все хосты
hosts: all
become: yes
roles:
- role: docker
vars:
docker_users:
- ansible
docker_use_compose_plugin: true
post_tasks:
- name: Запуск тестового контейнера
docker_container:
name: hello-world
image: hello-world:latest
state: started
- name: Проверка запущенных контейнеров
command: docker ps -a
register: docker_ps
changed_when: false
- name: Вывод списка контейнеров
debug:
var: docker_ps.stdout_lines
```
## Troubleshooting
### Docker не запускается
Проверьте журналы systemd:
```bash
sudo journalctl -u docker.service
```
### Проблемы с репозиторием
Для Ubuntu/Debian, если репозиторий не добавляется:
```bash
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
```
### Проблемы с правами
Если пользователь не может запускать docker без sudo:
```bash
sudo usermod -aG docker $USER
# Выйдите и войдите снова
```
## Лицензия
MIT
## Автор
Сергей Антропов - https://devops.org.ru

View File

@@ -0,0 +1,33 @@
---
# Переменные по умолчанию для роли docker
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Версия Docker CE
docker_version: "latest"
# Версия Docker Compose (если не используется docker-compose-plugin)
docker_compose_version: "latest"
# Использовать ли официальный репозиторий Docker (рекомендуется)
docker_use_official_repo: true
# Использовать ли docker-compose-plugin (вместо standalone docker-compose)
docker_use_compose_plugin: true
# Пользователь для добавления в группу docker
docker_users: []
# - ansible
# - deploy
# Автозапуск Docker при загрузке системы
docker_service_enabled: true
# Автозапуск Docker при загрузке системы
docker_service_state: started
# Дополнительные пакеты для установки
docker_additional_packages: []
# Метод установки: 'official' (официальный репозиторий) или 'get.docker.com' (скрипт)
docker_install_method: "get.docker.com"

View File

@@ -0,0 +1,22 @@
---
# Обработчики для роли docker
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: Restart docker
become: true
systemd:
name: docker
state: restarted
- name: Reload docker
become: true
systemd:
name: docker
state: reloaded
- name: Restart docker socket
become: true
systemd:
name: docker.socket
state: restarted

View File

@@ -0,0 +1,35 @@
---
galaxy_info:
author: Сергей Антропов
description: Универсальная роль Ansible для установки и настройки Docker и Docker Compose на различных Linux-дистрибутивах
company: https://devops.org.ru
license: MIT
min_ansible_version: "2.9"
platforms:
- name: Ubuntu
versions:
- focal
- jammy
- noble
- name: Debian
versions:
- stretch
- buster
- bullseye
- bookworm
- name: EL
versions:
- "7"
- "8"
- "9"
- name: Rocky
versions:
- "8.0"
- "9.0"
galaxy_tags:
- docker
- dockercompose
- container
- virtualization
- linux
dependencies: []

View File

@@ -0,0 +1,279 @@
---
# Задачи для роли docker
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: "Reset ANSI color codes"
debug:
msg: "\033[0m"
changed_when: false
tags: [docker, color-reset]
# Определяем семейство ОС для выбора правильного метода установки
- name: Определение семейства ОС
set_fact:
docker_os_family: "{{ ansible_os_family }}"
docker_pkg_manager: "{{ 'yum' if ansible_pkg_mgr == 'yum' else ('dnf' if ansible_pkg_mgr == 'dnf' else 'apt') }}"
# Устанавливаем предварительные зависимости
- name: Установка зависимостей для Debian/Ubuntu
become: true
apt:
name:
- apt-transport-https
- ca-certificates
- curl
- gnupg
- lsb-release
- software-properties-common
state: present
update_cache: yes
when: ansible_os_family == "Debian"
- name: Установка зависимостей для Red Hat
become: true
package:
name:
- yum-utils
- device-mapper-persistent-data
- lvm2
state: present
when: ansible_os_family == "RedHat"
failed_when: false
# Добавляем официальный репозиторий Docker для Debian/Ubuntu
- name: Добавление GPG ключа Docker для Debian/Ubuntu
become: true
shell: |
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/{{ (ansible_distribution | lower) }}/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
args:
creates: /etc/apt/keyrings/docker.asc
when:
- ansible_os_family == "Debian"
- docker_use_official_repo
- name: Добавление репозитория Docker для Debian/Ubuntu
become: true
apt_repository:
repo: "deb [arch={{ ansible_architecture }} signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/{{ (ansible_distribution | lower) }} {{ ansible_distribution_release }} stable"
state: present
filename: docker
update_cache: yes
when:
- ansible_os_family == "Debian"
- docker_use_official_repo
# Добавляем официальный репозиторий Docker для Red Hat
- name: Добавление репозитория Docker для Red Hat через dnf
become: true
shell: |
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
args:
creates: /etc/yum.repos.d/docker-ce.repo
when:
- ansible_os_family == "RedHat"
- ansible_pkg_mgr == "dnf"
- docker_use_official_repo
failed_when: false
- name: Добавление репозитория Docker для Red Hat через yum-config-manager
become: true
shell: |
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
args:
creates: /etc/yum.repos.d/docker-ce.repo
when:
- ansible_os_family == "RedHat"
- ansible_pkg_mgr == "yum"
- docker_use_official_repo
failed_when: false
# Устанавливаем Docker через официальный репозиторий
- name: Установка Docker CE для Debian/Ubuntu (официальный репозиторий)
become: true
apt:
name:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-buildx-plugin
state: "{{ 'present' if docker_version == 'latest' else docker_version }}"
update_cache: yes
when:
- ansible_os_family == "Debian"
- docker_use_official_repo
- docker_install_method == "official"
- name: Установка Docker CE для Red Hat (официальный репозиторий)
become: true
package:
name:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-buildx-plugin
state: "{{ 'present' if docker_version == 'latest' else docker_version }}"
when:
- ansible_os_family == "RedHat"
- docker_use_official_repo
- docker_install_method == "official"
# Устанавливаем Docker через скрипт get.docker.com
- name: Проверка наличия Docker
stat:
path: /usr/bin/docker
register: docker_binary
- name: Скачивание скрипта установки Docker
become: true
get_url:
url: https://get.docker.com
dest: /tmp/get-docker.sh
mode: '0755'
when:
- docker_install_method == "get.docker.com" or not docker_use_official_repo
- not docker_binary.stat.exists
- name: Установка Docker через скрипт get.docker.com
become: true
command: /tmp/get-docker.sh
args:
creates: /usr/bin/docker
when:
- docker_install_method == "get.docker.com" or not docker_use_official_repo
- not docker_binary.stat.exists
- name: Проверка установки Docker
become: true
command: docker --version
register: docker_version_check
changed_when: false
failed_when: false
- name: Вывод версии Docker
debug:
msg: "{{ docker_version_check.stdout if docker_version_check.rc == 0 else 'Docker не установлен' }}"
# Устанавливаем docker-compose-plugin для Debian/Ubuntu
- name: Установка docker-compose-plugin для Debian/Ubuntu
become: true
apt:
name:
- docker-compose-plugin
state: present
when:
- ansible_os_family == "Debian"
- docker_use_compose_plugin
- docker_use_official_repo
# Устанавливаем docker-compose-plugin для Red Hat
- name: Установка docker-compose-plugin для Red Hat
become: true
package:
name:
- docker-compose-plugin
state: present
when:
- ansible_os_family == "RedHat"
- docker_use_compose_plugin
- docker_use_official_repo
# Устанавливаем standalone docker-compose
- name: Скачивание docker-compose
become: true
get_url:
url: "https://github.com/docker/compose/releases/{{ 'latest/download' if docker_compose_version == 'latest' else 'download/v' + docker_compose_version }}/docker-compose-{{ ansible_system }}-{{ ansible_machine }}"
dest: /usr/local/bin/docker-compose
mode: '0755'
when:
- not docker_use_compose_plugin or docker_compose_version != 'latest'
- name: Проверка установки Docker Compose
become: true
shell: |
set -o pipefail
if docker compose version >/dev/null 2>&1; then
docker compose version --short 2>/dev/null || docker compose version
elif docker-compose version >/dev/null 2>&1; then
docker-compose --version
else
echo "Docker Compose не установлен"
fi
register: docker_compose_version_check
changed_when: false
failed_when: false
- name: Вывод версии Docker Compose
debug:
msg: "{{ docker_compose_version_check.stdout if docker_compose_version_check.rc == 0 else 'Docker Compose не установлен' }}"
# Определяем универсальную команду для запуска Compose (docker compose или docker-compose)
- name: Определение команды Docker Compose
become: true
shell: |
if command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then
echo "docker compose"
elif command -v docker-compose >/dev/null 2>&1; then
echo "docker-compose"
else
echo ""
fi
register: compose_cmd_detect
changed_when: false
- name: Установка факта compose_cmd
set_fact:
compose_cmd: "{{ compose_cmd_detect.stdout | default('') }}"
- name: Предупреждение при отсутствии Docker Compose
debug:
msg: "⚠️ Docker Compose не найден; установите docker-compose-plugin или docker-compose"
when: compose_cmd == ""
# Запускаем и включаем службу Docker
- name: Запуск службы Docker
become: true
systemd:
name: docker
state: started
enabled: yes
# Создаем группу docker
- name: Создание группы docker
become: true
group:
name: docker
state: present
# Добавляем пользователей в группу docker
- name: Добавление пользователей в группу docker
become: true
user:
name: "{{ item }}"
groups: docker
append: yes
loop: "{{ docker_users }}"
when: docker_users | length > 0
# Устанавливаем дополнительные пакеты
- name: Установка дополнительных пакетов
become: true
package:
name: "{{ docker_additional_packages }}"
state: present
when: docker_additional_packages | length > 0
# Проверка статуса Docker
- name: Проверка статуса Docker
become: true
command: docker info
register: docker_info
changed_when: false
failed_when: false
- name: Вывод информации о Docker
debug:
msg: "Docker успешно установлен и запущен"
when: docker_info.rc == 0

View File

@@ -0,0 +1,6 @@
$ANSIBLE_VAULT;1.1;AES256
38383165633431343739343231366365353762393539366439316236623864396532336635373136
6564333336613838323665616333633232356333623635330a383066316434646339623636343134
62336265323664386533333965336236623138616264626265383264633962653065646163333363
3333613736636562610a663364363939633639383264643738346363343232333666393434626562
3464

View File

@@ -0,0 +1,246 @@
# Роль Python 3.12
Универсальная Ansible роль для установки Python 3.12 на различных дистрибутивах Linux.
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
## Описание
Эта роль обеспечивает универсальную установку Python 3.12 на различных дистрибутивах Linux, включая:
- **Ubuntu** (20.04, 22.04, 24.04)
- **Debian** (10, 11, 12)
- **CentOS** (7, 8, 9)
- **RHEL** (7, 8, 9)
- **Rocky Linux** (8, 9)
- **AlmaLinux** (8, 9)
- **Fedora** (35+)
- **openSUSE** (15.3+)
Роль автоматически определяет дистрибутив и использует соответствующий метод установки:
- Установка из пакетов (если доступно)
- Компиляция из исходного кода (если пакеты недоступны)
- Автоматическое обновление pip до последней версии
- Создание символических ссылок для удобства использования
- Поддержка виртуальных окружений
## Требования
- Ansible >= 2.9
- Python 2.7 или 3.5+ на управляющей машине
- Привилегии sudo на целевых хостах
## Переменные
### Основные переменные
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `python_version` | `"3.12"` | Версия Python для установки |
| `python_packages` | `["pip", "setuptools", "wheel", "virtualenv"]` | Дополнительные пакеты Python |
| `python_install_prefix` | `"/usr/local"` | Префикс для установки Python |
| `python_create_symlinks` | `true` | Создание символических ссылок |
| `python_update_pip` | `true` | Автоматическое обновление pip до последней версии |
| `python_pip_packages` | `[]` | Дополнительные pip пакеты |
| `python_create_venv` | `false` | Создание виртуального окружения |
| `python_venv_path` | `"/opt/python-venv"` | Путь для виртуального окружения |
| `python_setup_alternatives` | `true` | Настройка альтернатив (RHEL) |
| `python_remove_old_versions` | `false` | Удаление старых версий Python |
| `python_log_level` | `"INFO"` | Уровень логирования |
### Переменные для разных ОС
Роль автоматически определяет переменные на основе `ansible_os_family` и `ansible_distribution`:
- `python_current_packages` - пакеты Python для текущей ОС
- `python_current_build_deps` - системные зависимости для компиляции
- `python_current_package_manager` - менеджер пакетов
- `python_current_executable` - путь к исполняемому файлу Python
- `python_current_pip` - путь к pip
## Примеры использования
### Базовое использование
```yaml
- hosts: all
roles:
- python
```
### С дополнительными пакетами
```yaml
- hosts: all
vars:
python_pip_packages:
- requests
- flask
- django
python_create_venv: true
python_venv_path: "/opt/myapp-venv"
roles:
- python
```
### С компиляцией из исходного кода
```yaml
- hosts: all
vars:
python_install_prefix: "/opt/python3.11"
python_create_symlinks: true
roles:
- python
```
### Для конкретной версии Python
```yaml
- hosts: all
vars:
python_version: "3.12.0"
roles:
- python
```
## Поддерживаемые дистрибутивы
### Debian/Ubuntu
Роль использует репозиторий `deadsnakes` для установки Python 3.12:
```yaml
- hosts: ubuntu_servers
roles:
- python
```
### RHEL/CentOS/Rocky/AlmaLinux
Роль использует EPEL репозиторий для установки Python 3.12:
```yaml
- hosts: rhel_servers
roles:
- python
```
### Fedora
```yaml
- hosts: fedora_servers
roles:
- python
```
### openSUSE
```yaml
- hosts: suse_servers
roles:
- python
```
## Альтернативные репозитории
Для старых дистрибутивов, которые не поддерживают Python 3.12 из стандартных репозиториев, роль автоматически использует альтернативные источники:
### RHEL/CentOS 7
- **IUS Repository**: Предоставляет современные версии Python
- **SCL (Software Collections)**: Для очень старых систем
- **EPEL**: Дополнительные пакеты
### Debian/Ubuntu старых версий
- **deadsnakes PPA**: Предоставляет Python 3.12 для старых версий
- **Альтернативные пакеты**: Python 3.11 если 3.12 недоступен
### Автоматическое переключение
Роль автоматически пытается установить Python 3.12, а если это невозможно, переключается на доступную версию (3.11) или использует альтернативные репозитории.
## Структура роли
```
roles/python/
├── defaults/
│ └── main.yml # Переменные по умолчанию
├── handlers/
│ └── main.yml # Обработчики событий
├── meta/
│ └── main.yml # Метаданные роли
├── tasks/
│ └── main.yml # Основные задачи
├── vars/
│ └── main.yml # Переменные для разных ОС
└── README.md # Документация
```
## Логирование
Роль поддерживает подробное логирование. Установите `python_log_level: "DEBUG"` для получения детальной информации о процессе установки.
## Обработка ошибок
Роль включает проверки на каждом этапе:
1. Проверка наличия Python перед установкой
2. Проверка успешности установки
3. Проверка работоспособности pip
4. Очистка временных файлов
## Производительность
- Использует параллельную компиляцию (количество ядер CPU)
- Оптимизированная конфигурация Python с LTO
- Кэширование пакетов
- Очистка временных файлов
## Безопасность
- Проверка целостности загружаемых файлов
- Использование официальных репозиториев
- Минимальные привилегии для установки
## Устранение неполадок
### Python не найден после установки
```bash
# Проверьте символические ссылки
ls -la /usr/bin/python3*
# Обновите библиотеки
sudo ldconfig
```
### Ошибки компиляции
```bash
# Установите системные зависимости
sudo apt install build-essential # Ubuntu/Debian
sudo dnf groupinstall "Development Tools" # RHEL/CentOS
```
### Проблемы с pip
```bash
# Обновите pip
python3 -m pip install --upgrade pip
# Проверьте версию
pip3 --version
```
## Лицензия
MIT
## Автор
**Сергей Антропов**
Сайт: https://devops.org.ru
## Поддержка
Для получения поддержки или сообщения об ошибках, пожалуйста, создайте issue в репозитории проекта.

View File

@@ -0,0 +1,60 @@
---
# Переменные по умолчанию для роли python
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Версия Python для установки
python_version: "3.12"
# Установка дополнительных пакетов Python
python_packages:
- pip
- setuptools
- wheel
- virtualenv
# Установка системных зависимостей для компиляции Python
python_build_dependencies:
- gcc
- gcc-c++
- make
- zlib-devel
- openssl-devel
- libffi-devel
- sqlite-devel
- readline-devel
- tk-devel
- gdbm-devel
- db4-devel
- libpcap-devel
- xz-devel
- expat-devel
- bzip2-devel
- ncurses-devel
- libuuid-devel
- libnsl2-devel
# Путь для установки Python
python_install_prefix: "/usr/local"
# Создание символических ссылок
python_create_symlinks: true
# Обновление pip после установки
python_update_pip: true
# Установка дополнительных pip пакетов
python_pip_packages: []
# Создание виртуального окружения
python_create_venv: false
python_venv_path: "/opt/python-venv"
# Настройка альтернатив (для систем с alternatives)
python_setup_alternatives: true
# Удаление старых версий Python (осторожно!)
python_remove_old_versions: false
# Логирование
python_log_level: "INFO"

View File

@@ -0,0 +1,44 @@
---
# Обработчики для роли python
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: "Перезапуск systemd для обновления библиотек"
systemd:
daemon_reload: yes
when: ansible_service_mgr == "systemd"
- name: "Обновление кэша библиотек"
command: "ldconfig"
changed_when: false
when: ansible_os_family == "RedHat"
- name: "Обновление кэша пакетов"
apt:
update_cache: yes
when: ansible_os_family == "Debian"
- name: "Очистка кэша пакетов"
command: "{{ item }}"
loop:
- "dnf clean all"
- "yum clean all"
changed_when: false
when: ansible_os_family == "RedHat"
ignore_errors: true
- name: "Уведомление о завершении установки Python"
debug:
msg: |
✅ PYTHON {{ python_version | upper }} УСТАНОВЛЕН И НАСТРОЕН!
🎯 Основные команды:
• python --version # Проверить версию Python
• python3 --version # Проверить версию Python (с версией)
• pip --version # Проверить версию pip
• pip3 --version # Проверить версию pip (с версией)
• python -m venv env # Создать виртуальное окружение
• pip install pkg # Установить пакет
🚀 Готово к работе!

View File

@@ -0,0 +1,54 @@
---
# Метаданные роли python
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
galaxy_info:
author: "Сергей Антропов"
description: "Универсальная роль для установки Python 3.12 на различных дистрибутивах Linux"
company: "DevOps Lab"
license: "MIT"
min_ansible_version: "2.9"
platforms:
- name: "Ubuntu"
versions:
- "focal"
- "jammy"
- "noble"
- name: "Debian"
versions:
- "buster"
- "bullseye"
- "bookworm"
- name: "EL"
versions:
- "7"
- "8"
- "9"
- name: "Rocky"
versions:
- "8.8"
- "9.0"
- name: "Fedora"
versions:
- "35"
- "36"
- "37"
- "38"
- "39"
- "40"
- name: "opensuse"
versions:
- "15.3"
- "15.4"
- "15.5"
galaxy_tags:
- "python"
- "programming"
- "development"
- "runtime"
- "language"
- "universal"
- "crossplatform"
dependencies: []

View File

@@ -0,0 +1,595 @@
---
# Основные задачи для установки Python 3.12
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: "Reset ANSI color codes"
debug:
msg: "\033[0m"
changed_when: false
tags: [python, color-reset]
- name: "Отладочная информация о системе"
debug:
msg:
- "ansible_distribution: '{{ ansible_distribution }}'"
- "ansible_os_family: '{{ ansible_os_family }}'"
- "ansible_distribution_version: '{{ ansible_distribution_version }}'"
when: (python_log_level | default("INFO")) in ["DEBUG", "INFO"]
- name: "Определение переменных для текущей ОС"
set_fact:
python_distribution: "{{ ansible_distribution | lower }}"
python_os_family: "{{ ansible_os_family | lower }}"
python_current_package_manager: "{{ python_package_managers[ansible_distribution | lower] | default('unknown') }}"
python_current_packages: "{{ python_packages_by_os[ansible_distribution | lower] | default([]) }}"
python_current_build_deps: "{{ python_build_deps_by_os[ansible_distribution | lower] | default([]) }}"
python_current_executable: "{{ python_executable_paths[ansible_distribution | lower] | default('/usr/bin/python3.12') }}"
python_current_pip: "{{ python_pip_paths[ansible_distribution | lower] | default('/usr/bin/pip3.12') }}"
- name: "Проверка определенных переменных"
debug:
msg:
- "python_distribution: '{{ python_distribution }}'"
- "python_os_family: '{{ python_os_family }}'"
- "python_current_package_manager: '{{ python_current_package_manager }}'"
- "python_current_packages: {{ python_current_packages }}"
- "python_current_build_deps: {{ python_current_build_deps }}"
- "python_current_executable: '{{ python_current_executable }}'"
- "python_current_pip: '{{ python_current_pip }}'"
when: (python_log_level | default("INFO")) in ["DEBUG", "INFO"]
# =============================================================================
# ЭТАП 1: ДОБАВЛЕНИЕ РЕПОЗИТОРИЕВ
# =============================================================================
- name: "Добавление репозиториев для Ubuntu/Debian"
apt_repository:
repo: "{{ item.url }}"
state: "{{ item.state }}"
update_cache: yes
loop: "{{ python_repositories[python_distribution] | default([]) }}"
when:
- python_distribution in ['ubuntu', 'debian']
- python_repositories[python_distribution] is defined
- item.when is not defined or (item.when | default(true))
ignore_errors: true
- name: "Добавление репозиториев для RHEL-семейства"
package:
name: "{{ item.name }}"
state: "{{ item.state }}"
loop: "{{ python_repositories[python_distribution] | default([]) }}"
when:
- python_distribution in ['redhat', 'centos', 'rhel', 'rocky', 'alma', 'fedora']
- python_repositories[python_distribution] is defined
- item.name != 'scl'
ignore_errors: true
- name: "Добавление SCL репозиториев для старых RHEL/CentOS"
yum_repository:
name: "{{ item.name }}"
description: "{{ item.name }} repository"
baseurl: "{{ item.url }}"
gpgcheck: no
enabled: yes
loop: "{{ python_repositories[python_distribution] | default([]) }}"
when:
- python_distribution in ['redhat', 'centos', 'rhel']
- python_repositories[python_distribution] is defined
- item.name == 'scl'
ignore_errors: true
# =============================================================================
# ЭТАП 2: ОБНОВЛЕНИЕ ПАКЕТОВ
# =============================================================================
- name: "Обновление списка пакетов"
package:
name: "*"
state: present
when:
- python_current_package_manager in ['apt', 'dnf', 'zypper']
- python_current_package_manager != 'unknown'
- name: "Обновление списка пакетов (ClearLinux)"
command: "swupd update"
changed_when: false
when:
- python_current_package_manager == 'swupd'
- python_current_package_manager != 'unknown'
ignore_errors: true
- name: "Обновление списка пакетов после добавления репозиториев"
package:
name: "*"
state: present
when:
- python_repositories[python_distribution] is defined
- python_current_package_manager in ['apt', 'dnf']
# =============================================================================
# ЭТАП 3: УСТАНОВКА СИСТЕМНЫХ ЗАВИСИМОСТЕЙ
# =============================================================================
- name: "Установка системных зависимостей для компиляции"
package:
name: "{{ python_current_build_deps }}"
state: present
when:
- python_current_build_deps | length > 0
- python_current_package_manager != 'unknown'
- python_current_package_manager != 'swupd'
ignore_errors: true
- name: "Установка системных зависимостей для компиляции (ClearLinux)"
command: "swupd bundle-add {{ python_current_build_deps | join(' ') }}"
when:
- python_current_build_deps | length > 0
- python_current_package_manager == 'swupd'
changed_when: false
ignore_errors: true
# =============================================================================
# ЭТАП 4: ПРОВЕРКА И УСТАНОВКА PYTHON СТАНДАРТНЫМ СПОСОБОМ
# =============================================================================
- name: "Проверка наличия Python {{ python_version }}"
command: "{{ python_current_executable }} --version"
register: python_version_check
failed_when: false
changed_when: false
when: python_current_executable is defined and python_current_executable != ""
- name: "Установка Python из пакетов (основной способ)"
package:
name: "{{ python_current_packages }}"
state: present
when:
- python_current_packages | length > 0
- python_current_package_manager != 'unknown'
- python_current_package_manager != 'swupd'
- python_version_check.rc != 0
register: python_package_install
ignore_errors: true
- name: "Установка Python из пакетов (ClearLinux)"
command: "swupd bundle-add {{ python_current_packages | join(' ') }}"
when:
- python_current_packages | length > 0
- python_current_package_manager == 'swupd'
- python_version_check.rc != 0
register: python_package_install
changed_when: false
ignore_errors: true
# =============================================================================
# ЭТАП 5: FALLBACK НА АЛЬТЕРНАТИВНЫЕ СПОСОБЫ
# =============================================================================
- name: "Попытка установки альтернативных пакетов Python"
package:
name: "{{ python_current_packages | select('match', '.*python3\\.1[12].*') | list }}"
state: present
when:
- python_package_install is defined
- python_package_install.failed | default(false)
- python_current_package_manager != 'unknown'
- python_version_check.rc != 0
register: python_alt_install
ignore_errors: true
- name: "Попытка установки SCL пакетов Python"
package:
name: "{{ python_current_packages | select('match', '.*rh-python.*') | list }}"
state: present
when:
- python_alt_install is defined
- python_alt_install.failed | default(false)
- python_current_package_manager != 'unknown'
- python_version_check.rc != 0
- python_distribution in ['redhat', 'centos', 'rhel']
register: python_scl_install
ignore_errors: true
# =============================================================================
# ЭТАП 6: КОМПИЛЯЦИЯ ИЗ ИСХОДНИКОВ (ПОСЛЕДНИЙ СПОСОБ)
# =============================================================================
- name: "Скачивание исходного кода Python {{ python_version }}"
get_url:
url: "https://www.python.org/ftp/python/{{ python_version }}/Python-{{ python_version }}.tar.xz"
dest: "/tmp/Python-{{ python_version }}.tar.xz"
mode: '0644'
register: download_result
failed_when: false
changed_when: false
when:
- python_current_packages | length == 0
- python_version_check.rc != 0
- python_package_install is defined
- python_package_install.failed | default(false)
- python_alt_install is defined
- python_alt_install.failed | default(false)
ignore_errors: true
- name: "Распаковка исходного кода Python"
unarchive:
src: "/tmp/Python-{{ python_version }}.tar.xz"
dest: "/tmp/"
remote_src: yes
when:
- python_current_packages | length == 0
- python_version_check.rc != 0
- download_result is defined
- download_result.rc is defined and download_result.rc == 0
- name: "Конфигурация Python для компиляции"
command: >
./configure
--prefix={{ python_install_prefix | default('/usr/local') }}
--enable-optimizations
--enable-shared
--with-lto
--enable-ipv6
--with-system-ffi
--with-computed-gotos
--enable-loadable-sqlite-extensions
args:
chdir: "/tmp/Python-{{ python_version }}"
changed_when: false
when:
- python_current_packages | length == 0
- python_version_check.rc != 0
- download_result is defined
- download_result.rc is defined and download_result.rc == 0
- name: "Компиляция Python"
make:
chdir: "/tmp/Python-{{ python_version }}"
jobs: "{{ ansible_processor_cores | default(1) }}"
when:
- python_current_packages | length == 0
- python_version_check.rc != 0
- download_result is defined
- download_result.rc is defined and download_result.rc == 0
- name: "Установка скомпилированного Python"
make:
chdir: "/tmp/Python-{{ python_version }}"
target: install
become: true
when:
- python_current_packages | length == 0
- python_version_check.rc != 0
- download_result is defined
- download_result.rc is defined and download_result.rc == 0
- name: "Обновление библиотек для скомпилированного Python"
command: "ldconfig"
become: true
changed_when: false
when:
- python_current_packages | length == 0
- python_version_check.rc != 0
- download_result is defined
- download_result.rc is defined and download_result.rc == 0
# =============================================================================
# ЭТАП 7: СОЗДАНИЕ СИМВОЛИЧЕСКИХ ССЫЛОК
# =============================================================================
- name: "Создание символических ссылок для Python"
file:
src: "{{ python_current_executable }}"
dest: "/usr/bin/python3"
state: link
force: yes
when:
- (python_create_symlinks | default(true)) | bool
- python_version_check.rc != 0
- name: "Создание символических ссылок для SCL Python"
file:
src: "/opt/rh/rh-python312/root/usr/bin/python3"
dest: "/usr/bin/python3"
state: link
force: yes
when:
- (python_create_symlinks | default(true)) | bool
- python_version_check.rc != 0
- python_distribution in ['redhat', 'centos', 'rhel']
- python_scl_install is defined
- python_scl_install.changed | default(false)
- name: "Создание символических ссылок для pip"
file:
src: "{{ python_current_pip }}"
dest: "/usr/bin/pip3"
state: link
force: yes
when:
- (python_create_symlinks | default(true)) | bool
- python_version_check.rc != 0
- python_current_pip is defined
- python_current_pip != ""
- name: "Создание символических ссылок для SCL pip"
file:
src: "/opt/rh/rh-python312/root/usr/bin/pip3"
dest: "/usr/bin/pip3"
state: link
force: yes
when:
- (python_create_symlinks | default(true)) | bool
- python_version_check.rc != 0
- python_distribution in ['redhat', 'centos', 'rhel']
- python_scl_install is defined
- python_scl_install.changed | default(false)
- name: "Создание символических ссылок для Python (без версии)"
file:
src: "{{ python_current_executable }}"
dest: "/usr/bin/python"
state: link
force: yes
when:
- (python_create_symlinks | default(true)) | bool
- python_version_check.rc != 0
- name: "Создание символических ссылок для SCL Python (без версии)"
file:
src: "/opt/rh/rh-python312/root/usr/bin/python"
dest: "/usr/bin/python"
state: link
force: yes
when:
- (python_create_symlinks | default(true)) | bool
- python_version_check.rc != 0
- python_distribution in ['redhat', 'centos', 'rhel']
- python_scl_install is defined
- python_scl_install.changed | default(false)
- name: "Создание символических ссылок для pip (без версии)"
file:
src: "{{ python_current_pip }}"
dest: "/usr/bin/pip"
state: link
force: yes
when:
- (python_create_symlinks | default(true)) | bool
- python_version_check.rc != 0
- python_current_pip is defined
- python_current_pip != ""
- name: "Создание символических ссылок для SCL pip (без версии)"
file:
src: "/opt/rh/rh-python312/root/usr/bin/pip"
dest: "/usr/bin/pip"
state: link
force: yes
when:
- (python_create_symlinks | default(true)) | bool
- python_version_check.rc != 0
- python_distribution in ['redhat', 'centos', 'rhel']
- python_scl_install is defined
- python_scl_install.changed | default(false)
# =============================================================================
# ЭТАП 8: НАСТРОЙКА АЛЬТЕРНАТИВ И PIP
# =============================================================================
- name: "Настройка альтернатив для Python"
alternatives:
name: python3
path: "{{ python_current_executable }}"
when:
- python_current_executable is defined
- python_current_executable != ""
- ansible_os_family == "RedHat"
- name: "Установка pip через get-pip.py если не найден"
get_url:
url: "https://bootstrap.pypa.io/get-pip.py"
dest: "/tmp/get-pip.py"
mode: '0755'
when:
- python_version_check.rc == 0
- python_current_pip is not defined or python_current_pip == ""
- name: "Запуск get-pip.py для установки pip"
command: "{{ python_current_executable }} /tmp/get-pip.py"
changed_when: false
when:
- python_version_check.rc == 0
- python_current_pip is not defined or python_current_pip == ""
# =============================================================================
# ЭТАП 9: ОБНОВЛЕНИЕ PIP
# =============================================================================
- name: "Получение последней версии pip"
uri:
url: "https://pypi.org/pypi/pip/json"
method: GET
register: pip_version_info
when: python_version_check.rc == 0
ignore_errors: true
- name: "Извлечение версии pip"
set_fact:
pip_latest_version: "{{ pip_version_info.json.info.version }}"
when:
- pip_version_info is defined
- (pip_version_info.status | default(200)) == 200
- pip_version_info.json is defined
- pip_version_info.json.info is defined
- name: "Проверка текущей версии pip"
command: "{{ python_current_pip }} --version"
register: pip_current_version
changed_when: false
when:
- python_version_check.rc == 0
- python_current_pip is defined
- python_current_pip != ""
ignore_errors: true
- name: "Обновление pip до последней версии"
command: "{{ python_current_pip }} install --upgrade pip"
changed_when: false
when:
- python_version_check.rc == 0
- pip_current_version.rc == 0
- pip_latest_version is defined
- pip_current_version.stdout is defined
- pip_latest_version not in pip_current_version.stdout
- python_current_package_manager != 'swupd'
ignore_errors: true
- name: "Обновление pip до последней версии (ClearLinux)"
command: "{{ python_current_pip }} install --upgrade pip --break-system-packages"
changed_when: false
when:
- python_version_check.rc == 0
- pip_current_version.rc == 0
- pip_latest_version is defined
- pip_current_version.stdout is defined
- pip_latest_version not in pip_current_version.stdout
- python_current_package_manager == 'swupd'
ignore_errors: true
# =============================================================================
# ЭТАП 10: СОЗДАНИЕ ВИРТУАЛЬНОГО ОКРУЖЕНИЯ
# =============================================================================
- name: "Создание виртуального окружения"
command: "{{ python_current_executable }} -m venv {{ python_venv_path | default('/opt/python-venv') }}"
changed_when: false
when:
- (python_create_venv | default(false)) | bool
- python_version_check.rc == 0
ignore_errors: true
# =============================================================================
# ЭТАП 11: ФИНАЛЬНЫЙ ОТЧЕТ
# =============================================================================
- name: "Сбор информации о системе"
setup:
gather_subset:
- "!all"
- "distribution"
- "os_family"
- "architecture"
- "kernel"
- "python"
register: system_facts
- name: "Проверка установленного Python"
command: "{{ python_current_executable }} --version"
register: final_python_version
changed_when: false
when: python_version_check.rc == 0
ignore_errors: true
- name: "Проверка установленного pip"
command: "{{ python_current_pip }} --version"
register: final_pip_version
changed_when: false
when:
- python_version_check.rc == 0
- python_current_pip is defined
- python_current_pip != ""
ignore_errors: true
- name: "Проверка символических ссылок"
stat:
path: "{{ item }}"
register: symlink_check
loop:
- "/usr/bin/python"
- "/usr/bin/python3"
- "/usr/bin/pip"
- "/usr/bin/pip3"
- name: "Проверка виртуального окружения"
stat:
path: "{{ python_venv_path | default('/opt/python-venv') }}"
register: venv_check
when: python_create_venv | bool
- name: "Сбор информации об установленных пакетах Python"
package_facts:
manager: "{{ python_current_package_manager }}"
when: python_current_package_manager != 'unknown'
ignore_errors: true
- name: "Финальный отчет об установке"
debug:
msg: |
================================================================================
🐍 ОТЧЕТ ОБ УСТАНОВКЕ PYTHON {{ python_version | upper }}
================================================================================
📊 ИНФОРМАЦИЯ О СИСТЕМЕ:
• Дистрибутив: {{ ansible_distribution }} {{ ansible_distribution_version }}
• Семейство ОС: {{ ansible_os_family }}
• Архитектура: {{ ansible_architecture }}
• Ядро: {{ ansible_kernel }}
🐍 PYTHON:
• Версия: {{ final_python_version.stdout | default('НЕ УСТАНОВЛЕН') }}
• Исполняемый файл: {{ python_current_executable }}
• Путь к pip: {{ python_current_pip | default('НЕ НАЙДЕН') }}
📦 PIP:
• Версия: {{ final_pip_version.stdout | default('НЕ УСТАНОВЛЕН') }}
🔗 СИМВОЛИЧЕСКИЕ ССЫЛКИ:
• /usr/bin/python: {{ '✅ СОЗДАНА' if symlink_check.results[0].stat.exists else '❌ НЕ СОЗДАНА' }}
• /usr/bin/python3: {{ '✅ СОЗДАНА' if symlink_check.results[1].stat.exists else '❌ НЕ СОЗДАНА' }}
• /usr/bin/pip: {{ '✅ СОЗДАНА' if symlink_check.results[2].stat.exists else '❌ НЕ СОЗДАНА' }}
• /usr/bin/pip3: {{ '✅ СОЗДАНА' if symlink_check.results[3].stat.exists else '❌ НЕ СОЗДАНА' }}
🌐 ВИРТУАЛЬНОЕ ОКРУЖЕНИЕ:
• Путь: {{ python_venv_path | default('/opt/python-venv') }}
• Статус: {{ '✅ СОЗДАНО' if (venv_check is defined and venv_check.stat.exists) else '❌ НЕ СОЗДАНО' }}
📋 УСТАНОВЛЕННЫЕ ПАКЕТЫ PYTHON:
{% if ansible_facts.packages is defined %}
{% for package in ansible_facts.packages %}
{% if 'python' in package %}
• {{ package }}: {{ ansible_facts.packages[package] | map(attribute='version') | list | join(', ') }}
{% endif %}
{% endfor %}
{% else %}
• Информация недоступна
{% endif %}
🎯 КОМАНДЫ ДЛЯ ПРОВЕРКИ:
• python --version
• python3 --version
• pip --version
• pip3 --version
• python -m venv test_env
================================================================================
when: python_log_level in ["INFO", "DEBUG"]
- name: "Уведомление о завершении установки Python"
debug:
msg: |
✅ PYTHON {{ python_version | upper }} УСТАНОВЛЕН И НАСТРОЕН!
🎯 Основные команды:
• python --version # Проверить версию Python
• python3 --version # Проверить версию Python (с версией)
• pip --version # Проверить версию pip
• pip3 --version # Проверить версию pip (с версией)
• python -m venv env # Создать виртуальное окружение
• pip install pkg # Установить пакет
🚀 Готово к работе!

View File

@@ -0,0 +1,558 @@
$ANSIBLE_VAULT;1.1;AES256
30383031656136373366313033326464666239313737376637323139646239363532313866366337
3965323764326333393261323339376564323135353137620a383034623165383739386331653134
35396462313863663136313436646265313534656335393232623064366337356634353632633538
3530323632393365630a346338626363656362363632653932633936346464643161386138623535
39326539343165363062616464656136623531346131373434346338303366323431616533356234
65313537313164326261346461613134363837373336636333373964666632613535303462306632
66313665653738653938343939333839336332663465663130303762633438623963663335326666
32613465663938323532353664623161303462333531626133303862366366346232343163396232
39633532343264613462326534633230363764656236396161306264613730393131663633663463
31383662316263623038353761626165363233323737333561373833636135376564346536633735
61356632383565303331336234323635383666343032326161303931646530393938353432666165
33366564366135326333383536646635663533623364653664353537396166386363366465386631
30326130616538646138616565393164383864353766643539313937623864386139393231303061
62653866316234383435323839623235623334373862643363363339636639346237326161323738
34616238326233613364343636313862393235393030376161326366383938346132313066333039
64623834616662363832393333613634643932633864653437373533656565383339653530636362
31613864373234383763316132653263666364326362613436613735376561623064363039613532
38643838633434653534643265616432303537383733326433663538623135626339326231396533
61353432306639346136366539636539633830343838363438326233353132303036636131656534
36373466356239623964653334396539356538636232316263646638313963623733313735303439
36646338393566306235353034376633336331363064613563643430353233363731366434343434
61633563353361373735646364336434323362353433346431616335366134623365303435376435
30376165653933643532336131326438316331336338333734626430356431326664336165356139
65323734643263313563346638636534363462616230346237303330303033306366313432323835
32393532316239333834653861623530646163393731616135643666363732646562646139303939
66323331346636373234343932633834643636653333386230353337336365643964336139663732
39663631386235383734313635613436323238656365643133313034363061313131373262343635
38316537386564396363343163663338393761616363643535376136366630336430336566393839
30346134646131383733666433303539313762336136333330313662336163373632353866383539
37353831386363333432663035396466383736396331363839643264346465363435363638303962
31656239383030356433663632626430616332663239333863626131653031393863323139333837
34353564613736363866643161386332326335303866623136363865636264383561313338323464
64363239613730343335323736353234356333313132656161653462396633326237663738643430
36346365303839303861646464373366626366356336373632383532613536656165643435333034
36646230356335653632393532626561373262323332343533363462376138333564393830323665
38366430343063326565623366333034643462663436376538386130303438633138356439326431
65383963653930306235356631363163376162353831626262343237643034633231633864653736
61363239636130653464653239386363663339646331613865383931306635653764343835386438
35353864333434663264626431636331303736353437386665363033376464623730386261643836
64306634366237313733366463366162613137383232326538383863666462373261376539633639
37323463303438323137613166326263313432346533656132616565323664376332336361373862
39363739353862333331383731633962643233623337613738663538303064393764366134373737
61316666396564333935616664303235303032376532343265396163633836623965373936363632
64613361643961363261636534343734616433386364666130353537393231623831636135396265
37303639643361326665313161633835666464396432656539653563366338363633303034613966
61333732623334653833353033326139396263626436376366343263656232323033386162343133
32633131623534666663366632313530346233303631623332356364666634643263323562633535
32633261356462346530623264326331356438643230313261623036653336376139613863613831
63643932623330646338313563333266356463373639366537373463616239353638663733653530
30613566613364353564663761313432363136613634353934323265326530643039366331393837
63636136656435306366383438313264346233623237333433303666396131346466303737323566
34386334633232363333333733333737636534363832653663396664333736383438626433616434
63303738326238336365363664316338323033613461373038383931373261323066626463616639
38353964663663346436326536353836376461643930313034366534336263613563333932656637
33383263313735373233323161623135663261623230633636653034613537616537623433616233
38623937343834353033363964643665616563313366373430653161666462653930323930616232
30333539383832633038626634653134393538666666363736373730623134353264383064653330
33356362316631633538323032373831663932323466656362623530366531646331353139366335
63333832656235643431393162346233366265306234333435636361636464313862366362636666
37363663333164613334666163343033626361316464633465346434613833306564316362353864
63323834376432373738326130333136643665376638636665356534353834306536336463613430
63313338313961653234306662616639363061376265376561643934346232626233363862363237
64616638336238623836356238653037333964396630373539616664376261663038646334643565
65626439396539366231623839336131353363396238316630376537666536396565646431343162
34313335383461336131623765653836643939633439353463343531663339363366353261316436
33656330396133613361343630666163613534323963316234393861316537613362386237623434
61623736303636303230636363386665383435383234643464373766323366363233343730306639
34313165343237346234653730343631623866633063376165626538666238333763616230343335
36363235343361353964666665303633363330643230303865323039666263336431303566306238
32316461646438343964373463313563363634663238393432353235313030303030653666626334
30326463336233386365613930396338613733333835346362313939656438653564383363626432
36323662336662353165653931656439323061306534323666373837363736386166326537663662
34356162316537313039313132383032636337626366663235336532636531326330376466646637
35353737626534316431376534303162396435643538643138326430326534303530393136663138
61303530643732353138313230323833663862383534393336643334326239643339353631376561
66343263616537633233633635313939323963366661663363306164326334333935333061653866
30343465396266636436396666363731333932623338396230356336653438346330633739373930
30343734353463383530363330343033303961323765386438303432636562306262373038386135
62623466333261613062306636373230656333306265636366623965323136356132653739666363
65656438366533393933353064663036386536373662626462666438623663383866616566613564
34333739336665646463363131323435613233323138306533643532326363363132336239383939
63636239663834376465653839613336656137653537366664383666633631316665356337306562
65653363393938363366353237613337653635653336616230333831613939333931366664343531
32613336313561663639643431323531306333666663383563616338653535356232623365616439
37646434393032353364363532373531353732353163393261396430333234643961353835326164
61343465666635333730353265346535636639313464633564373930303133393164666263353366
39343532656363343534363363353665353939633232316536613661333039323236383633633065
64393261633539663764383738326666663664363131386433386233633063376239663336333764
63393633353530303132636262346534363434373730383261383165376330333232386232623334
30616665393535366238666662626665616531396162306261333466393038323236363961343461
63303136353764363635666437396561363162336237636532316630646166366265356662366532
33616134323364616130366337323237353934383730356638393265376164363636396439396663
36323863663562666131653062396136623961343831383461303162643639323934343163646635
62343866393536343963623234623063383063313866353831303735336132376233386138626436
66343734346461313536303539633362366661666363653932303062653632643866373161633139
34373365313965616130303339353736643232336263313339653032636161336565613061383463
38393932373833353036643937373261336231613932666133376531373561326661356137363764
32323431326230346334326666393739356461333432613739373539353130326365616431323439
34303934636335623132643832633734353866643561636532313363633265366235353136343663
30343130366634656466333065353534643536353939626562383538356331626635363932353339
31373566633634356161353335326162363463346333633037386638303465353134366466313064
32666239653838343763653839626230643532333061386437343765373962616361643438306138
39633864396366383361333834336664396663653830626661343630336336356666326330346564
62663961613331613735303535623239343363346538636264666333333965316566643839373266
35653938363733336535626639386466306531333361366339363336383864613237613930353430
66643132616231323036363134383230656666653636636630636565653362343039383730616563
65326165303236316161656263333738353532616364633636333565303335653039373265363930
34663238616163393662653639623435343764363737323035306238633534316234646136383866
30366234636139643539653033653434623462626663386161336232643465373933353064613431
39626264306662666462383863323530383332623438613239663334373632663930613838396133
63613634346239363738633532666139393066613236333339626166613033663066376462326363
64616631373663313337653764356434616536643037303039663264653435323262316337623562
62333735373334663830626161643661306266333836373630313132346566643735386535323833
38393561636338353130623834346330666435336437633865326161316665303665393536643363
37396563653830643536323362663763383735626633643631366462363466396165313132643532
38303638353336363463663135303431373531383130323037363537376238633033656330303433
32643039326532346463303639653062313634623565316130336636353566323638626231643966
66663736633066363631613337393566386566323031353532623331653039643366346664333231
38363964613039643633303032396664666231613537323839613061383861383034353930633730
62643635313336393334303834656238653263373333613866336533393436393236353963353437
35323331636336643136633334663264663934636531633234613637353265363263373461646163
36313936623165396631353430613564303839366630616132616335663264306264343536373065
39393166356163633236626138666233313435373134643561666631326237373632663937633034
64323435623065396636393334306435656566356136633830616364363439663164643563363937
30653839626661363562373938383837613663613234303739306662663535333765353763383631
35616337326530303662626163656162363636643435613661373933663565333061653034623235
63326131343863326535633135323065626335633839343031303735636132316637366334343335
39663865396533383439323830316639653732343264633931613161333732376138623434336533
65303332333335613239383536646435376161363463386536396663373338313738383230383034
36326436626132393631666539353139303964633132333432323335356435386361663339313836
38373336303966663037393065633337633136646561636561363733643633353164626663303864
32393538376136373861306461343637373535333236643065336162393731626164326263646632
64343863623764396564303739353937656536636235643238383836653332393564316633386535
35623834663137663833323438396164393933616336316333313835316432373331313764313464
37373434366532636233636137303763396365373337613936633534386261636464313562393332
66386532623261666636396435393862613266363331616436353830306335396431396464663866
37356162616365663366653531363366343735363938646262323132623364376162313236653238
33643434396432663861313236666536383766363531343731343530383565656339323261626264
38376534363764623466366635363936356337316161343135363366363161363237346465396362
30613634623365393861323864616239626562353536353964313037613764316261343632646335
37393965386463613437383231363434643464653866633438373634336437303364653833383061
64666663376631623632386164303535393732656239616432363937636239633034313762383462
64393730353333336536626435363231313633626433653330653861363733326339363632623566
62636365396466353163316132316332363238373663303631663535363732336536326232386138
32643563306333383966613866333635326332363039323362643137343531316630346566333635
66366430633835626233353763346165393436663562316637393737313032306130306165613936
34633133396131393464316432626162633731333961643565313734333336616662643163323662
63643665666439616561633330656138656237323465323766656335393938376234336532626335
64383635376539353064333766303031386635303861383631623661306461356566313337333564
35383861303732396630303338303037396263323164303263663331626662656565656635663163
31633637336234366532626134323037643736633363313363346534396237326265303632636531
38343565386265366537323235366432356231643361373134386461303734323465376162316437
37356163636135666131353938653734333430343532383436663536616164306637643132376137
33323034656564336263386131613030633033626536663461333531376436643038326661336633
32613562373061616165393738343433336337353731363238316433643864663535346631376433
38656433373938306532656333373366373533383361303638303031326237633037393936316361
32643731316665323862323736663036623535346633396261646430666634646437336236366631
35356364666130316530346539356639616136326463326161306362616137323934643330653638
65316234396538336466343037396638623865626336326630313662653438373066363562356563
37303035333263653233643634323539663533323236383766393738626234653264613966386665
31643736343230393064616562613339653133646530656664643234343733626562633831316432
66323539643039376330366539663431633430366536393439346136303561333466323032373332
61386261303662633334353964303835623836623934373365663663333036653939306161616333
34613330643931396366613961323837663435303762656237336631366135663230653963643161
36656163303433633634313034306138623063653464313035636666383035356232386566653836
38373033333637616266313739633235636430653964303538653837373862353133306562353437
39373732653335306665353561343834356364346537306537366630346261623965326235663464
31326137303937653432313935313962376537313635343538633038383436613231336434353033
38653764383539373737336231396561633934633031386438656263653265306230353839343731
30646436363162313063653733653861396261383764336535623731623662613165376161643830
35376537366264303463326661373532353436323733623262396365333536623365353939656165
31353263326535643938636163313330313135393335356335343466303865353566373031643537
63383337323461396535333864333738363333303932363063303235316461356239626264306135
63376535323461656365366364623036643230643838646636393764363432376262633264373238
66663364356335623236643964663063643134656162363761383263393863633539646463396234
63643465656461666263316532616162616166646536353261626263373361313036316634343232
65646162396339623636376434313261656532316161653731336364366632633138373136623465
35396235343336316361653361643332353337373266356433386166653539646564303636333666
65383032636236613230353430366464626562383462616665393238383133353236326365643463
37633963333530623434633239333161326339623633626661313465323364666665663163333862
39636663393864643230623966356237613162323232393539363138643165653264313337373532
38343439353231373361613266386565326634323764353238653061613238663865363366663465
39323336653664373036363966313137643632656339613737346236303030386434653866363662
30623566666231393333383135393233373232326466356636383865313036393430663137643964
62376664343834326164313238633361363534313264383132306239363764353934306638646564
61613166623032393537306231363864653339656636303238636439363830313537353466393262
66363139643638363466643366613065303562336262343733386338663533383431666131386331
63666164613031313037343961306165616364613533303362646563613465366462353066373865
64353038376535306234636664393834313966376430396136373333383963373766323063636534
30393562363030663364303332666232376231373138386334653130386437363639326330393339
36383963363235306665663762623530353132626234303262636630653662623435393162396364
66613737626665383433303065613062643230306637353862306461363834643863306130363931
37613838396534306130363737643763386639663030303166383636316164326233346536633265
33653334353234313437636338303063336266613964343935636634633665356233653230303431
35363664626266613539383363323837316433613635653765303436333133313266333336393930
31346535646633336164363930396532633139666462326463633565343136336532363634326365
62643638393562643830323635616562656366356665626665653232333133396263313362663432
39366538353138373439633636626338346233343238383761353839666664323232613537316366
32363738353465653335616465303138376137663532363339653237383834343834333761353563
35306138306365663030323030353066383735636135393731393961373830303331666330366335
34613139616333396139623161326164623433396362663465373162666139376565346564383432
65613132356161316337653966353332326430303735313531626561656335373633626230646532
37343236386534376531666138383736373634323762376436646465306361303333313238626264
34316364383731666332373864356235616336303265383130373365346434383137646562616436
63373364393166333839666535376266613933653335353032633933656633666665363239666165
36633934393263363961663234636134366634353938356639313466333963343363353464653033
35396463303333336161363238393361633131643639373064653531643734646537363266333031
35636533303061326563373564613461376632346335666263623030646232386562646166313038
30386336373661383338626234616633333437396465316133633764393337383839633730663565
36386438326334633132383334366165393734666634396365393763373965613562313565333135
32663765366532343339376131353664313663643033623039663237303330646363613366623830
36613664333834373333343139643163393665353930336666613830633064326431346437346662
38383961323162386162393035373931633938363635396534383138633838666233616532313037
37353231323237326633623730653936613834666562303461663230656565366339303930383635
31623338363866663161626266646639613865333835326130313161316166356331663733633136
63306438336334636636383565383238656537653530336539376133656531393765306562366637
65373634313361373461303439366564346164303532306664616636623061656138363939373839
66616630616233326336336432333932316163643339333639393134353265636364303037396462
61313333613230633764383163656233393637353463313864376536313863636464316232626235
64313333613833626636396437383230323365393764653630393832623063633530666236653962
36393630633838396333343064313063323463643861393936343739653834636234663238363239
64626631396562663562396236383933356231643631623562396332393038373830396231643065
66626165626564343262343165336231656232373764643130643138393862343534326165346665
32613235343839386233326166376131636231613964346235323833656164393961333131343233
30383138376632343437616537373338623163306437333961353761343137373233396234633738
61656139633333353532626535306232633230303935386434353263396661383961663832326262
63323638306134316466326431323633383734383833316165383966353933373137396231616536
34656437323934653134623236363163653566613332343262356138386437343337656536653835
64666665373532363966326234646537623864363734633936326130646432623062393965616135
64623565663735643135366439306631396239336165663764373936316661383434333563376230
33313766396632656165653130323663356331343934353133666338346533383465303232306534
33666165353638373239326438623637323864373062623336303132623837386333613639373462
33386135316662613063656135653763326631326235383632336638353130653061383361363437
65616265393438316164633832646561666536356563653464303639376536643231383036353630
35643836663938343036316637633535636265656164383262396138343631323030353132343361
33656264633735343335366630366630616162613635656364383663626136376639353262336564
62633139663662386539396137343761386666613062353838323530333062306263643161653134
31666463386163636530343965313439653464616261306534653466326564313934633561636263
62306334373634626438376161306633366634626633313836366637376136353061656231393035
62323565373864386439623865626536393933376664383762663663303335626166396665376330
64613864343863333133653666353231383863616563303531633833376235363537336233313562
36303634633538383461636332643661613133653436633438656162653930323135363964346538
31343164343535306463303630613731313531363838393431323231363461343434623465363662
32363165323433383937306163643262316362656162313131333635643039643262653763336461
64303338623862613735336636356137366536326166346233373430346432383536343731303962
38323239313132623133333632333534386132663936643965623437623265613330643264663938
31336136393339653134376161376336363633613433363233653032316535313437323134313163
39313762383961346166393136613439313664656163643262653032393131376263343033383536
30373235326130316438633334666364643137346438323436613563306163303732653261306332
61636231653630323739646661646431613165646261626265326537363865376162323962643232
33353962373430363861616137373862366165353139656236333837636233656666336361353531
37363865363039336331666130663438333731393032353365626437363537633138313230383931
64633764396365313535363361373938376230353432643833623737666335383831313863393366
30333734363036636636356139333437393435366461633764343361393734653631313361383930
34356438356164663935323536353238613164353631333364366464396632313736326365653461
66613561316138663866353165326631313230303735313939323765326266646466363832353334
39336261646130663765633632613062383139663662346261306464613139623232383730343734
64356139326338306664393736613964353063623632356333666132373534356465386132336331
63386438653566616435663230653734316339353031336232396430613831623832373165653130
64373262646438393035343066396237613630346432633666633863343465303364346161623331
36656564623037663265613565333230323534393034336534396263353461323131633666376539
30643766373866393132643737613731343162346431343334373533363164616130616364353963
36303138363235353935386138353530333063663632646638303331653261333634303338363766
36326333613433373134386436326162313231316637333565643730633062363861613065643739
31616463663232313937626438653064336630663630383838386333623731366235366430373434
39383530353036343936646235663233306330626630633238623837663564353763363064363131
37623564333766313530343737363833343331623539383934346134663165303536666261326136
31353137306162623932396432666162373232396237663534373530306435613138386165616636
65393466393636643239373436663364313839616431346565316433363865313333393164626631
38393234393630653064336665613431303766656365303832623233363038376538613862323330
37323832663065306436326238356236633135613737306366633133326535333630333065343636
64326631353830663736356630326565623964656166623466633035373762646562313138343165
31666566623639366265653530323463326365316335643966393266333939623165386335373730
32616437616262323665363065306563343964353866663734353664626139376538616633356164
35303230386263653331356530356332616535343536643064666133616666346531613131643330
38363965353130313762636138353830306266633833643035343261636562313863316633613037
64313364623231383761373630616633613361393062653936303231323464333739313166333234
36633762376463613739636561393937316662663963366466343364313932343237656336326433
39393437383735306263316263393730383763383063336137643263653663363532663462363038
66623832643439326334313038616235383337323332653661653137363661343461643033343531
62313261343936303639653132316133623938646235396638376533663136373136326466383430
33303234623238313063613431313263303861663534656438333037636236313335363033323530
64353739383361613330316332313137333465346636656237366230316262383430633466323337
35373662323631336134316663653665396535316563333931366133353237663665376238356138
37653433376262313830663936656236646531333136623136623439363935646265663639303832
35313930376637633832356634356361653863616136343931326237373237633930626130366461
65613038343934313466653535656336323834323964356263333761656135316134306335616339
65633931326333383464666663623938373137393734633934376133636135666564363534663164
39346539386362303238343430623666393430363962636337643631313766626430313636376166
34646431643131343461326532343034313163646565623131346639303435333731626364393337
61653536653163663161656661353531653530383065386330366431353863616233393265663061
35343630306261333437633861393635383462643135613836356566363933356230396265323131
37386431326431356462363734366263613439643265636535616537373035383262613934663663
34353265653865316337396333326664656639316365376535323738663335396165663330376531
32356337636635643365663839653164653239643030336364636165663564653137303034336532
38633963316664376466383537306231383765643533383237656163646462363465303764313037
30333765666661363961336233613961356531393865393430643938613339333165316562623034
32353737353161663764343763656265653762366332613735393338626264396431383061633139
65633565653638366361346564323866626566323839393365376662616365306336626336326333
65616636613831346131393135323066303462613336303437643438323462326161626137393130
34666231366438303737626239343135353862633866333533366434663837656133333131626536
38306439353535643363313231333834393161316634313332373034313938353864343333386164
64623133376166383666383339623465336163633130333530383939396233306430613737653737
65326561303137316331366632633735646431336538396333343731363139346563383332383231
61656632356339626236353932313033663138356663373464313734303165633063653833303361
61643765373236633533363961383834376563303863663732313435663138316335616335626431
34323662383662643536636561303438623464323632666634656137316632656462616138326335
62663034376133636136656561376533646435393938623936356466303735366564316137633765
36626238643765303437356238666166656462643737333939336261346437616564613132373033
37363834656636663331633064383831623966373963633137666265306430346631626530343430
64626566633237313737383836656661396132383634333831393732393732663665383565396532
34626538306461353265353465626263353066646334666439343963643137633934383434636138
35666564393035326133396238313862396536343466313030316566323531343437613863663935
33633230376135393634363064306531303266316131666532316135386263656237656232326338
38613564613263353031363766333732633736376230393634613064626434343562623164616133
35363837383235343734353365353365376663616134643966363331356339646261353863643039
32313331633364383235316562333139626362316662626631643863653237323765353261323431
39316135646665366634356436663730666661663133396161353566323239353463336133336530
33353734316131326662313365373536623434353261336530666363336561323036643661613462
34346166363363346431623139343931623164626135303038623134613033623939313539353838
30393430376161306431633132343039643161376562393637363338616536636538333837323336
62396565333261316163636336306139613935336666653833373666346162623962633938323237
65383435323036643664393635626233663930623730313036396132373336346462636235383131
38353731323562613666373534616366346333646535343332353931623133333931363763313433
32636534643736363066633535356562663430353335346134646266623761646264623463373933
34373936363262626230396363306531633465363966333438376433323366616436363030623032
39643836656336623338373565326533366366646663636136316362646136613463306666653433
37313366353230396334316466326238396165366262393161653334636532646635656334373964
33393133363265306434396332313636663165303531623462653262393062396261623638376364
31393033313731353134326163623938636539313737376134383062613633306466366236373862
37623035303337333437376165303563386536363964613663653336373465636433326539396166
32386166626432363062363566326531383038306464376236356166663837313166613032663237
37363236613662343037396161623738613738383533343831393533663665653563326637353732
37646362366533396134376561353234383234306632316636333433636337616635343534623139
66363833623864653961646134623137343933653064346339623736643162643366386631643762
30363766626434383531363261306563393862323231663131323131646332626463393965356665
38626436303630663132353164396131386232663565656635366134643238386633396534303864
35363538646461386230653239386436393865626235343137333562663730343937323530346139
37376136323736363964643165366662613738626537633065333631613163333436366163383865
36663161346536383935383833623238383834343330366561663236313363363737353263663033
66636638643331393335363761303533353633393534316332363736646361643630353466666366
34356464646431643366343631646339356532326562343461643461663863303937356337396633
39353839663761393133353262643535313536313761386636633939636562353166393133383336
62373861316437633430653438356562623138386230613238306463346131363039613265343462
64336132666364613762353661626638343938393638623337323366336563373436376535343236
65643835323733653563643639383634316166353138323835306365306666633664623834663736
64643462383863633836613963313666633631633562646336653237653562633464373035616365
38383032633532336264303464346266303030336334663934376361623230343234653937393266
33383162356632346164316564343933386264373866343439333966616436663065616236626631
30383431623163346664653833376563626439616333613539376131333663663864376233356533
32613934386336323834323835373163613034323438653636636133623439383265323735393166
37373039616162336565303836663037636466626439653534636236313831393538396138386662
62316366313634393461326337656362363131653564616432616239636364386565313531633265
30383136393961346164666430633631326133366265396564316165346362306338623461666237
63626664373533666263303934316662353061333239356631326232316461623233386236646536
36663064653033343539666135633932333832373564346364336135626539323032353430663635
66376134306639306431653666653230323465346363363563636261363666343939316532616638
32323366356430633861633538633137313738343664363766636434323661623963396561313663
37323563333732306131306665623065366331313861396661343731363866373236626232623836
65376661303638386264643066386339353366633564393665346632643338613738663633353332
63333261303962356635323735336234316133313365643231373738626338316437616531656337
37633235323734636432623061306366666331343235653462666465393531656665633339333063
39363765383635383964346233333261333466393336376665666663393233373533623761366361
38393033653061366532666632636461396236363662333534326562633230633863633231373061
30616333323661323534323237303034643937303138343261356438626161323737313335306636
36646236653036643731323736653263373161366134373230336261633966306539626331643534
32363333356530306365353635323839383065643833666666613861646465383932353962663961
62656639356438643661643630333736643237313231363532663164633535353138653964353163
62326530623864383366383162613961363830376363306334383433663563363064306666656231
35383037646235643035383435363733623632646335396162346230373133306338666339333363
63613466336236306133623338666237313432373333303638303339623530643362356263646165
34663030653861656564356666623835663465623761393363353666353339663234373132616630
64323139353438646261343935666261363739393131663831623339656266303764656563333563
37626235323334313238363839383837336264363533303935376530393664363136316235616138
37373363346139646566343632373332326261393136393537323763633634306435623538626237
62383561366438366635343239333231633533313734313963383631356436663738623165363962
37383134353536373836383834323034323138323238313039656566393135383662366436643936
35303430663863613365366464333930623331303338353731346134653638633735326535623761
39343261653138333734656232303635636464633635356661303939323138393364316630303632
34643535306434353830393863386461633339373336383138363664306534313665396238346364
33633132366432316233383332613932333536313733333638373034313336623535643136323866
62663531376232363935663939616563623033616233316438363633303530653831303030633832
33393266623965376366663364386633663839366134613039623835663861616336613337353366
62643531343730386636303032653766386564636439666133333231653838646564613338303533
64376137613565396339623131366436633761393033343161346232333137656136643635633162
30646436343931316430396663383038356330666562613839386534353266326435366230316339
33306166383831383463646534313039306433313435663033363134613566303531373738643865
37363762376432373361383431336632633238316666636135636232616466383639353763343763
65323362343335633164376264656234343137313932633334663430383661396263323761636434
37643137346263643932306466373066373865626230343765343330653465353535363530313162
36383964356166393734393666636363313733353939323239383130623132373163636366376231
61383535666162643164356466356537343837373036366332313265313366346331396439376439
30343565323864656435646534646433323436326566396131386161613339616531326366313064
31636638396139656564653764643635626537343066313632393937306462353234316237313838
34633239646532386333333136653838666630623033363730343665333335613963613337303637
31616261636235326235383864343539626465346434663736636563346463346431323130323432
62643134616330653334666665613162396264323463366434366431636134643937626265363032
38316539643133656530376635623937356638363861653035356536663665616164613439626461
31326162613133303330646366663930376638613139653563366230346539663237306163666436
31343137346463336133383261646339643330636262333833376237636263326462623730383937
37303739386665376663313566303134336565326330643662653263623333373234363863353836
33333139626335383334633830306562363062343437356561303634653032623465363833336434
36366233383532643634373961376463323063616639623662636264623632336532626338373834
36663263353762373563646138306261343763323230616535666664363636336164616134323164
66383330343036366466363162306134613761653964323963323434333931653661313835396535
63646438633739396365623263623335626161393136656338343036313532323238306538386331
62366231356438393331346362666566613634356635646333643833333436313635373232303365
34633161643433316437313231303965393066383934656430316638356166363561623137633638
37303966653362363361306663393761333634336464663338376137346439633364316261323566
63396534383331383563393161633131633539333135306262313332383634653136663465353231
61646638663039326637643837633430376137393632343338323632313832303132303736393434
32306537343665353430333734383439373037653361316437623738373865346332383363633330
35343664353938316335383635396563303664636462393965653030343433303231653539636565
66376234646666643136353365666265616666356262366334616631653864656434623533623139
31396339633034626332316363303866343435393732353865656233343662653737616337366663
64346637306332393461373162333933303136653534386133346265656333663039313236323965
65643161373066333037323936376365613536343464623764613961656437383639383632656165
63323330663061636534383865343535623362316566366137633162643465343132616632303231
39333961623139373433386565366166303661363830656633666262323965646565313564623261
61363730353165666330386164616338666463303739373665396166393464653536653733326239
61623962663234353864396339623766623561376161366632323961373831623435366433656630
31616431613139653166633439633065303466636539306339343837316334303362653335386266
31333766643061366634353636623265313566613965393566663462346632353837613531333030
33373636333433356532346139336137643565373938613439383164343562376664636630306463
35616464353364643239373563346538633435383065316139343931376166303336656534303139
36373237333835643262303866376663366564353732353434333262636566663534663865323536
65396335656561656632323436633535663664326139353137633536643534306633663964646138
37393138316131616264616239373262353633616235666162306564383838393662663830636532
32623939303033636562356230613063363961313936373239653663613832643334303030333135
32313531303164646438623564363865326137396364653066333831373137343938646533373637
34353863316265333339396330363537366537663434373564303034666132653837313939343262
64353663613635306239323933346233346432653761306163386433313464616265386364336532
61336463333230393033313464353031353635623763343662356162343061643839636464633732
38656538613234353235363665646363393466323534643463323032336466623736356138636461
37356438646461653465346265386636336166666632333065613131663837656262623262346563
61313965376162326361666566623138366433313162363033323862333331633964376363363065
30363962376134633862623364376433666334666537383937663162336637356333636263616364
30316337633735373263363861616634353330633238346461663263356232393533656663656538
36383032343764313434653362623332356431313866626264393935306532663332373436333333
35316536653237313264653566303934323739636663303932353636393832373539613264633739
65643431656330636436656337393062343566633864313638353637313430623365333230316234
63613937643666666337376334643561393431303765303865663665336162666362386338653634
36383736313662326433653462663666303633626130326334323637623137633439343930633365
31613963363334333031326530313430626462363532393563643365633035633436313439323430
39613038396238353235643238383862323831663138316466383530623337343661633563343765
66323363633530326662656134363633646666393530383430376362353237366631306365353964
32333061636430376336323937613564373739306366316631653961383937316437646561663131
37383534616636373630393566333262313239326433343136353764363533363964303939373333
61373265353936333765353235643438306264353261393137666332313639663132626566643830
34376637646332383935353230316163643262376433346366666437333462336630623064643964
37623231323230396431626636663433623136313737303062353237656130613465343362613365
34356430386633376634396339333166303235353634336537656332643161303663376137656435
30393266353464656637616639626231386266633133343062663939346261613063663735656663
30396236616537303264393437653534393762633162396631386162383436366330616634316262
62336234636465333663323065303939386536326366326336643762653136373265663130353136
31333964646335653235656466393736626335616237333530366636383664343363396561616437
35666138353230363239663831373564346566393263636665353831363233643733306435623761
31613535353637363235373434396563613233303137653932326361366465306432346164316661
34393263633038633166383633386538656362323765363236373463353532383862646265353361
31646130636661616633383232356464616638316238316233653337626530343933316661626530
37336539643432616261646336633465653961613661326434333262373837303362343438366139
66363733363537653461323531373331613737316266636561376232643461663363633832616235
34653962626365383237633536333730646632316661613131363835366464313038363831656163
66306261343466633230616265323532663130383237313131353565393235613437613935316464
39636665313162393231623037613837636531323132346330356137306265303930393565396636
66343534366162653361336231363331333761366535646664376664376132343361303634386538
34333933613433626132623735376564366330393833376235306262633038326333343134306364
64616237333364623061623137366563333036633962646462343861303434366532366335613061
38613930626264613132303161663061626238333435643162383136376463353131326132326230
36366461343864613865376262633865643835376266663733666634656166623061373062353339
63346264626533636366653262303233643062326435333137643836643334663830303362323662
32323465666339653161393562303131613664333064326332316361663635313031346238323434
39663966393137313361663933383932623131346264323332383837353366626134303130643530
32663566323237643335646132353663343130316530313363616339316632323339373462376232
33386139306537653834303539663936353534376533313661663334353236386434333237356433
32373766323935386632613837376237353461623735383232343237656432316437333866613734
32333936646133313031633465653166313936613863386366333034376464386564663431323939
64636135383335666336363338343432333966363631303966613465333461336535373132363034
32383639393130353566633431636638656463633262333936396338373866633135353734623065
66306265613362333737336334336339326237333435383435346163663538626232373330373661
33376338666639666334366235313461616566343231343734386332653335393130643534303533
65613133613238306237346232326133396638393232383464353664623266313533323664303861
62356531663936353130313533623062613536663931346565643636663536306361366436653232
62656233613861313062363865313361323965313234356331656630346432363037643632306261
34616433663561623432333437653235386565386433633638633564396439383261326539353965
31656238323666613536646136346339386630366534646330336564313961653434313633373763
33363532313835316537386362613162303434343838656637643161623532656235346639346638
63373765393734336134376239366637633865306431623766303230303030383365323430343734
66623331643433343363376565356534326635336166653766393763383737346561613635313739
61353237666164333939343962643436623336326132633038663365353464353465393934313338
35393364656638646436393037323630646436383165613635623965363430353465356232353965
61353439393566323733376663653161363232623833313432353363393362386266333031633938
35643762613931323363633739633937323437353164303066396132326265353561383835376566
30333234316133303461373962613663626462303266636334623437316438386635363132383830
35323038653633633730616637333366306132646161633730393761386331373336373633643132
31646539313338376534376432653538646236336331316538396362373137623565303332373039
65653836313366326131393066393230653034363732353137343265623464333132373036356662
32636131363134383362643133386132366462343939363832333339386263666132396638636139
33663437366564353338303935643138376665303239336563306362653963393465386239633961
64353565323334343730643839616239316631353130313534336430383435633439633465303136
37336462366536396436386361633364326332323761636239613864623563663363366638643866
64323366353232613963386664313238646263323561376565353065393266303462376138643535
66323266396231396437656237643631373865633036646139373835623238633665613566626532
65333134303138343961356236306661343533656166333565323630363630663338633735643236
66646366326139316465613465653730636630333038306330353263303631636132636634346463
39626433353364393931626639656662663236346461393365653863376166663439336161393735
30376464626364316665613830356535613834643837653434356237396433343633623332323534
65316238643262383531373930386638653661376666653563333161643530303337303134393661
62613365343836363965346139636230393036373931316363383566613861306232393165353832
62363065336531643965373433633236636464353134356631343635353363366566366138383532
64353233646432633730386633666565396664393836373735386265323137623038666266613338
39313161646462343439653039326634646365383865633738333162363365316631326436616565
38623664633263636331336336376333326631643662323065383663336662666237653865626530
37303566663961313931393762633562663661396231343334643566616438386663353337623534
36616563633161323036613430616633376234656130643561633964316232633066323030363765
39346139666664343736383631303662626536386531363637313434356431613230656530323462
66393366653738363465333166323266326239393263646634663861613430666630383036666134
30653964613231363866623532366563623136633363353734626237313339643834376461656161
64336431343763313738393161346434623833323661383565386165396464633566376239306639
33646632633936373431643533393865343965313531616338643237323134663462663432663330
36393038303639613339363231643132346330616433393435393733646232663337656164323437
34353065343137306333323835393636303438353966376333313537633435373862626630396437
65656238313836613736663333333830623934383361326161343961623734366266353335346539
61376662313333613666356539656564346361356239303165613038633430336465313736386233
36626266396231333939633263663837626237346634663033363162333737626331396666636430
31336139383635326436636233623835396230633537373331663631306535326638666138653130
33633734373133316363376339333337306333333465366130303561663535363031366635383934
32616433366632316461396135633862333335376236303563613731333637653466323632653566
34376166633038356264393139356365663939346336336436646132396165366565393830333933
64313262303363306335643634323536316132373261623030383065626363616439653431633635
32323662396232346332343532643366303030653130613564636531316163393662636261333531
39666637303231626638636532373537636131646539323532376561336239386531306132363630
38613066343935386339356335373762336532393862396261366136303361373930383936333236
36633264386330313364353564343433373864323239336263643031656135633866653065616262
36303766366664346437346336353837383430623231396230343965366239316339643964313731
66653335373933396133663333346438643939616665393966653733336536646266363030303862
35666334653661313566366138636134393731366362333637303063353730343132386464656666
65633034366431656130666136633533326638316164363935626433316230396430653139376336
30646135623633666232323333303239343835313539356563363238646431336333633134303530
38646335386661356263333131376661323037636664393664623639353862643534613133323634
36656230626533616332643137333838623166633530363461623964306637323230323563386266
33616438333432653633656663626236346137393130633265613831633237633632316133646136
32636466326233306636356538633362336563376562636635376232353761663561313236646337
31636535346566383032383061666134326666626162333739643666373833393562316634303635
39663936346432306363636666653832666531313835306462656134346132353466613438386265
32393634383861626566333237393933373662383633623562343765326464363931313538326463
65326662373864636431326334363337323362333536316661383233393266346532326165333631
39353161663562373863343561383634613036633339336362663838653236366266383961653661
37316563623861313639613439623634323363333133396362323138616263396633623930626337
65636261346437373733626461306364333837363161356538376430653539633732626163633934
38623966363234636662316462626265626339666630333637366162616131623630363533663935
63343139313065383638656262316661396133376132363336373037303036663132336438363664
63396462366437323737346635303334316335333730626535383461343934643261336338386333
37376132623063363261366565383731373436363735386334303161653361663539616238626530
39373639343038363939313835356462373061616434303937376462656365393439613739663738
31363363396165333937313261386331363163636530373031363935356630396164343430663139
65643464376462663666343032616137666632613733303234323636363062356166

View File

@@ -0,0 +1,208 @@
# Роль repo
Роль для добавления актуальных репозиториев на различные операционные системы.
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
## Описание
Эта роль автоматически добавляет следующие репозитории:
1. **Docker CE** - официальный репозиторий Docker
2. **Docker Compose** - репозиторий Docker Compose
3. **PostgreSQL** - официальный репозиторий PostgreSQL
4. **Patroni** - репозиторий Patroni (high-availability для PostgreSQL)
5. **Elasticsearch** - официальный репозиторий Elasticsearch
6. **EPEL** - дополнительный репозиторий для RHEL-семейства (автоматически)
После добавления репозиториев выполняется обновление системы (`apt update` / `dnf update`).
## Поддерживаемые операционные системы
### Debian/Ubuntu
- Ubuntu 20.04 (focal)
- Ubuntu 22.04 (jammy)
- Ubuntu 24.04 (noble)
- Debian 10 (buster)
- Debian 11 (bullseye)
- Debian 12 (bookworm)
### Росийские дистрибутивы
- Astra Linux 1.7 (на базе Debian)
- Alt Linux P9 (Platform 9)
- Alt Linux P10 (Platform 10)
### RHEL/CentOS/AlmaLinux/Rocky
- RHEL 8
- RHEL 9
- CentOS 8
- CentOS 9
- AlmaLinux 8
- Rocky 9
## Требования
- Ansible 2.9+
- Доступ к интернету для загрузки GPG ключей и установки репозиториев
- Привилегии root или sudo
## Использование
### В playbook
```yaml
- hosts: all
become: yes
roles:
- repo
```
### С дополнительными переменными
```yaml
- hosts: all
become: yes
vars:
docker_gpg_url: "https://download.docker.com/linux/ubuntu/gpg"
roles:
- repo
```
## Структура
```
repo/
├── defaults/
│ └── main.yml # Переменные по умолчанию
├── handlers/
│ └── main.yml # Обработчики для обновления кэша
├── meta/
│ └── main.yml # Метаданные роли
├── tasks/
│ ├── main.yml # Основные задачи
│ ├── debian.yml # Задачи для Debian/Ubuntu
│ ├── astra.yml # Задачи для Astra Linux
│ ├── alt.yml # Задачи для Alt Linux
│ └── rhel.yml # Задачи для RHEL/CentOS/AlmaLinux/Rocky
└── vars/
└── main.yml # Переменные репозиториев
```
## Зависимости
Нет зависимостей от других ролей.
## Переменные
### Docker GPG URL
```yaml
docker_gpg_url: "https://download.docker.com/linux/{{ ansible_distribution | lower }}/gpg"
```
### PostgreSQL GPG URL
```yaml
postgresql_gpg_url: "https://www.postgresql.org/media/keys/ACCC4CF8.asc"
```
### Elasticsearch GPG URL
```yaml
elasticsearch_gpg_url: "https://artifacts.elastic.co/GPG-KEY-elasticsearch"
```
## Что делает роль
### Для Debian/Ubuntu:
1. Устанавливает необходимые пакеты (`ca-certificates`, `curl`, `gnupg`, `lsb-release`)
2. Создает директорию `/usr/share/keyrings` для GPG ключей
3. Добавляет GPG ключи для Docker, PostgreSQL и Elasticsearch
4. Добавляет репозитории для всех указанных программ
5. Устанавливает репозиторий Patroni через packagecloud
6. Обновляет кэш пакетов (`apt update`)
7. Выполняет обновление системы (`apt upgrade`)
### Для Astra Linux:
1. Устанавливает необходимые пакеты (`ca-certificates`, `curl`, `gnupg`, `lsb-release`)
2. Создает директорию `/usr/share/keyrings` для GPG ключей
3. Добавляет GPG ключи для Docker, PostgreSQL и Elasticsearch
4. Добавляет репозитории для всех указанных программ (использует Debian Buster как базу)
5. Устанавливает репозиторий Patroni через packagecloud
6. Устанавливает `debian-archive-keyring` для поддержки Debian репозиториев
7. Добавляет ключ и репозиторий **Лаборатории 50** (обновления безопасности, драйверы, Java, Mono, .NET)
8. Обновляет кэш пакетов (`apt update`)
9. Выполняет обновление системы (`apt upgrade`)
**ВАЖНО:** Для получения свежих пакетов рекомендуется использовать официальные каналы обновлений (требует подписки).
### Для Alt Linux:
1. Обновляет кэш пакетов и устанавливает базовые пакеты
2. Создает директорию `/usr/share/keyrings` для GPG ключей
3. Пытается добавить Docker репозиторий (может быть недоступен)
4. Добавляет репозиторий **Sisyphus alt-sisyphus** (rolling release с ежедневными обновлениями)
5. Добавляет репозиторий **Sisyphus classic** (классический репозиторий)
6. Добавляет репозиторий **Sisyphus contrib** (дополнительные пакеты)
7. Добавляет репозиторий **Autoimports** (автоматически собранные свежие пакеты из GitHub/GitLab)
8. Обновляет кэш пакетов после добавления всех репозиториев
9. Выполняет обновление системы (`apt upgrade`)
**Примечание:** Alt Linux использует свои внутренние репозитории. Sisyphus — основной источник свежих пакетов, но может быть нестабилен. PostgreSQL, Elasticsearch и Patroni обычно доступны в базовых репозиториях.
### Для RHEL/CentOS/AlmaLinux/Rocky:
1. Устанавливает необходимые пакеты (`yum-utils` или `dnf-plugins-core`)
2. Устанавливает EPEL repository
3. Добавляет репозитории Docker, PostgreSQL и Elasticsearch через `yum_repository`
4. Устанавливает репозиторий Patroni через packagecloud
5. Обновляет кэш пакетов (`dnf makecache`)
6. Выполняет обновление системы (`dnf/yum upgrade`)
## Примеры
### Установка на Ubuntu 22.04
```bash
ansible-playbook -i inventory playbook.yml --become
```
### Установка на CentOS 8
```bash
ansible-playbook -i inventory playbook.yml --become
```
## Примечания
### Astra Linux
- **ВАЖНО:** Astra Linux ориентирован на стабильность и безопасность
- Официальных публичных репозиториев со свежими пакетами нет
- Все обновления распространяются через официальные каналы по подписке
- **Дополнительно подключаются:**
- Репозитории на базе Debian Buster для установки основных пакетов
- Репозиторий Лаборатории 50 (обновления безопасности, новые драйверы, Java, Mono, .NET)
- Debian archive keyring для поддержки Debian репозиториев
- **Рекомендации:**
- Использовать официальные каналы обновлений (требует подписки)
- Пересобрать пакеты из исходников ALT Linux Sisyphus
- Использовать альтернативные дистрибутивы для систем, требующих свежих пакетов
### Alt Linux
- **Репозиторий Sisyphus** - главный источник свежих пакетов (rolling release)
- Пакеты обновляются ежедневно
- Включает как основной (alt-sisyphus), так и классический (classic) репозитории
- **Репозиторий Autoimports** - автоматически генерируемые свежие пакеты
- Пакеты, собранные автоматически из исходных кодов (GitHub, GitLab)
- Самые свежие версии, но могут быть нестабильны
- PostgreSQL, Elasticsearch и Patroni обычно доступны в базовых репозиториях Alt Linux
- Если пакеты недоступны, можно установить через pip или из исходников
### Общие замечания
- **Patroni** для RHEL-семейства устанавливается через pip, репозиторий packagecloud может быть недоступен
- **Elasticsearch 8.x** требует наличия Java 11 или выше
- После выполнения роли система будет полностью обновлена
- При использовании сторонних репозиториев учитывайте возможное влияние на стабильность и поддержку системы
## Лицензия
MIT
## Автор
Сергей Антропов
https://devops.org.ru

View File

@@ -0,0 +1,4 @@
---
# Переменные по умолчанию для роли repo
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru

Some files were not shown because too many files have changed in this diff Show More