Compare commits

..

103 Commits

Author SHA1 Message Date
Сергей Антропов
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
151 changed files with 15398 additions and 5373 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

View File

@@ -1,44 +0,0 @@
name: Ansible Testing
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
pip install ansible ansible-lint
ansible-galaxy collection install -r requirements.yml
- name: Run lint
run: make role lint
test:
runs-on: ubuntu-latest
needs: lint
strategy:
matrix:
preset: [minimal, default, performance]
steps:
- uses: actions/checkout@v4
- name: Setup Docker
run: |
sudo systemctl start docker
sudo usermod -aG docker $USER
- name: Run tests
run: make role test ${{ matrix.preset }}
deploy-check:
runs-on: ubuntu-latest
needs: [lint, test]
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Check deployment
run: make role deploy
env:
ANSIBLE_HOST_KEY_CHECKING: false

3
.gitignore vendored
View File

@@ -180,3 +180,6 @@ cython_debug/
# Cursor IDE
.cursor/
# Kubernetes kubeconfig
kubeconfig

1081
Makefile

File diff suppressed because it is too large Load Diff

2654
README.md

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
# GitLab CI для AnsibleTemplate
# GitLab CI для DevOpsLab
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru

View File

@@ -1,4 +1,4 @@
# Azure DevOps Pipeline для AnsibleLab
# Azure DevOps Pipeline для DevOpsLab
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru

View File

@@ -1,8 +1,8 @@
# GitHub Actions Workflow для AnsibleLab
# GitHub Actions Workflow для DevOpsLab
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
name: AnsibleLab CI/CD Pipeline
name: DevOpsLab CI/CD Pipeline
on:
push:

View File

@@ -1,4 +1,4 @@
# GitLab CI Pipeline для AnsibleLab
# GitLab CI Pipeline для DevOpsLab
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru

View File

@@ -1,4 +1,4 @@
// Jenkins Pipeline для AnsibleLab
// Jenkins Pipeline для DevOpsLab
// Автор: Сергей Антропов
// Сайт: https://devops.org.ru

View File

@@ -1,8 +1,8 @@
# Docker образы для универсальной системы тестирования AnsibleLab
# Docker образы для универсальной системы тестирования DevOpsLab
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
**Версия:** 2.0.0
**Версия:** 3.0.0
## 🐳 Обзор
@@ -13,16 +13,48 @@
```
dockerfiles/
├── ansible-controller/ # Ansible контроллер с предустановленными коллекциями
├── alt-linux/ # ALT Linux с systemd
├── astra-linux/ # Astra Linux с systemd
├── redos/ # RED OS с systemd
├── rhel/ # Red Hat Enterprise Linux с systemd
├── centos/ # CentOS Stream с systemd
├── alma/ # AlmaLinux с systemd
├── rocky/ # Rocky Linux с systemd
├── ubuntu/ # Ubuntu с systemd
├── debian/ # Debian с systemd
── README.md # Документация
│ ├── 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 # Этот файл
```
## 🚀 Доступные образы
@@ -36,12 +68,11 @@ dockerfiles/
#### Компоненты:
- **Ansible Core** с последними коллекциями
- **Docker CLI** для работы с контейнерами
- **kubectl** для управления Kubernetes
- **Helm** для управления пакетами Kubernetes
- **Kind** для локального Kubernetes
- **yq** для работы с YAML
- **jq** для работы с JSON
**Примечание:** Kubernetes инструменты (kubectl, Helm, Kind, Istio) были перенесены в отдельный образ `k8s`.
#### Предустановленные коллекции:
```yaml
collections:
@@ -80,76 +111,139 @@ docker run --rm \
-v $(pwd):/workspace \
-w /workspace \
inecs/ansible-lab:ansible-controller-latest \
ansible-playbook site.yml
ansible-playbook converge.yml
```
### 2. ubuntu
### 2. k8s
**Базовый образ:** `ubuntu:22.04`
**Тег:** `inecs/ansible-lab:ubuntu-latest`
**Описание:** Ubuntu 22.04 LTS с systemd и Docker
**Тег:** `inecs/ansible-lab:k8s-latest`
**Описание:** Kubernetes контроллер с инструментами для работы с Kubernetes, Helm, Istio и Kind кластерами
#### Компоненты:
- **Ubuntu 22.04 LTS** (Jammy Jellyfish)
- **systemd** для управления сервисами
- **Docker CE** с Docker Compose
- **Python 3** с pip
- **Пользователь ansible** с sudo правами
#### Установленные пакеты:
```bash
systemd systemd-sysv dbus
curl wget git vim nano htop tree jq
python3 python3-pip
docker-ce docker-ce-cli containerd.io docker-compose-plugin
```
#### Настройки systemd:
```bash
systemctl set-default multi-user.target
```
- **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:ubuntu-latest
# Подключение к контейнеру
docker exec -it ubuntu-test bash
inecs/ansible-lab:ubuntu22
```
### 3. debian
### 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`
**Описание:** Debian 12 (Bookworm) с systemd и Docker
**Тег:** `inecs/ansible-lab:debian-latest` или `inecs/ansible-lab:debian12`
**Описание:** Debian 12 Bookworm с systemd
#### Компоненты:
- **Debian 12** (Bookworm)
- **systemd** для управления сервисами
- **Docker CE** с Docker Compose
- **Python 3** с pip
- **Пользователь ansible** с sudo правами
**Компоненты:**
- Debian 12 (Bookworm)
- systemd, Python 3, базовые утилиты
- Пользователь ansible с sudo правами
#### Установленные пакеты:
```bash
systemd systemd-sysv dbus
curl wget git vim nano htop tree jq
python3 python3-pip
docker-ce docker-ce-cli containerd.io docker-compose-plugin
```
**Примечание:** Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile)
#### Настройки systemd:
```bash
systemctl set-default multi-user.target
```
#### Использование:
**Использование:**
```bash
# Запуск Debian контейнера
docker run -d --privileged \
@@ -157,36 +251,23 @@ docker run -d --privileged \
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:debian-latest
inecs/ansible-lab:debian12
```
### 4. rhel
### 5. RHEL (Red Hat Enterprise Linux)
**Базовый образ:** `registry.access.redhat.com/ubi8/ubi`
**Тег:** `inecs/ansible-lab:rhel-latest`
**Описание:** Red Hat Enterprise Linux 8 с systemd и Docker
**Описание:** Red Hat Enterprise Linux 8 с systemd
#### Компоненты:
- **RHEL 8** (Universal Base Image)
- **systemd** для управления сервисами
- **Docker CE** с Docker Compose
- **Python 3** с pip
- **Пользователь ansible** с sudo правами
**Компоненты:**
- RHEL 8 (Universal Base Image)
- systemd, Python 3, базовые утилиты
- Пользователь ansible с sudo правами
#### Установленные пакеты:
```bash
systemd systemd-sysv dbus
curl wget git vim nano jq
python3 python3-pip
docker-ce docker-ce-cli containerd.io docker-compose-plugin
```
**Примечание:** Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile)
#### Настройки systemd:
```bash
systemctl set-default multi-user.target
```
#### Использование:
**Использование:**
```bash
# Запуск RHEL контейнера
docker run -d --privileged \
@@ -197,25 +278,52 @@ docker run -d --privileged \
inecs/ansible-lab:rhel-latest
```
### 5. centos
### 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`
**Описание:** CentOS Stream 9 с systemd и Docker
**Тег:** `inecs/ansible-lab:centos-latest` или `inecs/ansible-lab:centos9`
**Описание:** CentOS Stream 9 с systemd
#### Компоненты:
- **CentOS Stream 9**
- **systemd** для управления сервисами
- **Docker CE** с Docker Compose
- **Python 3** с pip
- **Пользователь ansible** с sudo правами
**Компоненты:**
- CentOS Stream 9
- systemd, Python 3, базовые утилиты
- Пользователь ansible с sudo правами
#### Установленные пакеты:
**Примечание:** Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile)
**Использование:**
```bash
systemd systemd-sysv dbus
curl wget git vim nano jq
python3 python3-pip
docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Запуск 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:
@@ -234,7 +342,7 @@ docker run -d --privileged \
inecs/ansible-lab:centos-latest
```
### 6. alma
### 7. alma
**Базовый образ:** `almalinux:8`
**Тег:** `inecs/ansible-lab:alma-latest`
@@ -243,16 +351,16 @@ docker run -d --privileged \
#### Компоненты:
- **AlmaLinux 8**
- **systemd** для управления сервисами
- **Docker CE** с Docker Compose
- **Python 3** с pip
- **Пользователь ansible** с sudo правами
#### Установленные пакеты:
- **Примечание**: Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile)
```bash
systemd systemd-sysv dbus
curl wget git vim nano jq
python3 python3-pip
docker-ce docker-ce-cli containerd.io docker-compose-plugin
```
#### Настройки systemd:
@@ -271,7 +379,7 @@ docker run -d --privileged \
inecs/ansible-lab:alma-latest
```
### 7. rocky
### 8. rocky
**Базовый образ:** `rockylinux:8`
**Тег:** `inecs/ansible-lab:rocky-latest`
@@ -280,16 +388,16 @@ docker run -d --privileged \
#### Компоненты:
- **Rocky Linux 8**
- **systemd** для управления сервисами
- **Docker CE** с Docker Compose
- **Python 3** с pip
- **Пользователь ansible** с sudo правами
#### Установленные пакеты:
- **Примечание**: Docker CE и Docker Compose НЕ установлены (закомментированы в Dockerfile)
```bash
systemd systemd-sysv dbus
curl wget git vim nano jq
python3 python3-pip
docker-ce docker-ce-cli containerd.io docker-compose-plugin
```
#### Настройки systemd:
@@ -308,7 +416,7 @@ docker run -d --privileged \
inecs/ansible-lab:rocky-latest
```
### 8. alt-linux
### 9. alt-linux
**Базовый образ:** `altlinux/p9`
**Тег:** `inecs/ansible-lab:alt-linux-latest`
@@ -317,16 +425,16 @@ docker run -d --privileged \
#### Компоненты:
- **ALT Linux 9** (Platform 9)
- **systemd** для управления сервисами
- **Docker CE** с Docker Compose
- **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
docker-ce docker-ce-cli containerd.io docker-compose-plugin
```
#### Настройки systemd:
@@ -345,7 +453,7 @@ docker run -d --privileged \
inecs/ansible-lab:alt-linux-latest
```
### 9. astra-linux
### 10. astra-linux
**Базовый образ:** `astralinux/astra-1.7`
**Тег:** `inecs/ansible-lab:astra-linux-latest`
@@ -354,16 +462,16 @@ docker run -d --privileged \
#### Компоненты:
- **Astra Linux 1.7**
- **systemd** для управления сервисами
- **Docker CE** с Docker Compose
- **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
docker-ce docker-ce-cli containerd.io docker-compose-plugin
```
#### Настройки systemd:
@@ -382,7 +490,7 @@ docker run -d --privileged \
inecs/ansible-lab:astra-linux-latest
```
### 10. redos
### 11. redos
**Базовый образ:** `redos/redos:9`
**Тег:** `inecs/ansible-lab:redos-latest`
@@ -391,16 +499,16 @@ docker run -d --privileged \
#### Компоненты:
- **RED OS 9**
- **systemd** для управления сервисами
- **Docker CE** с Docker Compose
- **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
docker-ce docker-ce-cli containerd.io docker-compose-plugin
```
#### Настройки systemd:
@@ -499,7 +607,7 @@ make docker reset-builder
```yaml
# molecule/presets/custom-images.yml
---
#description: Preset с собственными образами AnsibleLab
#description: Preset с собственными образами DevOpsLab
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"

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

@@ -1,7 +1,8 @@
# ALT Linux с systemd
# ALT Linux 9 (Platform 9) с systemd
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# https://hub.docker.com/_/alt/tags
# Тег: inecs/ansible-lab:alt9-latest
FROM alt:p9

View File

@@ -16,7 +16,7 @@ RUN apt-get install -y \
build-essential \
&& apt-get clean
# Устанавливаем Ansible, ansible-lint и passlib для хеширования паролей
# Устанавливаем Ansible, ansible-lint, passlib
RUN pip3 install ansible ansible-core ansible-lint passlib
# Устанавливаем дополнительные пакеты
@@ -83,11 +83,18 @@ 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

@@ -2,6 +2,8 @@
# Автор: Сергей Антропов
# Сайт: 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

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,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

@@ -1,9 +1,13 @@
# Debian Bookworm с systemd
# 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

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

@@ -3,6 +3,8 @@
# Сайт: 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

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

@@ -15,13 +15,17 @@ RUN dnf install -y \
curl \
wget \
nano \
python39 \
python39-pip \
python3 \
python3-pip \
python3-devel \
sudo \
&& dnf clean all
# Создаем symlink для python3 -> python3.9
RUN ln -sf /usr/bin/python3.9 /usr/bin/python3
# Устанавливаем Python 3.11+ из EPEL
RUN dnf install -y epel-release && \
dnf install -y python311 python311-pip python311-devel && \
ln -sf /usr/bin/python3.11 /usr/bin/python3 && \
ln -sf /usr/bin/pip3.11 /usr/bin/pip3
# Устанавливаем yq
# RUN wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_arm64 \

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

@@ -4,6 +4,10 @@
FROM ubuntu:22.04
# Устанавливаем переменные окружения для автоматического ответа на запросы
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=UTC
# Обновляем систему
RUN apt-get update && apt-get dist-upgrade -y

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"]

View File

@@ -2,18 +2,25 @@
## Описание
Пресет `all-images` предназначен для комплексного тестирования Ansible ролей на всех доступных операционных системах проекта. Это самый полный пресет, который включает все 9 образов:
Пресет `all-images` предназначен для комплексного тестирования Ansible ролей на всех доступных операционных системах проекта. Это самый полный пресет, который включает все 16 образов:
### Включенные образы
#### Debian-based системы:
- **Ubuntu** (ubuntu-test) - порт 8080
- **Debian** (debian-test) - порт 8081
- **Alt Linux** (alt-test) - порт 8082
- **Astra Linux** (astra-test) - порт 8083
- **Ubuntu 20.04** (ubuntu20-test) - порт 8080
- **Ubuntu 22.04** (ubuntu22-test) - порт 8081
- **Ubuntu 24.04** (ubuntu24-test) - порт 8082
- **Debian 9** (debian9-test) - порт 8083
- **Debian 10** (debian10-test) - порт 8084
- **Debian 11** (debian11-test) - порт 8085
- **Debian 12** (debian12-test) - порт 8086
- **Alt Linux** (alt-test) - порт 8087
- **Astra Linux** (astra-test) - порт 8088
#### RHEL-based системы:
- **CentOS** (centos-test) - порт 8084
- **CentOS 7** (centos7-test) - порт 8090
- **CentOS 8** (centos8-test) - порт 8091
- **CentOS 9** (centos9-test) - порт 8092
- **RHEL** (rhel-test) - порт 8085
- **AlmaLinux** (alma-test) - порт 8086
- **Rocky Linux** (rocky-test) - порт 8087
@@ -35,20 +42,27 @@ make role test all-images
make docker build
```
2. **Достаточно ресурсов** - тест запускает 9 контейнеров одновременно, требуется:
- Минимум 8GB RAM
- Минимум 4 CPU cores
2. **Достаточно ресурсов** - тест запускает 16 контейнеров одновременно, требуется:
- Минимум 16GB RAM
- Минимум 8 CPU cores
- Достаточно места на диске
### Особенности
#### Порты
Каждый контейнер использует уникальный порт для доступа:
- Ubuntu: `localhost:8080`
- Debian: `localhost:8081`
- Alt Linux: `localhost:8082`
- Astra Linux: `localhost:8083`
- CentOS: `localhost:8084`
- Ubuntu 20.04: `localhost:8080`
- Ubuntu 22.04: `localhost:8081`
- Ubuntu 24.04: `localhost:8082`
- Debian 9: `localhost:8083`
- Debian 10: `localhost:8084`
- Debian 11: `localhost:8085`
- Debian 12: `localhost:8086`
- Alt Linux: `localhost:8087`
- Astra Linux: `localhost:8088`
- CentOS 7: `localhost:8090`
- CentOS 8: `localhost:8091`
- CentOS 9: `localhost:8092`
- RHEL: `localhost:8085`
- AlmaLinux: `localhost:8086`
- Rocky Linux: `localhost:8087`
@@ -72,9 +86,9 @@ make role test all-images
- **Очистка**: ~30 секунд
### Ресурсы
- **RAM**: 8-16GB (рекомендуется)
- **CPU**: 4-8 cores
- **Диск**: 10-20GB свободного места
- **RAM**: 16-32GB (рекомендуется)
- **CPU**: 8-16 cores
- **Диск**: 20-40GB свободного места
## Отладка

264
docs/arm64-support.md Normal file
View File

@@ -0,0 +1,264 @@
# ARM64 Поддержка в DevOpsLab
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
**Версия:** 3.0.0
## 📋 Описание
DevOpsLab обеспечивает полную поддержку ARM64 архитектуры для нативной производительности на Apple Silicon и ARM серверах. Все Docker образы собираются для обеих архитектур (AMD64 и ARM64).
## 🎯 Преимущества ARM64
- **Нативная производительность** - без эмуляции
- **Энергоэффективность** - меньше потребление энергии
- **Совместимость** - работает на Apple Silicon и ARM серверах
- **Скорость сборки** - быстрая компиляция на ARM64
## 🖥️ Поддерживаемые платформы
### Apple Silicon
- **MacBook Air M1/M2/M3**
- **MacBook Pro M1/M2/M3**
- **Mac Studio M1/M2**
- **Mac Pro M2**
### ARM серверы
- **AWS Graviton** (EC2 C6g, M6g, R6g)
- **Azure Ampere** (Dpsv5, Epsv5)
- **Google Cloud** (T2A)
- **Oracle Cloud** (Ampere A1)
## 🐳 Docker образы
### Multi-arch сборка
Все образы собираются для обеих архитектур:
```bash
# Проверка поддерживаемых архитектур
docker manifest inspect inecs/ansible-lab:ubuntu22-latest
# Результат
{
"manifests": [
{
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"platform": {
"architecture": "arm64",
"os": "linux"
}
}
]
}
```
### Доступные образы
| Образ | AMD64 | ARM64 | Описание |
|-------|-------|-------|----------|
| `ubuntu22-latest` | ✅ | ✅ | Ubuntu 22.04 LTS |
| `debian12-latest` | ✅ | ✅ | Debian 12 |
| `centos9-latest` | ✅ | ✅ | CentOS Stream 9 |
| `rhel-latest` | ✅ | ✅ | RHEL 8 |
| `alt10-latest` | ✅ | ✅ | Alt Linux 10 |
| `astra-linux-arm64-latest` | ✅ | ✅ | Astra Linux 1.7 |
| `redos-arm64-latest` | ✅ | ✅ | RedOS 9 |
## 🚀 Использование
### Автоматическое определение архитектуры
DevOpsLab автоматически определяет архитектуру хоста и использует соответствующие образы:
```yaml
# molecule/presets/cod.yml
platform: "linux/arm64" # Автоматически для ARM64 хостов
docker_platform: "linux/arm64"
```
### Принудительное использование ARM64
```bash
# Тестирование с ARM64 образами
make role test cod
# Проверка архитектуры контейнеров
docker exec -it ubuntu1 uname -m
# Результат: aarch64
```
### Смешанная архитектура
```yaml
# Для тестирования на разных архитектурах
hosts:
- name: ubuntu1
platform: "linux/arm64"
docker_platform: "linux/arm64"
- name: centos1
platform: "linux/amd64"
docker_platform: "linux/amd64"
```
## 🔧 Настройка
### Docker Buildx
```bash
# Создание multi-arch builder
docker buildx create --name multiarch --driver docker-container --use
# Проверка builder
docker buildx inspect multiarch
```
### Сборка образов
```bash
# Сборка для обеих архитектур
make docker build-image IMAGE=ubuntu22
# Сборка только для ARM64
docker buildx build --platform linux/arm64 -t inecs/ansible-lab:ubuntu22-arm64 .
```
## 📊 Производительность
### Сравнение производительности
| Операция | AMD64 (эмуляция) | ARM64 (нативная) | Ускорение |
|----------|------------------|------------------|-----------|
| Сборка образа | 5 мин | 2 мин | 2.5x |
| Запуск контейнера | 10 сек | 3 сек | 3.3x |
| Тестирование роли | 2 мин | 45 сек | 2.7x |
### Потребление ресурсов
| Ресурс | AMD64 (эмуляция) | ARM64 (нативная) | Экономия |
|--------|------------------|------------------|----------|
| CPU | 100% | 30% | 70% |
| Память | 2GB | 800MB | 60% |
| Энергия | 100% | 40% | 60% |
## 🐛 Диагностика
### Проверка архитектуры
```bash
# Архитектура хоста
uname -m
# Результат: arm64
# Архитектура Docker
docker version --format '{{.Server.Arch}}'
# Результат: aarch64
# Архитектура контейнера
docker run --rm ubuntu:22.04 uname -m
# Результат: aarch64
```
### Проверка образов
```bash
# Список образов с архитектурой
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Architecture}}"
# Детальная информация об образе
docker inspect inecs/ansible-lab:ubuntu22-latest | jq '.[0].Architecture'
```
### Проверка Molecule
```bash
# Тестирование с COD preset
make role test cod
# Проверка контейнеров
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Platform}}"
```
## 🔄 Обновление
### Обновление образов
```bash
# Пересборка всех образов
make docker rebuild
# Пересборка конкретного образа
make docker build-image IMAGE=astra-linux-arm64
```
### Обновление preset
```bash
# Обновление COD preset для ARM64
make role test cod
# Проверка результатов
docker exec -it ubuntu1 uname -m
```
## 📚 Примеры
### Тестирование на Apple Silicon
```bash
# На MacBook с M1/M2/M3
make role test cod
# Проверка производительности
time make role test cod
# Результат: real 0m45.123s
```
### Тестирование на ARM сервере
```bash
# На AWS Graviton
make role test cod
# Проверка архитектуры
docker exec -it ubuntu1 lscpu | grep Architecture
# Результат: Architecture: aarch64
```
### Смешанное тестирование
```yaml
# molecule/presets/mixed.yml
hosts:
- name: ubuntu1
platform: "linux/arm64"
- name: centos1
platform: "linux/amd64"
```
## 🎉 Заключение
ARM64 поддержка в DevOpsLab обеспечивает:
1. **Нативную производительность** - без эмуляции
2. **Энергоэффективность** - меньше потребление ресурсов
3. **Совместимость** - работает на всех ARM платформах
4. **Автоматизацию** - автоматическое определение архитектуры
5. **Гибкость** - поддержка смешанных конфигураций
Используйте ARM64 для:
- Разработки на Apple Silicon
- Тестирования на ARM серверах
- Оптимизации производительности
- Экономии ресурсов
- Ускорения CI/CD пайплайнов
---
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru

View File

@@ -1,4 +1,4 @@
# Настройка CI/CD для AnsibleLab
# Настройка CI/CD для DevOpsLab
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
@@ -91,7 +91,7 @@ jobs:
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git add molecule/default/site.yml roles/deploy.yml
git add molecule/default/run.yml roles/deploy.yml
git diff --staged --quiet || git commit -m "Auto-update playbooks for new roles"
git push
@@ -272,7 +272,7 @@ stages:
- script: |
git config --local user.email "action@azure.com"
git config --local user.name "Azure DevOps"
git add molecule/default/site.yml deploy.yml
git add molecule/default/run.yml deploy.yml
git diff --staged --quiet || git commit -m "Auto-update playbooks for new roles"
git push
displayName: 'Commit Changes'
@@ -480,7 +480,7 @@ pipeline {
sh '''
git config --local user.email "jenkins@example.com"
git config --local user.name "Jenkins"
git add molecule/default/site.yml roles/deploy.yml
git add molecule/default/run.yml roles/deploy.yml
git diff --staged --quiet || git commit -m "Auto-update playbooks for new roles"
git push
'''
@@ -656,7 +656,7 @@ update-playbooks:
- ./scripts/update-playbooks.sh
- git config --local user.email "gitlab@example.com"
- git config --local user.name "GitLab CI"
- git add molecule/default/site.yml deploy.yml
- git add molecule/default/run.yml deploy.yml
- git diff --staged --quiet || git commit -m "Auto-update playbooks for new roles"
- git push
only:
@@ -847,7 +847,7 @@ pipeline {
# scripts/setup-cicd.sh
# Автоматическая настройка CI/CD
echo "🔧 Настройка CI/CD для AnsibleTemplate..."
echo "🔧 Настройка CI/CD для DevOpsLab..."
# Создание директории .github/workflows
mkdir -p .github/workflows

266
docs/cod-preset.md Normal file
View File

@@ -0,0 +1,266 @@
# COD Preset - Тестирование российских и зарубежных ОС
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
**Версия:** 3.0.0
## 📋 Описание
COD preset (Code of Operations Development) - это специализированный пресет для тестирования Ansible ролей на российских и зарубежных операционных системах с поддержкой ARM64 архитектуры.
## 🎯 Цель
Обеспечить комплексное тестирование инфраструктурных решений на:
- **Зарубежных ОС**: Ubuntu, Debian, CentOS, RHEL
- **Российских ОС**: Alt Linux, Astra Linux
- **Архитектура**: ARM64 (нативная поддержка)
## 🖥️ Поддерживаемые ОС
### Зарубежные ОС
- **Ubuntu 22.04 LTS** - популярная Linux дистрибуция
- **Debian 12** - стабильная основа для многих дистрибуций
- **CentOS Stream 9** - community версия RHEL
- **RHEL 8** - корпоративная Linux платформа
### Российские ОС
- **Alt Linux 10** - российская Linux дистрибуция
- **Astra Linux 1.7** - защищенная ОС для государственных организаций
## 🚀 Использование
### Базовое тестирование
```bash
# Запуск тестирования с COD preset
make role test cod
# Проверка статуса контейнеров
docker ps -a --filter "network=labnet" --format "table {{.Names}}\t{{.Status}}\t{{.Image}}"
```
### Тестирование конкретной роли
```bash
# Тестирование роли devops
make role test cod
# Тестирование роли docker
make role test cod
```
### Проверка результатов
```bash
# Проверка пользователя devops на всех хостах
docker exec -it ubuntu1 id devops
docker exec -it debian1 id devops
docker exec -it alt1 id devops
docker exec -it astra1 id devops
docker exec -it centos1 id devops
docker exec -it rhel1 id devops
# Проверка SSH ключей
docker exec -it ubuntu1 cat /home/devops/.ssh/authorized_keys
docker exec -it alt1 cat /home/devops/.ssh/authorized_keys
```
## 📊 Конфигурация
### Структура preset
```yaml
---
# COD пресет с 6 контейнерами (Ubuntu + Debian + Alt + Astra + CentOS + RHEL)
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# Образы для ARM64
images:
ubuntu: "inecs/ansible-lab:ubuntu22-latest"
debian: "inecs/ansible-lab:debian12-latest"
alt: "inecs/ansible-lab:alt10-latest"
astra: "inecs/ansible-lab:astra-linux-arm64-latest"
centos: "inecs/ansible-lab:centos9-latest"
rhel: "inecs/ansible-lab:rhel-latest"
# ARM64 платформа
platform: "linux/arm64"
docker_platform: "linux/arm64"
# Хосты
hosts:
- name: ubuntu1
family: ubuntu
groups: [cod, ubuntu]
platform: "linux/arm64"
# ... остальные хосты
```
### Группы хостов
- **`cod`** - все хосты COD preset
- **`ubuntu`** - Ubuntu хосты
- **`debian`** - Debian хосты
- **`alt`** - Alt Linux хосты
- **`astra`** - Astra Linux хосты
- **`centos`** - CentOS хосты
- **`rhel`** - RHEL хосты
## 🔧 Особенности
### ARM64 поддержка
- **Нативная архитектура** - все контейнеры собираются для ARM64
- **Оптимальная производительность** - без эмуляции
- **Совместимость** - работает на Apple Silicon и ARM серверах
### Российские ОС
- **Alt Linux** - полная поддержка пакетного менеджера apt
- **Astra Linux** - совместимый образ на базе Debian
- **Автоматическое определение** ОС в роли devops
### Универсальная роль devops
Роль автоматически определяет тип ОС и применяет соответствующие конфигурации:
```yaml
# Для российских ОС
devops_russian_os_config:
clearlinux: # Astra Linux
package_manager: "apt"
sudo_group: "sudo"
additional_groups: ["sudo", "docker", "systemd-journal"]
altlinux: # Alt Linux
package_manager: "apt"
sudo_group: "sudo"
additional_groups: ["sudo", "docker", "systemd-journal"]
```
## 📈 Примеры использования
### Тестирование инфраструктурных ролей
```bash
# Тестирование роли мониторинга
make role test cod
# Проверка установки пакетов на разных ОС
docker exec -it ubuntu1 dpkg -l | grep monitoring
docker exec -it centos1 rpm -qa | grep monitoring
```
### Тестирование безопасности
```bash
# Тестирование роли безопасности
make role test cod
# Проверка настроек безопасности
docker exec -it astra1 cat /etc/ssh/sshd_config | grep PermitRootLogin
docker exec -it rhel1 cat /etc/ssh/sshd_config | grep PermitRootLogin
```
### Тестирование контейнеризации
```bash
# Тестирование роли Docker
make role test cod
# Проверка Docker на разных ОС
docker exec -it ubuntu1 docker --version
docker exec -it alt1 docker --version
```
## 🐛 Диагностика
### Проверка контейнеров
```bash
# Статус всех контейнеров
docker ps -a --filter "network=labnet"
# Логи конкретного контейнера
docker logs ubuntu1
docker logs alt1
docker logs astra1
```
### Проверка сети
```bash
# Информация о сети
docker network inspect labnet
# Проверка связности
docker exec -it ubuntu1 ping -c 3 debian1
docker exec -it alt1 ping -c 3 astra1
```
### Проверка роли devops
```bash
# Проверка пользователя
docker exec -it ubuntu1 id devops
docker exec -it alt1 id devops
# Проверка групп
docker exec -it ubuntu1 groups devops
docker exec -it centos1 groups devops
# Проверка sudo прав
docker exec -it ubuntu1 sudo -l -U devops
docker exec -it rhel1 sudo -l -U devops
```
## 🔄 Обновление
### Обновление образов
```bash
# Пересборка всех образов
make docker rebuild
# Пересборка конкретного образа
make docker build-image IMAGE=astra-linux-arm64
make docker build-image IMAGE=redos-arm64
```
### Обновление preset
```bash
# Проверка синтаксиса
make presets info PRESET=cod
# Тестирование обновленного preset
make role test cod
```
## 📚 Связанная документация
- **[examples.md](examples.md)** - Примеры использования
- **[creating-roles.md](creating-roles.md)** - Создание ролей
- **[universal-testing.md](universal-testing.md)** - Универсальное тестирование
- **[presets-by-os.md](presets-by-os.md)** - Presets по ОС
## 🎉 Заключение
COD preset обеспечивает:
1. **Комплексное тестирование** на российских и зарубежных ОС
2. **ARM64 поддержку** для оптимальной производительности
3. **Универсальность** - одна роль работает на всех ОС
4. **Автоматизацию** - минимальные настройки для максимального результата
5. **Надежность** - проверка совместимости с реальными системами
Используйте COD preset для:
- Тестирования инфраструктурных решений
- Проверки совместимости с российскими ОС
- Разработки универсальных Ansible ролей
- Валидации безопасности на разных платформах
---
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru

View File

@@ -1,7 +1,8 @@
# Создание и разработка ролей для AnsibleLab
# Создание и разработка ролей для DevOpsLab
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
**Сайт:** https://devops.org.ru
**Версия:** 3.0.0
## 🚀 Быстрый старт
@@ -56,6 +57,7 @@ roles/my-role/
```bash
# Интерактивное создание роли
make role create
# Введите имя роли: my-role
# Система автоматически:
# - Создаст структуру папок
@@ -75,6 +77,8 @@ touch roles/my-role/{tasks,handlers,meta}/main.yml
touch roles/my-role/defaults/main.yml
touch roles/my-role/vars/main.yml
touch roles/my-role/README.md
# Добавление роли в roles/deploy.yml вручную
```
## 📝 Разработка роли
@@ -243,7 +247,7 @@ my_role_cache_dir: /var/cache/my-role
galaxy_info:
author: Сергей Антропов
description: Моя кастомная роль для AnsibleTemplate
description: Моя кастомная роль для DevOpsLab
company: https://devops.org.ru
license: MIT
min_ansible_version: "2.9"
@@ -411,7 +415,7 @@ make role deploy
### 1. Автоматическое включение в playbook'и
Роль автоматически включается в:
- `molecule/default/site.yml` (для тестирования)
- `molecule/default/run.yml` (для тестирования)
- `roles/deploy.yml` (для продакшн развертывания)
### 2. Обновление playbook'ов
@@ -532,78 +536,3 @@ MIT
## Автор
Сергей Антропов - https://devops.org.ru
```
## 🚀 Полный цикл разработки
### 1. Создание роли
```bash
# Создание структуры
mkdir -p roles/my-role/{tasks,handlers,templates,files,vars,defaults,meta}
touch roles/my-role/{tasks,handlers,meta}/main.yml
touch roles/my-role/defaults/main.yml
touch roles/my-role/vars/main.yml
touch roles/my-role/README.md
```
### 2. Разработка
```bash
# Редактирование файлов роли
nano roles/my-role/tasks/main.yml
nano roles/my-role/defaults/main.yml
# ... остальные файлы
```
### 3. Тестирование
```bash
# Lint проверка
make role lint
# Тестирование в Docker
make role test minimal
# Тестирование с custom preset
make role test my-custom-preset
```
### 4. Развертывание
```bash
# Тестирование на реальных серверах
make role deploy
# Развертывание на продакшн
make role deploy
# Подтвердить развертывание: y
```
## 🔧 Лучшие практики
### 1. Структура кода
- **Используйте теги** для группировки задач
- **Добавляйте условия** для условного выполнения
- **Используйте обработчики** для перезапуска сервисов
- **Документируйте переменные** в defaults/main.yml
### 2. Безопасность
- **Используйте vault** для секретов
- **Проверяйте права** пользователей
- **Настраивайте файрвол** при необходимости
- **Используйте SSL** для защищенных соединений
### 3. Производительность
- **Используйте кеширование** для повторных операций
- **Оптимизируйте пакеты** для уменьшения размера
- **Используйте параллельное выполнение** где возможно
- **Мониторьте ресурсы** системы
---
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru

325
docs/devops-role.md Normal file
View File

@@ -0,0 +1,325 @@
# Роль devops - Универсальная настройка пользователей и SSH
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
**Версия:** 3.0.0
## 📋 Описание
Роль `devops` - это универсальная Ansible роль для настройки пользователей и SSH ключей на всех поддерживаемых операционных системах. Роль автоматически определяет тип ОС и применяет соответствующие конфигурации.
## 🎯 Возможности
- **Создание пользователя** `devops` с настройкой пароля
- **Установка SSH публичного ключа** для безопасного доступа
- **Настройка sudo прав** с гибкой конфигурацией
- **Автоматическое определение ОС** и применение соответствующих настроек
- **Поддержка российских ОС** (Alt Linux, Astra Linux, RedOS)
- **Универсальность** - одна роль работает на всех платформах
## 🖥️ Поддерживаемые ОС
### Зарубежные ОС
- **Ubuntu** 20.04, 22.04, 24.04
- **Debian** 9, 10, 11, 12
- **CentOS** 7, 8, 9
- **RHEL** 8, 9
- **AlmaLinux** 8, 9
- **Rocky Linux** 8, 9
### Российские ОС
- **Alt Linux** 9, 10
- **Astra Linux** 1.7 (совместимый образ)
- **RedOS** 9 (совместимый образ)
## 🚀 Использование
### Базовое использование
```yaml
---
- name: Настройка пользователя devops
hosts: all
become: true
roles:
- devops
vars:
devops_user: "devops"
devops_password: "{{ vault_devops_password }}"
devops_ssh_public_key: "{{ vault_devops_ssh_public_key }}"
```
### С кастомными настройками
```yaml
---
- name: Настройка пользователя devops
hosts: all
become: true
roles:
- devops
vars:
devops_user: "admin"
devops_password: "{{ vault_admin_password }}"
devops_ssh_public_key: "{{ vault_admin_ssh_key }}"
devops_additional_groups: ["sudo", "docker", "wheel"]
devops_sudo_nopasswd: true
```
## ⚙️ Переменные
### Основные переменные
| Переменная | Описание | По умолчанию |
|------------|----------|--------------|
| `devops_user` | Имя пользователя | `devops` |
| `devops_password` | Пароль пользователя | `""` |
| `devops_ssh_public_key` | SSH публичный ключ | `""` |
| `devops_additional_groups` | Дополнительные группы | `["sudo"]` |
| `devops_sudo_nopasswd` | Sudo без пароля | `false` |
| `devops_shell` | Оболочка пользователя | `/bin/bash` |
### Vault переменные
| Переменная | Описание | Пример |
|------------|----------|--------|
| `vault_devops_password` | Пароль из vault | `"secure_password"` |
| `vault_devops_ssh_public_key` | SSH ключ из vault | `"ssh-rsa AAAAB3..."` |
## 🔧 Конфигурация по ОС
### Автоматическое определение
Роль автоматически определяет ОС и применяет соответствующие настройки:
```yaml
# Для Debian/Ubuntu
devops_debian_config:
package_manager: "apt"
sudo_group: "sudo"
additional_groups: ["sudo", "docker", "systemd-journal"]
# Для RHEL/CentOS
devops_rhel_config:
package_manager: "yum"
sudo_group: "wheel"
additional_groups: ["wheel", "docker", "systemd-journal"]
# Для российских ОС
devops_russian_os_config:
clearlinux: # Astra Linux
package_manager: "apt"
sudo_group: "sudo"
altlinux: # Alt Linux
package_manager: "apt"
sudo_group: "sudo"
```
## 📊 Примеры использования
### Тестирование с COD preset
```bash
# Тестирование на всех ОС
make role test cod
# Проверка результатов
docker exec -it ubuntu1 id devops
docker exec -it alt1 id devops
docker exec -it astra1 id devops
```
### Использование в других ролях
```yaml
---
- name: Настройка инфраструктуры
hosts: all
become: true
roles:
- devops # Сначала настраиваем пользователя
- docker # Затем устанавливаем Docker
- monitoring # И мониторинг
```
### Создание пользователей для разных целей
```yaml
---
- name: Настройка пользователей
hosts: all
become: true
tasks:
- name: Создание пользователя devops
include_role:
name: devops
vars:
devops_user: "devops"
devops_password: "{{ vault_devops_password }}"
devops_ssh_public_key: "{{ vault_devops_ssh_key }}"
- name: Создание пользователя admin
include_role:
name: devops
vars:
devops_user: "admin"
devops_password: "{{ vault_admin_password }}"
devops_ssh_public_key: "{{ vault_admin_ssh_key }}"
devops_additional_groups: ["sudo", "docker", "wheel"]
```
## 🔐 Безопасность
### SSH ключи
```yaml
# В vault/secrets.yml
vault_devops_ssh_public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC..."
vault_devops_password: "secure_password_123"
```
### Sudo права
```yaml
# Базовые sudo права
devops_sudo_nopasswd: false
# Расширенные права
devops_additional_groups: ["sudo", "docker", "wheel", "systemd-journal"]
```
## 🐛 Диагностика
### Проверка пользователя
```bash
# Проверка существования пользователя
id devops
# Проверка групп
groups devops
# Проверка sudo прав
sudo -l -U devops
```
### Проверка SSH
```bash
# Проверка SSH ключей
cat /home/devops/.ssh/authorized_keys
# Проверка прав доступа
ls -la /home/devops/.ssh/
```
### Проверка конфигурации
```bash
# Проверка sudo конфигурации
cat /etc/sudoers.d/devops
# Проверка SSH конфигурации
grep -i "permitrootlogin" /etc/ssh/sshd_config
```
## 📚 Шаблоны
### SSH конфигурация
```jinja2
# templates/devops_ssh_config.j2
# SSH конфигурация для пользователя {{ devops_user }}
Match User {{ devops_user }}
PasswordAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
```
### Sudo конфигурация
```jinja2
# templates/devops_sudoers.j2
# Sudo права для пользователя {{ devops_user }}
{{ devops_user }} ALL=(ALL) {% if devops_sudo_nopasswd %}NOPASSWD:{% endif %}ALL
```
## 🔄 Обновление
### Обновление роли
```bash
# Проверка синтаксиса
make role lint devops
# Тестирование
make role test cod
# Развертывание
make role deploy
```
### Обновление переменных
```bash
# Редактирование vault
make vault edit
# Имя файла: secrets
# Проверка vault
make vault check
```
## 📈 Лучшие практики
### 1. Используйте Vault для секретов
```yaml
# Хорошо
devops_password: "{{ vault_devops_password }}"
# Плохо
devops_password: "hardcoded_password"
```
### 2. Настраивайте группы по необходимости
```yaml
# Для Docker хостов
devops_additional_groups: ["sudo", "docker"]
# Для мониторинга
devops_additional_groups: ["sudo", "systemd-journal"]
```
### 3. Используйте условную логику
```yaml
# В вашем playbook
- name: Настройка devops пользователя
include_role:
name: devops
when: ansible_os_family in ['Debian', 'RedHat', 'Altlinux', 'Clearlinux']
```
## 🎉 Заключение
Роль `devops` обеспечивает:
1. **Универсальность** - работает на всех поддерживаемых ОС
2. **Автоматизацию** - минимальные настройки для максимального результата
3. **Безопасность** - правильная настройка SSH и sudo
4. **Гибкость** - настройка под любые требования
5. **Надежность** - проверенная конфигурация для всех платформ
Используйте роль `devops` для:
- Настройки базовых пользователей
- Установки SSH ключей
- Конфигурации sudo прав
- Подготовки инфраструктуры
- Тестирования на разных ОС
---
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru

514
docs/dockerfiles.md Normal file
View File

@@ -0,0 +1,514 @@
# Docker образы DevOpsLab
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
**Версия:** 3.0.0
## 🐳 Обзор
DevOpsLab использует предварительно собранные Docker образы для различных операционных систем с полной поддержкой systemd. Все образы поддерживают multi-arch сборку и автоматически публикуются в Docker Hub под namespace `inecs/ansible-lab`.
## 📁 Структура dockerfiles/
```
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
├── astra-linux/ # Astra Linux 1.7
├── redos/ # RED OS 9
├── rhel/ # Red Hat Enterprise Linux 8
├── centos7/ # CentOS 7
├── centos8/ # CentOS 8
├── centos9/ # CentOS Stream 9
├── alma/ # AlmaLinux 8
├── rocky/ # Rocky Linux 8
├── ubuntu20/ # Ubuntu 20.04 LTS
├── ubuntu22/ # Ubuntu 22.04 LTS
├── ubuntu24/ # Ubuntu 24.04 LTS
├── debian9/ # Debian 9 Stretch
├── debian10/ # Debian 10 Buster
├── debian11/ # Debian 11 Bullseye
├── debian12/ # Debian 12 Bookworm
└── README.md # Документация по Dockerfiles
```
## 🚀 Доступные образы
### ansible-controller
**Базовый образ:** `ubuntu:22.04`
**Теги:** `inecs/ansible-lab:ansible-controller-latest`
**Платформы:** linux/amd64, linux/arm64
Ansible контроллер с предустановленными коллекциями и инструментами для разработки и тестирования.
#### Компоненты:
- Ansible Core с последними коллекциями
- Docker CLI для работы с контейнерами
- yq для работы с YAML
- jq для работы с JSON
- Molecule для тестирования ролей
**Примечание:** 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"
- name: kubernetes.core
version: ">=2.0.0"
```
#### Использование:
```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
# Выполнение команды
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 run.yml
```
### k8s
**Базовый образ:** `ubuntu:22.04`
**Теги:** `inecs/ansible-lab:k8s-latest`
**Платформы:** linux/amd64, linux/arm64
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 хоста.
### Ubuntu
**Базовые образы:**
- `ubuntu:20.04``inecs/ansible-lab:ubuntu20-latest`
- `ubuntu:22.04``inecs/ansible-lab:ubuntu22-latest`
- `ubuntu:24.04``inecs/ansible-lab:ubuntu24-latest`
**Платформы:** linux/amd64, linux/arm64
Ubuntu LTS с systemd.
#### Компоненты:
- systemd для управления сервисами
- Python 3 с pip
- Пользователь ansible с sudo правами
- Основные утилиты (curl, wget, git, vim, nano, htop, tree, jq)
- **Примечание**: Docker CE и Docker Compose не установлены (закомментированы в Dockerfile)
#### Использование:
```bash
docker run -d --privileged \
--name ubuntu-test \
-v /sys/fs/cgroup:/sys/fs/cgroup:rw \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:ubuntu22-latest
```
### Debian
**Базовые образы:**
- `debian:9``inecs/ansible-lab:debian9-latest`
- `debian:10``inecs/ansible-lab:debian10-latest`
- `debian:11``inecs/ansible-lab:debian11-latest`
- `debian:bookworm``inecs/ansible-lab:debian12-latest`
**Платформы:** linux/amd64, linux/arm64
Debian с systemd.
#### Компоненты:
- systemd для управления сервисами
- Python 3 с pip
- Пользователь ansible с sudo правами
- Основные утилиты
- **Примечание**: Docker CE и Docker Compose не установлены
#### Использование:
```bash
docker run -d --privileged \
--name debian-test \
-v /sys/fs/cgroup:/sys/fs/cgroup:rw \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:debian12-latest
```
### CentOS
**Базовые образы:**
- `centos:7``inecs/ansible-lab:centos7-latest`
- `quay.io/centos/centos:8``inecs/ansible-lab:centos8-latest`
- `quay.io/centos/centos:stream9``inecs/ansible-lab:centos9-latest`
**Платформы:** linux/amd64, linux/arm64
CentOS с systemd.
#### Компоненты:
- systemd для управления сервисами
- Python 3 с pip
- Пользователь ansible с sudo правами
- Основные утилиты
- **Примечание**: Docker CE и Docker Compose не установлены
#### Использование:
```bash
docker run -d --privileged \
--name centos-test \
-v /sys/fs/cgroup:/sys/fs/cgroup:rw \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:centos9-latest
```
### AlmaLinux
**Базовый образ:** `almalinux:8`
**Тег:** `inecs/ansible-lab:alma-latest`
**Платформы:** linux/amd64, linux/arm64
AlmaLinux 8 с systemd.
### Rocky Linux
**Базовый образ:** `rockylinux:8`
**Тег:** `inecs/ansible-lab:rocky-latest`
**Платформы:** linux/amd64, linux/arm64
Rocky Linux 8 с systemd.
### Red Hat Enterprise Linux
**Базовый образ:** `registry.access.redhat.com/ubi8/ubi`
**Тег:** `inecs/ansible-lab:rhel-latest`
**Платформы:** linux/amd64, linux/arm64
Red Hat Enterprise Linux 8 с systemd.
### ALT Linux
**Базовые образы:**
- `altlinux/p9``inecs/ansible-lab:alt9-latest`
- `altlinux/p10``inecs/ansible-lab:alt10-latest`
**Платформы:** linux/amd64, linux/arm64
ALT Linux P9 и P10 с systemd.
#### Компоненты:
- systemd для управления сервисами
- Python 3 с pip
- Пользователь ansible с sudo правами
- Основные утилиты (curl, wget, nano, sudo)
#### Использование:
```bash
docker run -d --privileged \
--name alt-test \
-v /sys/fs/cgroup:/sys/fs/cgroup:rw \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:alt9-latest
```
### Astra Linux
**Базовые образы:**
- `registry.astralinux.ru/library/astra/ubi17:1.7.6.uu2``inecs/ansible-lab:astra-linux-latest` (AMD64)
- `debian:bookworm-slim``inecs/ansible-lab:astra-linux-arm64-latest` (ARM64 совместимый)
**Платформы:** linux/amd64, linux/arm64
Astra Linux 1.7 с systemd. Для ARM64 используется совместимый образ на базе Debian.
#### Компоненты:
- systemd для управления сервисами
- Python 3 с pip
- Пользователь ansible с sudo правами
- Docker CE и Docker Compose
- yq для работы с YAML
- Основные утилиты (curl, wget, nano, sudo)
#### Особенности ARM64 версии:
- Эмулирует Astra Linux через настройку `/etc/os-release`
- Максимально совместим с оригинальным Astra Linux
- Поддерживает все необходимые пакеты и конфигурации
#### Использование:
```bash
# AMD64 версия (оригинальная)
docker run -d --privileged \
--name astra-test \
-v /sys/fs/cgroup:/sys/fs/cgroup:rw \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:astra-linux-latest
# ARM64 версия (совместимая)
docker run -d --privileged \
--name astra-arm64-test \
-v /sys/fs/cgroup:/sys/fs/cgroup:rw \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:astra-linux-arm64-latest
```
#### Сборка ARM64 версии:
```bash
# Специальная команда для сборки Astra Linux с поддержкой ARM64
make docker build-astra-arm64
```
### RED OS
**Базовый образ:** `registry.red-soft.ru/ubi7/ubi`
**Тег:** `inecs/ansible-lab:redos-latest`
**Платформы:** linux/amd64 (ограничение базового образа)
RED OS 9 с systemd.
## 🔨 Сборка образов
### Сборка всех образов
```bash
# Собрать все образы (multi-arch)
make docker build
# Пересборка с очисткой кеша
make docker rebuild
# Сборка конкретного образа
make docker build-image IMAGE=centos7
```
### Поддерживаемые платформы
По умолчанию все образы собираются для следующих платформ:
- `linux/amd64` - 64-bit x86
- `linux/arm64` - 64-bit ARM
Дополнительные платформы (опционально):
- `linux/riscv64` - RISC-V 64-bit
- `linux/ppc64le` - PowerPC 64-bit LE
- `linux/s390x` - IBM Z
- `linux/386` - 32-bit x86
- `linux/arm/v7` - ARM v7
- `linux/arm/v6` - ARM v6
### Тегирование
Все образы автоматически получают теги:
- `inecs/ansible-lab:<имя>-<версия>` - версионированный тег
- `inecs/ansible-lab:<имя>-latest` - последняя версия
Например:
- `inecs/ansible-lab:centos9-9.0`
- `inecs/ansible-lab:centos9-latest`
- `inecs/ansible-lab:ubuntu22-22.04`
- `inecs/ansible-lab:ubuntu22-latest`
## 📤 Публикация в Docker Hub
### Требования
1. Авторизация в Docker Hub:
```bash
docker login
```
2. Настройка билд-ксер (buildx) для multi-arch:
```bash
make docker setup-builder
```
### Публикация
```bash
# Публикация всех образов
make docker push
# Публикация конкретного образа
make docker build-image IMAGE=centos7
# (публикуется автоматически при сборке)
```
## 🧪 Использование в Molecule
### Preset конфигурация
```yaml
# molecule/presets/my-preset.yml
images:
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
centos9: "inecs/ansible-lab:centos9-latest"
debian12: "inecs/ansible-lab:debian12-latest"
hosts:
- name: web1
family: ubuntu22
groups: [web, test]
- name: db1
family: centos9
groups: [database, test]
```
### Тестирование с preset
```bash
# Использование preset в тестах
MOLECULE_PRESET=my-preset make role test
# Или напрямую
make role test my-preset
```
## 🔧 Особенности образов
### Поддержка systemd
Все образы настроены для работы с systemd в контейнере:
```bash
docker run -d --privileged \
--tmpfs /run --tmpfs /run/lock \
-v /sys/fs/cgroup:/sys/fs/cgroup:rw \
--cap-add SYS_ADMIN \
inecs/ansible-lab:ubuntu22-latest
```
### Настройки по умолчанию
- **Пользователь ansible**: пароль `ansible`, sudo без пароля
- **SSH доступ**: включен для пользователя ansible
- **systemd**: multi-user.target по умолчанию
- **Временные файловые системы**: `/run`, `/run/lock`
- **Volumes**: `/sys/fs/cgroup`
### Docker внутри Docker
Все образы поддерживают запуск Docker внутри контейнера:
```bash
docker run -d --privileged \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /sys/fs/cgroup:/sys/fs/cgroup:rw \
--tmpfs /run --tmpfs /run/lock \
--cap-add SYS_ADMIN \
inecs/ansible-lab:centos9-latest
```
## 📋 Матрица совместимости
| Образ | Платформы | systemd | Docker | Python 3 | Kubernetes Tools |
|-------|-----------|---------|--------|----------|------------------|
| ansible-controller | amd64, arm64 | ✅ | ✅ | ✅ | ❌ |
| k8s | amd64, arm64 | ❌ | ✅ | ✅ | ✅ (kubectl, Helm, Kind, Istio) |
| ubuntu20/22/24 | amd64, arm64 | ✅ | ✅ | ✅ | ❌ |
| debian9/10/11/12 | amd64, arm64 | ✅ | ✅ | ✅ | ❌ |
| centos7/8/9 | amd64, arm64 | ✅ | ✅ | ✅ | ❌ |
| alma | amd64, arm64 | ✅ | ✅ | ✅ | ❌ |
| rocky | amd64, arm64 | ✅ | ✅ | ✅ | ❌ |
| rhel | amd64, arm64 | ✅ | ✅ | ✅ | ❌ |
| alt9/alt10 | amd64, arm64 | ✅ | ✅ | ✅ | ❌ |
| astra-linux | amd64, arm64 | ✅ | ✅ | ✅ | ❌ |
| astra-linux-arm64 | amd64, arm64 | ✅ | ✅ | ✅ | ❌ |
| redos | amd64 | ✅ | ✅ | ✅ | ❌ |
## 🛠️ Управление образами
### Проверка наличия образов
```bash
# Проверка локальных образов
docker images | grep inecs/ansible-lab
# Проверка в Molecule
make custom-images check
```
### Обновление образов
```bash
# Загрузить свежие образы
make docker pull
# Пересобрать с обновлениями
make docker rebuild
# Полное обновление
make docker update
```
### Очистка
```bash
# Удалить локальные образы
make docker clean
# Полная очистка
make docker purge
```
## 📚 Дополнительная информация
- [Структура dockerfiles/](../dockerfiles/)
- [Makefile команды](../README.md#-управление-docker-образами)
- [Preset система](molecule-guide.md#preset-система)
- [CI/CD конфигурация](cicd-setup.md)
## 🔗 Полезные ссылки
- **Docker Hub**: https://hub.docker.com/r/inecs/ansible-lab
- **DevOpsLab**: https://devops.org.ru
- **Документация**: https://github.com/DevOpsLab/docs

View File

@@ -1,425 +1,381 @@
# Примеры использования универсальной системы тестирования
# Примеры использования DevOpsLab
## Пример 1: Тестирование кластера etcd + PostgreSQL + Patroni
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
**Версия:** 3.0.0
### Описание
Этот пример демонстрирует тестирование высокодоступного кластера PostgreSQL с Patroni и etcd.
## Быстрый старт
### Preset: etcd-patroni
```yaml
# molecule/presets/etcd-patroni.yml
hosts:
# ETCD кластер (5 узлов для высокой доступности)
- name: etcd1
family: debian
groups: [etcd, cluster]
- name: etcd2
family: rhel
groups: [etcd, cluster]
- name: etcd3
family: debian
groups: [etcd, cluster]
- name: etcd4
family: rhel
groups: [etcd, cluster]
- name: etcd5
family: debian
groups: [etcd, cluster]
# Patroni кластер (3 узла PostgreSQL)
- name: patroni1
family: rhel
groups: [patroni, database, cluster]
- name: patroni2
family: debian
groups: [patroni, database, cluster]
- name: patroni3
family: rhel
groups: [patroni, database, cluster]
# HAProxy для балансировки
- name: haproxy
family: debian
groups: [haproxy, loadbalancer]
publish: ["5000:5000", "5001:5001"] # RW и RO порты
# DinD узел для тестирования Docker Compose внутри
- name: app-dind
type: dind
groups: [apps, docker]
publish: ["8080:8080"]
```
### Запуск тестирования
### Базовое тестирование роли
```bash
# Информация о preset'е
make preset-info PRESET=etcd-patroni
# Тестирование роли ping с minimal preset (1 хост)
make role test minimal
# Тестирование с preset'ом
make preset-test PRESET=etcd-patroni
# Тестирование роли docker с default preset (2 хоста)
make role lint docker
make role test docker
```
# Или через role test
make role test etcd-patroni
### Просмотр доступных preset'ов
```bash
# Список всех preset'ов
make presets list
# Информация о конкретном preset'е
make presets info PRESET=default
make presets info PRESET=all-images
```
## Пример 1: Тестирование роли Docker
### Описание
Тестирование универсальной роли Docker на разных ОС.
```bash
# Lint проверка
make role lint docker
# Тестирование с minimal preset (1 хост Debian)
make role test minimal
# Тестирование с default preset (Ubuntu + Debian)
make role test default
# Тестирование с preset all-images (16 хостов, все ОС)
make role test all-images
```
### Проверка результатов
```bash
# Проверить статус контейнеров
make container-info
# Просмотр созданных контейнеров
docker ps -a --filter "network=labnet"
# Проверить vault файлы
make vault-check
# Просмотр логов контейнера
docker logs $(docker ps -aq --filter "network=labnet" | head -1)
# Вход в контейнер для проверки
docker exec -it $(docker ps -aq --filter "network=labnet" | head -1) bash
```
## Пример 2: Нагрузочное тестирование
## Пример 2: Использование роли devops
### Описание
Этот пример демонстрирует тестирование под нагрузкой с множественными серверами и кэшем.
### Описание роли devops
### Preset: performance
Роль `devops` - это универсальная роль для настройки пользователей и SSH ключей на всех поддерживаемых ОС.
**Возможности:**
- Создание пользователя `devops` с настройкой пароля
- Установка SSH публичного ключа
- Настройка sudo прав
- Автоматическое определение ОС и применение соответствующих конфигураций
- Поддержка российских ОС (Alt Linux, Astra Linux, RedOS)
### Тестирование роли devops
```bash
# Тестирование с COD preset (6 хостов)
make role test cod
# Проверка результатов
docker exec -it ubuntu1 id devops
docker exec -it alt1 id devops
docker exec -it astra1 id devops
```
### Использование в других ролях
```yaml
# molecule/presets/performance.yml
hosts:
# Основные серверы (5 узлов)
- name: server1
family: debian
groups: [servers, web, app]
- name: server2
family: rhel
groups: [servers, web, app]
- name: server3
family: debian
groups: [servers, web, app]
- name: server4
family: rhel
groups: [servers, web, app]
- name: server5
family: debian
groups: [servers, web, app]
# База данных (3 узла)
- name: db1
family: rhel
groups: [database, db]
- name: db2
family: debian
groups: [database, db]
- name: db3
family: rhel
groups: [database, db]
# Кэш (3 узла Redis)
- name: cache1
family: debian
groups: [cache, redis]
- name: cache2
family: rhel
groups: [cache, redis]
- name: cache3
family: debian
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"]
```
### Запуск тестирования
```bash
# Тестирование с performance preset'ом
make role test performance
# Проверка статуса
make container-info
```
## Пример 3: Тестирование безопасности
### Описание
Этот пример демонстрирует тестирование в безопасной среде с bastion хостами и изоляцией.
### Preset: security
```yaml
# molecule/presets/security.yml
hosts:
# Bastion хосты (точки входа)
- name: bastion1
family: rhel
groups: [bastion, security, jump]
publish: ["2222:22"]
- name: bastion2
family: debian
groups: [bastion, security, jump]
publish: ["2223:22"]
# Внутренние серверы (без внешнего доступа)
- name: internal1
family: rhel
groups: [internal, servers, app]
- name: internal2
family: debian
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: debian
groups: [database, secure, internal]
# Мониторинг и логирование
- name: monitor1
family: debian
groups: [monitoring, security, logs]
- name: monitor2
family: rhel
groups: [monitoring, security, logs]
# Firewall и сетевые компоненты
- name: fw1
family: rhel
groups: [firewall, network, security]
- name: fw2
family: debian
groups: [firewall, network, security]
# DOoD узел для тестирования Docker безопасности
- name: docker-secure
type: dood
family: debian
groups: [docker, security, apps]
publish: ["8080:8080"]
env:
DOCKER_HOST: "unix:///var/run/docker.sock"
```
### Запуск тестирования
```bash
# Тестирование с security preset'ом
make role test security
# Проверка безопасности
make vault-check
make vault-scan
```
## Пример 4: Тестирование на разных ОС
### Описание
Этот пример демонстрирует тестирование на различных операционных системах.
### Preset: multi-os
```yaml
# molecule/presets/multi-os.yml
hosts:
# Debian/Ubuntu серверы
- name: ubuntu1
family: ubuntu
groups: [ubuntu, servers, web]
- name: debian1
family: debian
groups: [debian, servers, web]
- name: ubuntu2
family: ubuntu
groups: [ubuntu, servers, app]
- name: debian2
family: debian
groups: [debian, servers, app]
# RHEL/CentOS серверы
- name: rhel1
family: rhel
groups: [rhel, servers, web]
- name: centos1
family: centos
groups: [centos, servers, web]
- name: rhel2
family: rhel
groups: [rhel, servers, app]
- name: centos2
family: centos
groups: [centos, servers, app]
# База данных на разных ОС
- name: db-ubuntu
family: ubuntu
groups: [database, ubuntu, db]
- name: db-rhel
family: rhel
groups: [database, rhel, db]
# Load balancer
- name: lb-mixed
family: debian
groups: [loadbalancer, haproxy]
publish: ["80:80", "443:443"]
# DinD узел для тестирования Docker
- name: docker-mixed
type: dind
groups: [docker, apps]
publish: ["8080:8080"]
```
### Запуск тестирования
```bash
# Тестирование с multi-os preset'ом
make role test multi-os
# Проверка типов контейнеров
make container-types
```
## Пример 5: Создание собственного preset'а
### Описание
Этот пример демонстрирует создание собственного preset'а для специфических нужд.
### Создание preset'а
```bash
# Создать новый preset
cat > molecule/presets/my-custom.yml << 'EOF'
---
# Пресет для тестирования веб-приложения
# Автор: Ваше имя
# Сайт: https://your-site.com
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
debian: "ghcr.io/ansible-community/molecule-ubuntu-systemd:jammy"
rhel: "quay.io/centos/centos:stream9-systemd"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:ro"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
# Описание кластера
hosts:
# Веб-серверы
- name: web1
family: debian
groups: [web, servers]
publish: ["80:80", "443:443"]
- name: web2
family: rhel
groups: [web, servers]
publish: ["8080:80", "8443:443"]
# База данных
- name: db1
family: rhel
groups: [database, db]
- name: db2
family: debian
groups: [database, db]
# Кэш
- name: cache1
family: debian
groups: [cache, redis]
# DinD узел для тестирования
- name: app-dind
type: dind
groups: [apps, docker]
publish: ["8080:8080"]
EOF
```
### Использование preset'а
```bash
# Информация о preset'е
make preset-info PRESET=my-custom
# Тестирование с preset'ом
make preset-test PRESET=my-custom
# Или через role test
make role test my-custom
```
## Пример 6: Работа с Ansible Vault
### Создание vault файла
```bash
# Создать файл секретов
make vault create
# Ввести имя файла: secrets
# Ввести содержимое:
# ---
# database_password: "super_secret_password"
# api_key: "your_api_key_here"
# ssl_cert: "your_ssl_certificate"
```
### Использование в ролях
```yaml
# roles/my-role/tasks/main.yml
- name: Configure database
template:
src: database.conf.j2
dest: /etc/database.conf
# В вашем playbook
- name: Настройка пользователя devops
include_role:
name: devops
vars:
db_password: "{{ database_password }}"
api_key: "{{ api_key }}"
devops_user: "devops"
devops_password: "{{ vault_devops_password }}"
devops_ssh_public_key: "{{ vault_devops_ssh_public_key }}"
```
### Проверка безопасности
## Пример 3: Создание собственной роли
### Создание роли
```bash
# Проверить vault файлы
make vault-check
# Интерактивное создание новой роли
make role create
# Введите имя роли: nginx
# Найти потенциальные секреты
make vault-scan
# Редактирование роли
cd roles/nginx
nano tasks/main.yml
```
### Разработка роли
**`roles/nginx/tasks/main.yml`:**
```yaml
---
- name: Установка nginx
package:
name: nginx
state: present
when: ansible_os_family in ['Debian', 'RedHat']
- name: Запуск nginx
systemd:
name: nginx
state: started
enabled: yes
```
### Тестирование роли
```bash
# Lint проверка
make role lint nginx
# Тестирование с minimal preset
make role test minimal
# Проверка работы nginx
docker exec -it $(docker ps -aq --filter "network=labnet" | head -1) systemctl status nginx
```
## Пример 4: Использование preset'ов
### Minimal preset (1 хост)
```bash
# Быстрое тестирование на 1 хосте
make role test minimal
# Проверка контейнера
docker ps -a --filter "network=labnet"
```
### Default preset (2 хоста)
```bash
# Тестирование на Ubuntu + Debian
make role test default
# Проверка нескольких контейнеров
docker ps -a --filter "network=labnet"
```
### COD preset (6 хостов) - ARM64
```bash
# Тестирование на Ubuntu + Debian + Alt + Astra + CentOS + RHEL
make role test cod
# Проверка всех контейнеров
docker ps -a --filter "network=labnet" --format "table {{.Names}}\t{{.Status}}"
```
**Особенности COD preset:**
- **Платформа**: ARM64 (нативная поддержка)
- **ОС**: Ubuntu 22.04, Debian 12, Alt Linux 10, Astra Linux, CentOS Stream 9, RHEL
- **Группы**: `cod`, `ubuntu`, `debian`, `alt`, `astra`, `centos`, `rhel`
- **Использование**: Полное тестирование на российских и зарубежных ОС
### All-images preset (16 хостов)
```bash
# Полное тестирование всех ОС
make role test all-images
# Проверка всех контейнеров
docker ps -a --filter "network=labnet" --format "table {{.Names}}\t{{.Status}}"
```
### Preset'ы по ОС
```bash
# Тестирование на всех версиях Ubuntu
make role test ubuntu-all
# Тестирование на всех версиях Debian
make role test debian-all
# Тестирование на всех версиях CentOS
make role test centos-all
```
## Пример 5: Работа с Ansible Vault
### Создание секретов
```bash
# Инициализация vault
make vault init
# Создание нового файла секретов
make vault create
# Имя файла: secrets
```
### Редактирование секретов
```bash
# Редактирование
make vault edit
# Имя файла: secrets
# Просмотр секретов
make vault show
# Имя файла: secrets
```
### Использование в тестировании
Секреты автоматически расшифровываются при запуске тестов и шифруются обратно после завершения.
## Пример 6: CI/CD интеграция
### GitHub Actions
```yaml
name: Ansible Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
run: |
make role lint
make role test minimal
```
### GitLab CI
```yaml
test:
script:
- make role lint
- make role test minimal
only:
- merge_requests
- main
```
## Пример 7: Диагностика и отладка
### Проверка линтинга
```bash
# Линт всех ролей
make role lint
# Линт конкретной роли
make role lint docker
# Линт с подробным выводом
ansible-lint roles/docker/ -vv
```
### Диагностика тестов
```bash
# Проверка preset'ов
make presets list
make presets info PRESET=default
# Проверка контейнеров
docker ps -a --filter "network=labnet"
docker network inspect labnet
# Просмотр логов
docker logs -f $(docker ps -aq --filter "network=labnet" | head -1)
```
### Очистка
```bash
# Очистка контейнеров Molecule
make clean-containers
# Очистка образов
make docker clean
# Полная очистка
make docker purge
```
## Полезные команды
### Просмотр информации
```bash
# Список всех ролей
make role list
# Список preset'ов
make presets list
# Информация об образах
make docker info
# Справка по командам
make help
```
### Docker операции
```bash
# Проверка builder'а
make docker check-builder
# Диагностика buildx
make docker diagnose
# Настройка builder'а
make docker setup-builder
# Пересборка образов
make docker rebuild
```
### Vault операции
```bash
# Создание vault
make vault init
# Работа с секретами
make vault create
make vault edit
make vault show
# Проверка vault
make vault check
```
## Заключение
Эти примеры демонстрируют различные способы использования универсальной системы тестирования Ansible ролей. Вы можете:
Эти примеры демонстрируют основные возможности DevOpsLab:
1. Использовать готовые preset'ы для быстрого тестирования
2. Создавать собственные preset'ы для специфических нужд
3. Комбинировать различные типы контейнеров
4. Использовать Ansible Vault для безопасности
5. Тестировать на различных операционных системах
1. **Быстрое тестирование** с minimal preset
2. **Универсальная роль devops** для настройки пользователей и SSH
3. **COD preset** для тестирования российских и зарубежных ОС (ARM64)
4. **Полное тестирование** с all-images preset
5. **Создание ролей** через интерактивные команды
6. **Работа с Vault** для секретов
7. **Диагностика** и отладка тестов
8. **Интеграция CI/CD** для автоматизации
Для получения дополнительной информации используйте:
- `make help` - общая справка
- `make preset-list` - список preset'ов
- `make container-types` - типы контейнеров
- `make vault` - команды Vault
Для получения дополнительной информации:
- Используйте `make help` для списка команд
- Читайте документацию в `docs/` директории
- Изучайте примеры в `roles/docker/`
---
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru

View File

@@ -1,18 +1,31 @@
# Быстрый старт с AnsibleLab
# Быстрый старт с DevOpsLab
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
**Сайт:** https://devops.org.ru
**Версия:** 3.0.0
## 🚀 Установка и настройка
### 1. Клонирование репозитория
```bash
git clone https://github.com/your-username/AnsibleLab.git
cd AnsibleLab
git clone ssh://git@git.antropoff.ru:222/Ansible/DevOpsLab.git
cd DevOpsLab
```
### 2. Настройка Docker
### 2. Проверка структуры проекта
```bash
# Просмотр доступных ролей
make role list
# Просмотр доступных preset'ов
make presets list
```
### 3. Настройка Docker (опционально)
Если вы хотите собрать собственные образы:
```bash
# Настройка multi-arch builder
@@ -25,22 +38,11 @@ make docker build
make docker info
```
**Примечание:** Используются готовые образы из Docker Hub `inecs/ansible-lab`.
## 🧪 Первое тестирование
### 1. Управление ролями
```bash
# Просмотр всех ролей
make role list
# Создание новой роли (интерактивно)
make role create
# Удаление роли (интерактивно)
make role delete
```
### 2. Просмотр доступных preset'ов
### 1. Просмотр доступных preset'ов
```bash
# Список всех preset'ов
@@ -50,42 +52,58 @@ make presets list
make presets info PRESET=default
```
### 3. Тестирование роли ping
### 2. Тестирование роли ping
```bash
# Тестирование с default preset
make role test
# Тестирование с minimal preset
# Тестирование с minimal preset (1 хост)
make role test minimal
```
### 3. Проверка результатов
```bash
# Просмотр логов
docker logs ansible-controller
# Проверка через логи
docker logs ansible-controller 2>/dev/null || echo "Контейнер не запущен"
# Вход в контейнер для отладки
docker exec -it ansible-controller bash
# Просмотр созданных контейнеров
docker ps -a --filter "network=labnet"
```
## 🔧 Создание первой роли
### 1. Создание структуры роли
### 1. Создание новой роли
```bash
# Создание директории роли
mkdir -p roles/my-role/{tasks,handlers,templates,files,vars,defaults,meta}
# Создание основных файлов
touch roles/my-role/{tasks,handlers,meta}/main.yml
touch roles/my-role/defaults/main.yml
touch roles/my-role/vars/main.yml
touch roles/my-role/README.md
# Интерактивное создание роли
make role create
# Введите имя роли (например: nginx)
```
### 2. Разработка роли
### 2. Редактирование роли
После создания роли будет создана структура в `roles/<имя-роли>/`:
```
roles/my-role/
├── tasks/
│ └── main.yml
├── handlers/
│ └── main.yml
├── defaults/
│ └── main.yml
├── vars/
│ └── main.yml
├── meta/
│ └── main.yml
├── templates/
├── files/
└── README.md
```
### 3. Написание задач роли
**`roles/my-role/tasks/main.yml`:**
```yaml
@@ -94,28 +112,19 @@ touch roles/my-role/README.md
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: Установка пакетов
package:
name: "{{ my_role_packages }}"
state: present
when: my_role_enabled | default(true)
tags:
- my-role
- install
- name: Проверка установленных пакетов
debug:
msg: "Роль {{ role_name }} выполняется на {{ ansible_hostname }}"
- name: Настройка конфигурации
template:
src: my-role.conf.j2
dest: /etc/my-role/my-role.conf
owner: root
group: root
mode: '0644'
notify: restart my-role
tags:
- my-role
- config
- name: Установка пакетов (пример)
package:
name: "{{ my_role_packages | default([]) }}"
state: present
when: my_role_packages is defined
```
### 4. Настройка defaults
**`roles/my-role/defaults/main.yml`:**
```yaml
---
@@ -123,172 +132,104 @@ touch roles/my-role/README.md
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# Основные настройки
my_role_packages: []
my_role_enabled: true
my_role_packages:
- nginx
- curl
# Конфигурация
my_role_config_file: /etc/my-role/my-role.conf
my_role_log_level: info
```
### 3. Тестирование роли
### 5. Тестирование роли
```bash
# Lint проверка
make role lint
# Проверка синтаксиса
make role lint my-role
# Тестирование в Docker
# Тестирование с минимальным preset
make role test minimal
# Тестирование с custom preset
make role test my-custom-preset
```
## 🚀 Развертывание на продакшн
### 6. Добавление роли в deploy.yml
### 1. Настройка инвентори
Роль автоматически добавляется в `roles/deploy.yml` при создании.
**`inventory/hosts.ini`:**
```ini
# Продакшн серверы
[web_servers]
web1.example.com ansible_host=192.168.1.10
web2.example.com ansible_host=192.168.1.11
## 📚 Доступные роли
[db_servers]
db1.example.com ansible_host=192.168.1.20
db2.example.com ansible_host=192.168.1.21
### Docker
[all:vars]
ansible_user=devops
ansible_ssh_private_key_file=~/.ssh/id_rsa
ansible_ssh_common_args='-o StrictHostKeyChecking=no'
```
### 2. Настройка SSH ключей
Универсальная роль для установки Docker и Docker Compose.
```bash
# Генерация SSH ключа
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
# Копирование ключа на серверы
ssh-copy-id devops@web1.example.com
ssh-copy-id devops@web2.example.com
# Тестирование роли docker
make role lint docker
make role test docker
```
### 3. Тестирование подключения
**Документация:** [roles/docker/README.md](../roles/docker/README.md)
### DevOps
Роль для установки и настройки инструментов DevOps.
**Документация:** [roles/devops/README.md](../roles/devops/README.md)
### Ping
Простая роль для проверки ping.
```bash
# Проверка подключения
ansible all -i inventory/hosts.ini -m ping
# Dry-run развертывания
make role deploy
# Тестирование роли ping
make role lint ping
make role test ping
```
### 4. Развертывание
**Документация:** [roles/ping/README.md](../roles/ping/README.md)
## 🎯 Preset система
### Базовые preset'ы
- **`default`** - Стандартный preset (2 хоста: Ubuntu + Debian)
- **`minimal`** - Минимальный preset (1 хост: Debian)
- **`test`** - Базовый тест (2 хоста)
### Preset'ы по ОС
- **Ubuntu**: `ubuntu20`, `ubuntu22`, `ubuntu24`, `ubuntu-all`
- **Debian**: `debian9`, `debian10`, `debian11`, `debian12`, `debian-all`
- **CentOS**: `centos7`, `centos8`, `centos9`, `centos-all`
### Специализированные preset'ы
- **`all-images`** - Все образы (16 хостов)
- **`multi-os`** - Multi-OS тестирование (8 хостов)
- **`docker-full`** - Docker тестирование (4 хоста)
- **`performance`** - Тест производительности (8 хостов)
- **`security`** - Тест безопасности (6 хостов)
## 🔐 Работа с секретами
### Инициализация Vault
```bash
# Развертывание на продакшн
make role deploy
# Подтвердить развертывание: y
```
## 🔐 Управление секретами
### 1. Инициализация vault
```bash
# Создание файла пароля
# Создание файла с паролем
make vault init
# Создание файла секретов
make vault create
```
### 2. Работа с секретами
### Создание и редактирование секретов
```bash
# Редактирование секретов
# Создание нового секрета
make vault create
# Редактирование существующего
make vault edit
# Просмотр секретов
# Просмотр секрета
make vault show
# Шифрование файла
make vault encrypt
```
## 🏗️ CI/CD интеграция
## 📖 Дополнительная документация
### 1. GitHub Actions
```yaml
# .github/workflows/ansible-test.yml
name: Ansible Testing
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
run: make role test
```
### 2. Azure DevOps
```yaml
# azure-pipelines.yml
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
stages:
- stage: Test
jobs:
- job: TestJob
steps:
- script: make role test
```
## 📊 Мониторинг и диагностика
### 1. Диагностика Docker
```bash
# Диагностика buildx проблем
make docker diagnose
# Проверка builder'а
make docker setup-builder
# Сброс builder'а при проблемах
make docker reset-builder
```
### 2. Логи и отчеты
```bash
# Просмотр логов контейнера
docker logs ansible-controller
# Вход в контейнер для отладки
docker exec -it ansible-controller bash
```
## 🎯 Следующие шаги
1. **Изучите документацию** по [созданию ролей](creating-roles.md)
2. **Настройте CI/CD** по [инструкции](cicd-setup.md)
3. **Изучите Docker образы** в [dockerfiles/README.md](../dockerfiles/README.md)
4. **Настройте мониторинг** по [руководству](monitoring.md)
---
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
- [Руководство по Molecule](molecule-guide.md)
- [Создание ролей](creating-roles.md)
- [Docker образы](dockerfiles.md)
- [Preset система](presets-by-os.md)
- [Настройка CI/CD](cicd-setup.md)

110
docs/k8s-ingress-fix.md Normal file
View File

@@ -0,0 +1,110 @@
# Исправление проблемы с Ingress
## Проблема
После создания Kubernetes кластера Ingress ресурсы не доступны по доменным именам.
## Причина
1. **extraPortMappings не добавлялись в конфигурацию Kind** - порты 80 и 443 не пробрасывались на host
2. **Записи в /etc/hosts не добавлялись автоматически** при применении манифестов
## Решение
### Вариант 1: Быстрое исправление (без пересоздания кластера)
1. **Добавьте запись в `/etc/hosts` вручную:**
```bash
echo "127.0.0.1 grafana.local #k8s" | sudo tee -a /etc/hosts
```
2. **Создайте port-forward для Ingress напрямую:**
```bash
# Подключитесь к кластеру
export KUBECONFIG=$(docker exec k8s-controller cat /root/.kube/config)
# Замените 0.0.0.0 на localhost в kubeconfig
export KUBECONFIG=$(echo "$KUBECONFIG" | sed 's/0\.0\.0\.0:6443/localhost:6443/g' > /tmp/kubeconfig-local.yaml && echo /tmp/kubeconfig-local.yaml)
# Создайте port-forward для Ingress HTTP
kubectl port-forward -n ingress-nginx svc/ingress-nginx-controller 8081:80 &
# Проверьте доступность
curl -H "Host: grafana.local" http://localhost:8081
```
3. **Откройте в браузере:**
```
http://grafana.local:8081
```
### Вариант 2: Пересоздание кластера (рекомендуется)
Исправления уже внесены в код. Просто пересоздайте кластер:
```bash
# Удалите старый кластер
make k8s destroy kubernetes
# Создайте новый (с исправлениями)
make k8s create kubernetes
# Примените манифест с Ingress
make k8s manifest apply kubernetes manifests/test-grafana-ingress.yaml
# Запись в /etc/hosts добавится автоматически
# Проверьте
cat /etc/hosts | grep k8s
# Откройте в браузере
open http://grafana.local:8081
```
## Проверка
```bash
# 1. Проверьте Ingress
docker exec k8s-controller kubectl --server=https://lab-control-plane:6443 --insecure-skip-tls-verify get ingress --all-namespaces
# 2. Проверьте ports control-plane
docker port lab-control-plane
# Должны быть:
# 6443/tcp -> 0.0.0.0:6443
# 80/tcp -> 0.0.0.0:8081 <- после исправления
# 443/tcp -> 0.0.0.0:8443 <- после исправления
# 3. Проверьте доступность
curl -H "Host: grafana.local" http://localhost:8081
```
## Что было исправлено
1. В `scripts/create_k8s_cluster.py` исправлена логика добавления `extraPortMappings` в конфигурацию Kind
2. Порты 80 и 443 теперь правильно пробрасываются на host (8081 и 8443)
3. Манифест Ingress можно применить и автоматически добавить запись в `/etc/hosts`
## Дополнительно
Если Ingress всё ещё не работает:
1. **Проверьте статус подов Ingress Controller:**
```bash
docker exec k8s-controller kubectl --server=https://lab-control-plane:6443 --insecure-skip-tls-verify get pods -n ingress-nginx
```
2. **Проверьте логи Ingress Controller:**
```bash
docker exec k8s-controller kubectl --server=https://lab-control-plane:6443 --insecure-skip-tls-verify logs -n ingress-nginx -l app.kubernetes.io/component=controller
```
3. **Проверьте события:**
```bash
docker exec k8s-controller kubectl --server=https://lab-control-plane:6443 --insecure-skip-tls-verify get events -n monitoring
```

232
docs/k8s-scripts.md Normal file
View File

@@ -0,0 +1,232 @@
# Скрипты управления Kubernetes
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
## Обзор
В проекте используются несколько Python скриптов для автоматизации работы с Kubernetes кластерами на базе Kind. Все скрипты находятся в директории `scripts/`.
## Скрипты
### 1. `create_k8s_cluster.py`
**Назначение:** Создание Kind кластера, установка аддонов и создание Docker контейнеров из пресета.
**Принцип работы:**
1. **Парсинг пресета:** Читает YAML файл пресета (например, `molecule/presets/k8s/kubernetes.yml`)
2. **Создание Docker сети:**
- Проверяет наличие сети (по умолчанию `labnet`)
- Создает сеть если её нет
3. **Создание Docker контейнеров:**
- Читает секцию `hosts` из пресета
- Для каждого хоста создает Docker контейнер с настройками из `systemd_defaults`
- Использует образы из секции `images`
4. **Создание Kind кластера:**
- Генерирует конфигурацию Kind в формате YAML
- Настраивает `extraPortMappings` для Ingress портов
- Создает кластер через команду `kind create cluster`
5. **Установка аддонов:**
- **Ingress NGINX:** Устанавливает ingress-nginx controller через kubectl apply
- **Metrics Server:** Устанавливает metrics-server с патчем для insecure TLS
- **Istio:** Устанавливает Istio через istioctl с профилем demo
- **Kiali:** Устанавливает Kiali через Helm (использует Helm chart)
- **Prometheus Stack:** Устанавливает Prometheus + Grafana через Helm (kube-prometheus-stack)
6. **Подключение к сети Kind:** Подключает контейнер `k8s-controller` к сети `kind` для доступа к API серверу
**Параметры:**
```bash
python3 scripts/create_k8s_cluster.py <preset_file> <container_name>
```
**Пример:**
```bash
python3 scripts/create_k8s_cluster.py molecule/presets/k8s/kubernetes.yml k8s-controller
```
---
### 2. `delete_hosts.py`
**Назначение:** Удаление Docker контейнеров, созданных из секции `hosts` пресета.
**Принцип работы:**
1. **Парсинг пресета:** Читает YAML файл пресета
2. **Получение списка хостов:** Извлекает секцию `hosts`
3. **Удаление контейнеров:** Для каждого хоста выполняет `docker rm -f <host_name>`
**Параметры:**
```bash
python3 scripts/delete_hosts.py <preset_file>
```
**Пример:**
```bash
python3 scripts/delete_hosts.py molecule/presets/k8s/kubernetes.yml
```
---
### 3. `portforward.py`
**Назначение:** Управление port-forward для доступа к сервисам Kubernetes извне кластера.
**Принцип работы:**
1. **Загрузка пресета:** Читает файл `molecule/presets/k8s/kubernetes.yml`
2. **Получение kubeconfig:**
- Копирует kubeconfig из контейнера `k8s-controller` через `docker exec`
- Сохраняет во временный файл
3. **Модификация kubeconfig:**
- Заменяет `server: https://0.0.0.0:6443` на `server: https://localhost:6443`
- Это необходимо для доступа с локальной машины
4. **Создание port-forward:**
- Запускает `kubectl port-forward` для каждого сервиса из `addon_ports`
- Использует формат: `kubectl port-forward -n <namespace> svc/<service> <local_port>:<remote_port>`
- Управляет процессами через PID
**Команды:**
- `create` - создает port-forward для всех сервисов
- `list` - показывает список активных портов
- `clear` - останавливает все port-forward процессы
- `recreate` - очищает и заново создает port-forward
- `delete <port>` - удаляет конкретный port-forward
**Пример использования:**
```bash
python3 scripts/portforward.py create
python3 scripts/portforward.py list
python3 scripts/portforward.py delete 3000
python3 scripts/portforward.py clear
```
**Важно:** Скрипт должен запускаться на локальной машине, где установлены `kubectl` и Python 3.
---
### 4. `k8s_status.py`
**Назначение:** Детальный отчет о состоянии Kubernetes кластера.
**Принцип работы:**
1. **Подключение к кластеру:**
- Получает имя кластера через `kind get clusters`
- Формирует адрес API сервера: `https://<cluster_name>-control-plane:6443`
- Выполняет все kubectl команды через `docker exec k8s-controller`
2. **Сбор информации:**
- **Общая информация:** версия Kubernetes
- **Узлы:** статус, ресурсы, описание каждого узла
- **Namespaces:** список всех namespace
- **Использование ресурсов:** метрики через metrics-server (если установлен)
- **Pods:** поды по каждому namespace
- **Deployments:** deployments по namespace
- **DaemonSets:** daemonsets по namespace
- **StatefulSets:** statefulsets по namespace
- **Services:** сервисы по namespace
- **Ingress:** ingress ресурсы
- **PVC:** PersistentVolumeClaims
- **События:** последние 20 событий по namespace
- **Helm релизы:** список установленных через Helm
3. **Форматирование вывода:**
- Использует секции с разделителями
- Группирует информацию по namespace
- Показывает только непустые секции
**Пример использования:**
```bash
python3 scripts/k8s_status.py
```
**Интеграция:**
- Автоматически вызывается командой `make k8s status [preset]`
**Особенности:**
- Выполняет все команды внутри контейнера `k8s-controller`
- Использует прямой адрес control-plane для подключения
- Обходит проблемы с kubeconfig через `--insecure-skip-tls-verify`
---
## Архитектура взаимодействия
```
┌─────────────────────────────────────────────────────┐
│ Локальная машина │
│ │
│ Makefile → Python скрипты → Docker API │
│ ↓ ↓ ↓ │
│ make k8s scripts/*.py docker exec │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ Docker контейнер │
│ k8s-controller │
│ ┌──────────────────────────────────────────┐ │
│ │ kind, kubectl, helm, istioctl │ │
│ └──────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ Docker сеть: kind │
│ ┌──────────────────────────────────────────┐ │
│ │ Kind Kubernetes Cluster │ │
│ │ • Control Plane (6443) │ │
│ │ • Worker Nodes │ │
│ │ • Services (ClusterIP) │ │
│ │ • Ingress │ │
│ └──────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
```
## Общие принципы
1. **Изоляция:** Все kubectl команды выполняются внутри контейнера `k8s-controller`
2. **Безопасность:** Используется `--insecure-skip-tls-verify` для обхода проблем с сертификатами
3. **Автоматизация:** Скрипты вызываются автоматически через Makefile
4. **Логгирование:** Все скрипты выводят подробную информацию о своих действиях
## Требования
- Python 3 (на локальной машине)
- kubectl (на локальной машине, для portforward.py)
- Docker
- Docker контейнер `k8s-controller` должен быть запущен
## Отладка
Если что-то не работает:
1. **Проверьте контейнер:**
```bash
docker ps | grep k8s-controller
```
2. **Запустите скрипт вручную:**
```bash
python3 scripts/k8s_status.py
```
3. **Посмотрите логи:**
```bash
docker logs k8s-controller
```
4. **Проверьте кластер:**
```bash
docker exec k8s-controller kubectl get nodes
```

395
docs/kubernetes-commands.md Normal file
View File

@@ -0,0 +1,395 @@
# Команды для работы с Kubernetes
Автор: Сергей Антропов
Сайт: https://devops.org.ru
## Содержание
- [Работа с манифестами](#работа-с-манифестами)
- [Работа с Helm](#работа-с-helm)
- [Работа с Helm репозиториями](#работа-с-helm-репозиториями)
## Работа с манифестами
Команды для применения, удаления и обновления манифестов YAML в кластере.
### Синтаксис
```bash
make k8s manifest [команда] [пресет] [URL_или_путь_к_файлу]
```
### Команды
#### `apply` - Применение манифеста
Применяет манифест YAML к кластеру.
```bash
make k8s manifest apply kubernetes https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
```
**Примеры:**
```bash
# Применение манифеста из URL
make k8s manifest apply kubernetes https://example.com/deploy.yaml
# Применение локального манифеста
make k8s manifest apply kubernetes ./manifests/my-app.yaml
```
#### `delete` - Удаление ресурсов
Удаляет ресурсы из кластера по манифесту.
```bash
make k8s manifest delete kubernetes https://example.com/deploy.yaml
```
#### `update` - Обновление манифеста
Обновляет ресурсы в кластере, используя манифест.
```bash
make k8s manifest update kubernetes https://example.com/deploy.yaml
```
### Примеры использования
```bash
# Установка NGINX Ingress Controller
make k8s manifest apply kubernetes https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
# Удаление ресурсов
make k8s manifest delete kubernetes https://example.com/deploy.yaml
# Обновление конфигурации
make k8s manifest update kubernetes https://example.com/deploy.yaml --force
```
## Работа с Helm
Команды для установки, обновления и управления Helm чартами в кластере.
### Синтаксис
```bash
make k8s helm [команда] [пресет] [релиз] [чант]
```
### Команды
#### `apply` - Установка/обновление чарта
Устанавливает новый релиз или обновляет существующий.
```bash
make k8s helm apply kubernetes my-nginx nginx/nginx-ingress
```
**Параметры:**
- `пресет` - имя пресета кластера
- `релиз` - имя релиза (например: my-nginx)
- `чарт` - имя чарта (например: nginx/nginx-ingress)
**Примеры:**
```bash
# Установка nginx-ingress
make k8s helm apply kubernetes nginx-ingress nginx/nginx-ingress
# Установка с указанием репозитория
make k8s helm apply kubernetes prometheus prometheus-community/prometheus
```
#### `delete` - Удаление релиза
Удаляет Helm релиз из кластера.
```bash
make k8s helm delete kubernetes my-nginx
```
**Примеры:**
```bash
# Удаление релиза
make k8s helm delete kubernetes nginx-ingress
# Удаление с флагом --keep-history
# (не поддерживается в текущей реализации)
```
#### `update` - Обновление релиза
Обновляет существующий Helm релиз.
```bash
make k8s helm update kubernetes my-nginx nginx/nginx-ingress
```
#### `rollback` - Откат релиза
Откатывает релиз к предыдущей версии.
```bash
make k8s helm rollback kubernetes my-nginx
```
**Примеры:**
```bash
# Откат к предыдущей ревизии
make k8s helm rollback kubernetes my-nginx
# Откат к конкретной ревизии (не поддерживается в текущей реализации)
```
#### `list` - Список релизов
Показывает список всех установленных Helm релизов.
```bash
make k8s helm list kubernetes
```
**Пример вывода:**
```
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nginx-ingress default 1 2024-01-15 12:00:00.000000 +0000 UTC deployed nginx-ingress-0.1.0 1.0.0
```
#### `status` - Статус релиза
Показывает подробную информацию о статусе релиза.
```bash
make k8s helm status kubernetes my-nginx
```
### Примеры использования
```bash
# 1. Установка NGINX Ingress Controller
make k8s helm apply kubernetes nginx-ingress nginx/nginx-ingress
# 2. Проверка статуса
make k8s helm status kubernetes nginx-ingress
# 3. Обновление релиза
make k8s helm update kubernetes nginx-ingress nginx/nginx-ingress
# 4. Просмотр списка релизов
make k8s helm list kubernetes
# 5. Откат релиза
make k8s helm rollback kubernetes nginx-ingress
# 6. Удаление релиза
make k8s helm delete kubernetes nginx-ingress
```
## Работа с Helm репозиториями
Команды для управления Helm репозиториями.
### Синтаксис
```bash
make k8s helmrepo [команда] [пресет] [имя] [URL]
```
### Команды
#### `add` - Добавление репозитория
Добавляет новый Helm репозиторий.
```bash
make k8s helmrepo add kubernetes stable https://charts.helm.sh/stable
```
**Примеры:**
```bash
# Добавление официального репозитория Helm
make k8s helmrepo add kubernetes stable https://charts.helm.sh/stable
# Добавление репозитория Bitnami
make k8s helmrepo add kubernetes bitnami https://charts.bitnami.com/bitnami
# Добавление репозитория NGINX
make k8s helmrepo add kubernetes nginx https://helm.nginx.com/stable
# Добавление репозитория Prometheus
make k8s helmrepo add kubernetes prometheus-community https://prometheus-community.github.io/helm-charts
# Добавление пользовательского репозитория
make k8s helmrepo add kubernetes my-repo https://charts.example.com
```
#### `list` - Список репозиториев
Показывает список всех добавленных Helm репозиториев.
```bash
make k8s helmrepo list kubernetes
```
**Пример вывода:**
```
NAME URL
stable https://charts.helm.sh/stable
bitnami https://charts.bitnami.com/bitnami
nginx https://helm.nginx.com/stable
```
#### `delete` - Удаление репозитория
Удаляет Helm репозиторий.
```bash
make k8s helmrepo delete kubernetes stable
```
**Примеры:**
```bash
# Удаление репозитория
make k8s helmrepo delete kubernetes stable
```
#### `update` - Обновление репозиториев
Обновляет информацию о всех Helm репозиториях.
```bash
make k8s helmrepo update kubernetes
```
**Примеры:**
```bash
# Обновление всех репозиториев
make k8s helmrepo update kubernetes
```
#### `packages` - Список пакетов
Показывает список пакетов в указанном репозитории.
```bash
make k8s helmrepo packages kubernetes stable
```
**Примеры:**
```bash
# Просмотр пакетов в репозитории stable
make k8s helmrepo packages kubernetes stable
# Просмотр пакетов в репозитории nginx
make k8s helmrepo packages kubernetes nginx
# Поиск конкретного пакета
make k8s helmrepo packages kubernetes stable | grep nginx
```
### Примеры использования
```bash
# 1. Добавление нескольких репозиториев
make k8s helmrepo add kubernetes stable https://charts.helm.sh/stable
make k8s helmrepo add kubernetes bitnami https://charts.bitnami.com/bitnami
make k8s helmrepo add kubernetes nginx https://helm.nginx.com/stable
# 2. Просмотр списка репозиториев
make k8s helmrepo list kubernetes
# 3. Обновление репозиториев
make k8s helmrepo update kubernetes
# 4. Поиск пакетов в репозитории
make k8s helmrepo packages kubernetes stable
# 5. Удаление репозитория
make k8s helmrepo delete kubernetes my-custom-repo
# 6. Установка пакета из добавленного репозитория
make k8s helm apply kubernetes my-nginx nginx/nginx-ingress
```
## Полный рабочий пример
```bash
# 1. Создание кластера
make k8s create kubernetes
# 2. Добавление Helm репозиториев
make k8s helmrepo add kubernetes nginx https://helm.nginx.com/stable
make k8s helmrepo add kubernetes bitnami https://charts.bitnami.com/bitnami
# 3. Обновление репозиториев
make k8s helmrepo update kubernetes
# 4. Просмотр доступных пакетов
make k8s helmrepo packages kubernetes nginx
# 5. Установка NGINX Ingress Controller
make k8s helm apply kubernetes nginx-ingress nginx/nginx-ingress
# 6. Проверка статуса
make k8s helm status kubernetes nginx-ingress
# 7. Просмотр списка релизов
make k8s helm list kubernetes
# 8. Применение манифеста
make k8s manifest apply kubernetes https://example.com/deploy.yaml
# 9. Откат релиза (если нужно)
make k8s helm rollback kubernetes nginx-ingress
# 10. Удаление релиза
make k8s helm delete kubernetes nginx-ingress
# 11. Удаление репозитория
make k8s helmrepo delete kubernetes nginx
# 12. Удаление кластера
make k8s destroy kubernetes
```
## Обработка ошибок
### Ошибка: Контейнер не запущен
```
❌ Контейнер k8s-kubernetes не запущен
💡 Запустите: make k8s create kubernetes
```
**Решение:** Запустите кластер перед выполнением команд.
### Ошибка: Неизвестная команда
```
❌ Неизвестная команда: unknown
💡 Доступные команды: apply, delete, update
```
**Решение:** Используйте правильную команду из списка доступных.
### Ошибка: Не указаны параметры
```
❌ Ошибка: Укажите имя релиза и чарт
💡 Пример: make k8s helm apply kubernetes my-release stable/nginx-ingress
```
**Решение:** Укажите все необходимые параметры команды.
## Дополнительная информация
- Все команды kubectl и helm выполняются внутри контейнера `k8s-[пресет]`
- Вам не нужно устанавливать kubectl или helm локально
- Подключение к кластеру происходит через имя узла control-plane
- Используется флаг `--insecure-skip-tls-verify` для обхода проблем с сертификатами
## Автор
Сергей Антропов
Сайт: https://devops.org.ru

View File

@@ -0,0 +1,906 @@
# Полное руководство по работе с Kubernetes кластерами
Автор: Сергей Антропов
Сайт: https://devops.org.ru
## Содержание
- [Введение](#введение)
- [Создание кластера](#создание-кластера)
- [Управление кластером](#управление-кластером)
- [Работа с манифестами](#работа-с-манифестами)
- [Работа с Helm](#работа-с-helm)
- [Настройка Ingress](#настройка-ingress)
- [Мониторинг и аддоны](#мониторинг-и-аддоны)
- [Service Mesh с Istio](#service-mesh-с-istio)
- [Примеры полных развертываний](#примеры-полных-развертываний)
## Введение
DevOpsLab предоставляет полную поддержку создания и управления локальными Kubernetes кластерами на основе Kind (Kubernetes in Docker). Kind позволяет запускать Kubernetes кластеры внутри Docker контейнеров, что идеально подходит для разработки, тестирования и обучения.
### Основные возможности
- Создание многоузловых Kubernetes кластеров
- Установка и управление Helm чартами
- Работа с манифестами YAML
- Настройка Ingress контроллеров
- Установка систем мониторинга (Prometheus, Grafana)
- Развертывание Service Mesh (Istio, Kiali)
- Изоляция сети и безопасность
### Преимущества
- Не требует установки локального Kubernetes
- Быстрое создание и удаление кластеров
- Поддержка многоузловых конфигураций
- Полная совместимость с production окружениями
- Контейнеризация всех инструментов
## Создание кластера
### Базовое создание
Простое создание минимального кластера без дополнительных компонентов:
```bash
make k8s create
```
Создаст кластер с пресетом `k8s-minimal` - один control-plane узел без дополнительных компонентов.
### Создание полнофункционального кластера
Создание кластера с предустановленными компонентами:
```bash
make k8s create kubernetes
```
Этот пресет создает кластер со следующими компонентами:
- 1 control-plane узел
- 2 worker узла
- Ingress NGINX Controller
- Metrics Server
- Istio Service Mesh
- Kiali для визуализации Istio
- Prometheus Stack (Prometheus + Grafana)
### Конфигурация пресета
Пресеты находятся в `molecule/presets/k8s/`. Пример конфигурации:
```yaml
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
addon_ports:
prometheus: 9090
grafana: 3000
kiali: 20001
```
### Проверка статуса кластера
```bash
# Показать узлы кластера
make k8s nodes kubernetes
# Вывод:
# NAME STATUS ROLES AGE VERSION
# lab-control-plane Ready control-plane 5m v1.34.0
# lab-worker Ready <none> 4m v1.34.0
# lab-worker2 Ready <none> 4m v1.34.0
# Показать подробный статус
make k8s status kubernetes
```
### Подключение к кластеру
```bash
# Получить kubeconfig
make k8s config kubernetes
# Использовать kubeconfig
export KUBECONFIG=$(pwd)/kubeconfig
kubectl get nodes
```
## Управление кластером
### Остановка и запуск
```bash
# Остановить кластер (без удаления)
make k8s stop kubernetes
# Запустить остановленный кластер
make k8s start kubernetes
# Перезапустить кластер
make k8s stop kubernetes && make k8s start kubernetes
```
### Удаление кластера
```bash
# Полное удаление кластера и контейнера
make k8s destroy kubernetes
```
### Получение shell в контейнере
```bash
# Открыть интерактивный shell
make k8s shell kubernetes
# Теперь доступны все команды kubectl, helm, kind внутри контейнера
kubectl get nodes
helm list
kind get clusters
```
## Работа с манифестами
### Применение манифеста
Применение манифеста из URL:
```bash
make k8s manifest apply kubernetes https://example.com/deploy.yaml
```
Применение локального манифеста:
```bash
# Создайте файл example-deployment.yaml
cat > example-deployment.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
EOF
# Применить манифест
make k8s manifest apply kubernetes ./example-deployment.yaml
```
### Удаление ресурсов
```bash
make k8s manifest delete kubernetes https://example.com/deploy.yaml
```
### Обновление ресурсов
```bash
make k8s manifest update kubernetes https://example.com/deploy.yaml
```
## Работа с Helm
### Добавление Helm репозиториев
Список популярных репозиториев:
```bash
# Официальный Helm репозиторий
make k8s helmrepo add kubernetes stable https://charts.helm.sh/stable
# Bitnami (большая коллекция чартов)
make k8s helmrepo add kubernetes bitnami https://charts.bitnami.com/bitnami
# NGINX Inc
make k8s helmrepo add kubernetes nginx https://helm.nginx.com/stable
# Prometheus Community
make k8s helmrepo add kubernetes prometheus-community https://prometheus-community.github.io/helm-charts
# Istio
make k8s helmrepo add kubernetes istio https://istio-release.storage.googleapis.com/charts
# Информация о репозиториях
make k8s helmrepo list kubernetes
```
### Обновление репозиториев
```bash
make k8s helmrepo update kubernetes
```
### Поиск чартов
```bash
# Просмотр всех чартов в репозитории
make k8s helmrepo packages kubernetes bitnami
# Поиск конкретного чарта
make k8s helmrepo packages kubernetes bitnami | grep nginx
# Поиск в нескольких репозиториях
make k8s helmrepo packages kubernetes bitnami | grep redis
make k8s helmrepo packages kubernetes stable | grep postgresql
```
### Установка Helm чартов
#### Пример 1: Установка Redis
```bash
# Добавить репозиторий
make k8s helmrepo add kubernetes bitnami https://charts.bitnami.com/bitnami
# Обновить индекс
make k8s helmrepo update kubernetes
# Установить Redis
make k8s helm apply kubernetes redis bitnami/redis
# Проверить статус
make k8s helm status kubernetes redis
# Посмотреть список релизов
make k8s helm list kubernetes
```
#### Пример 2: Установка PostgreSQL
```bash
make k8s helm apply kubernetes postgres bitnami/postgresql
make k8s helm status kubernetes postgres
```
#### Пример 3: Установка Nginx Ingress через Helm
```bash
# Добавить репозиторий (если еще не добавлен)
make k8s helmrepo add kubernetes nginx https://helm.nginx.com/stable
# Обновить индекс
make k8s helmrepo update kubernetes
# Установить NGINX Ingress
make k8s helm apply kubernetes nginx-ingress nginx/nginx-ingress-controller
# Проверить
make k8s helm status kubernetes nginx-ingress
```
### Обновление Helm релизов
```bash
# Обновить релиз до последней версии
make k8s helm update kubernetes redis bitnami/redis
# Проверить после обновления
make k8s helm status kubernetes redis
```
### Откат Helm релизов
```bash
# Откатить к предыдущей версии
make k8s helm rollback kubernetes redis
# Проверить статус после отката
make k8s helm status kubernetes redis
```
### Удаление Helm релизов
```bash
# Удалить релиз
make k8s helm delete kubernetes redis
make k8s helm delete kubernetes postgres
```
## Настройка Ingress
### Установка NGINX Ingress Controller
Ingress контроллер обычно устанавливается при создании кластера с пресетом `kubernetes`. Если нужна переустановка:
```bash
# Через манифест
make k8s manifest apply kubernetes \
https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
# Или через Helm
make k8s helmrepo add kubernetes nginx https://helm.nginx.com/stable
make k8s helm apply kubernetes nginx-ingress nginx/nginx-ingress-controller
```
### Создание Ingress ресурса
Создайте файл `example-ingress.yaml`:
```yaml
apiVersion: v1
kind: Service
metadata:
name: hello-service
spec:
selector:
app: hello
ports:
- port: 80
targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-deployment
spec:
replicas: 2
selector:
matchLabels:
app: hello
template:
metadata:
labels:
app: hello
spec:
containers:
- name: hello
image: hashicorp/http-echo:latest
args:
- "-text=Hello from Kubernetes!"
ports:
- containerPort: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: hello.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: hello-service
port:
number: 80
```
Примените манифест:
```bash
make k8s manifest apply kubernetes ./example-ingress.yaml
```
Проверьте доступность:
```bash
# Добавьте запись в /etc/hosts
echo "127.0.0.1 hello.local" | sudo tee -a /etc/hosts
# Откройте в браузере или проверьте через curl
curl http://hello.local:8081
```
### TLS Ingress
Создайте TLS сертификат и добавьте в Ingress:
```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-tls-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- hello.local
secretName: tls-secret
rules:
- host: hello.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: hello-service
port:
number: 80
```
## Мониторинг и аддоны
### Prometheus Stack
Prometheus Stack устанавливается автоматически при создании кластера с пресетом `kubernetes`.
#### Доступ к Grafana
```bash
# 1. Получите пароль администратора
kubectl --kubeconfig kubeconfig get secret monitoring-grafana \
-n monitoring -o jsonpath="{.data.admin-password}" | base64 -d
# 2. Откройте браузер
# URL: http://localhost:3000
# Username: admin
# Password: [результат из команды выше]
```
#### Доступ к Prometheus
```bash
# URL: http://localhost:9090
# Откройте в браузере для просмотра метрик
```
#### Просмотр метрик
```bash
# Получить список метрик
curl http://localhost:9090/api/v1/label/__name__/values
# Запрос конкретной метрики
curl 'http://localhost:9090/api/v1/query?query=up'
```
### Установка дополнительных инструментов мониторинга
#### Loki для логов
```bash
# Добавить репозиторий Grafana
make k8s helmrepo add kubernetes grafana https://grafana.github.io/helm-charts
# Установить Loki
make k8s helm apply kubernetes loki grafana/loki-stack
# Проверить статус
make k8s helm status kubernetes loki
```
#### Jaeger для трейсинга
```bash
# Добавить репозиторий Jaeger
make k8s helmrepo add kubernetes jaegertracing https://jaegertracing.github.io/helm-charts
# Установить Jaeger
make k8s helm apply kubernetes jaeger jaegertracing/jaeger
# Проверить статус
make k8s helm status kubernetes jaeger
```
## Service Mesh с Istio
### Установка Istio
Istio устанавливается автоматически при создании кластера с пресетом `kubernetes`.
### Ручная установка Istio
```bash
# Добавить репозиторий Istio
make k8s helmrepo add kubernetes istio https://istio-release.storage.googleapis.com/charts
# Установить Istio base
make k8s helm apply kubernetes istio-base istio/base
# Установить Istiod (control plane)
make k8s helm apply kubernetes istiod istio/istiod \
--set values.global.istiod.enableAnalysis=true
# Установить Istio Ingress Gateway
make k8s helm apply kubernetes istio-ingress istio/gateway
```
### Kiali для визуализации Istio
Kiali устанавливается автоматически с пресетом `kubernetes`.
#### Доступ к Kiali
```bash
# URL: http://localhost:20001
# Откройте в браузере для визуализации Service Mesh
# Настройки доступа
# Username: admin
# Password: admin (если используется анонимный доступ)
```
#### Ручная установка Kiali
```bash
# Добавить репозиторий Kiali
make k8s helmrepo add kubernetes kiali https://kiali.org/helm-charts
# Установить Kiali
make k8s helm apply kubernetes kiali-server kiali/kiali-server \
--set auth.strategy=anonymous \
--set deployment.ingress.enabled=true \
--set server.web_root="/"
# Проверить статус
make k8s helm status kubernetes kiali-server
```
### Пример приложения с Istio
Создайте файл `istio-app.yaml`:
```yaml
apiVersion: v1
kind: Namespace
metadata:
name: bookinfo
labels:
istio-injection: enabled
---
apiVersion: v1
kind: Service
metadata:
name: productpage
namespace: bookinfo
spec:
ports:
- port: 9080
name: http
targetPort: 9080
selector:
app: productpage
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: productpage
namespace: bookinfo
spec:
replicas: 1
selector:
matchLabels:
app: productpage
template:
metadata:
labels:
app: productpage
spec:
containers:
- name: productpage
image: istio/examples-bookinfo-productpage-v1:latest
ports:
- containerPort: 9080
```
Примените:
```bash
make k8s manifest apply kubernetes ./istio-app.yaml
```
## Примеры полных развертываний
### Пример 1: WordPress с MySQL
```bash
# 1. Установить MySQL через Helm
make k8s helmrepo add kubernetes bitnami https://charts.bitnami.com/bitnami
make k8s helm apply kubernetes mysql bitnami/mysql \
--set auth.rootPassword=secretpassword
# 2. Создать манифест для WordPress
cat > wordpress.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
spec:
replicas: 2
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- name: wordpress
image: wordpress:latest
env:
- name: WORDPRESS_DB_HOST
value: mysql.default.svc.cluster.local
- name: WORDPRESS_DB_USER
value: root
- name: WORDPRESS_DB_PASSWORD
value: secretpassword
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: wordpress
spec:
selector:
app: wordpress
ports:
- port: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wordpress-ingress
spec:
rules:
- host: wordpress.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: wordpress
port:
number: 80
EOF
# 3. Применить манифест
make k8s manifest apply kubernetes ./wordpress.yaml
```
### Пример 2: Многоуровневое приложение с мониторингом
```bash
# 1. Установить Redis
make k8s helmrepo add kubernetes bitnami https://charts.bitnami.com/bitnami
make k8s helm apply kubernetes redis bitnami/redis
# 2. Установить PostgreSQL
make k8s helm apply kubernetes postgres bitnami/postgresql
# 3. Создать приложение
cat > app.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-server
spec:
replicas: 3
selector:
matchLabels:
app: api
template:
metadata:
labels:
app: api
version: v1
spec:
containers:
- name: api
image: nginx:alpine
ports:
- containerPort: 80
env:
- name: REDIS_HOST
value: redis-master.default.svc.cluster.local
- name: POSTGRES_HOST
value: postgresql-postgresql.default.svc.cluster.local
---
apiVersion: v1
kind: Service
metadata:
name: api-service
spec:
selector:
app: api
ports:
- port: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-ingress
spec:
rules:
- host: api.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: api-service
port:
number: 80
EOF
# 4. Применить
make k8s manifest apply kubernetes ./app.yaml
```
### Пример 3: CI/CD с Jenkins в Kubernetes
```bash
# 1. Установить Jenkins
make k8s helmrepo add kubernetes jenkins https://charts.jenkins.io
make k8s helm apply kubernetes jenkins jenkins/jenkins \
--set persistence.enabled=true \
--set controller.installPlugins.enabled=true
# 2. Получить пароль администратора
kubectl --kubeconfig kubeconfig exec \
-n default svc/jenkins -c jenkins -- \
cat /run/secrets/additional/chart-admin-password
```
## Полезные команды и советы
### Мониторинг ресурсов
```bash
# Просмотр использования ресурсов узлами
kubectl --kubeconfig kubeconfig top nodes
# Просмотр использования ресурсов подами
kubectl --kubeconfig kubeconfig top pods
# Детальная информация о узле
kubectl --kubeconfig kubeconfig describe node lab-control-plane
```
### Отладка
```bash
# Просмотр логов пода
kubectl --kubeconfig kubeconfig logs <pod-name>
# Просмотр логов с follow
kubectl --kubeconfig kubeconfig logs -f <pod-name>
# Выполнить команду в поде
kubectl --kubeconfig kubeconfig exec -it <pod-name> -- /bin/sh
# Описание ресурса
kubectl --kubeconfig kubeconfig describe pod <pod-name>
kubectl --kubeconfig kubeconfig describe service <service-name>
```
### Масштабирование
```bash
# Масштабировать Deployment
kubectl --kubeconfig kubeconfig scale deployment <deployment-name> --replicas=5
# Автомасштабирование (требует metrics-server)
kubectl --kubeconfig kubeconfig autoscale deployment <deployment-name> \
--cpu-percent=70 --min=2 --max=10
```
### Экспорт конфигурации
```bash
# Экспортировать ресурс в YAML
kubectl --kubeconfig kubeconfig get deployment <name> -o yaml > exported.yaml
# Экспортировать все ресурсы namespace
kubectl --kubeconfig kubeconfig get all -n <namespace> -o yaml > all-resources.yaml
```
## Безопасность
### Использование Secrets
```bash
# Создать Secret из файла
kubectl --kubeconfig kubeconfig create secret generic my-secret \
--from-file=username=./username.txt \
--from-file=password=./password.txt
# Создать Secret из литерала
kubectl --kubeconfig kubeconfig create secret generic my-secret \
--from-literal=username=admin \
--from-literal=password=secret123
```
### Network Policies
Создайте файл `network-policy.yaml`:
```yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
role: api
ports:
- protocol: TCP
port: 5432
egress:
- to:
- podSelector:
matchLabels:
role: api
ports:
- protocol: TCP
port: 5432
```
Примените:
```bash
make k8s manifest apply kubernetes ./network-policy.yaml
```
## Заключение
DevOpsLab предоставляет полный набор инструментов для работы с Kubernetes кластерами локально. Вы можете:
- Создавать и управлять кластерами
- Устанавливать и настраивать приложения
- Работать с мониторингом и Service Mesh
- Тестировать перед развертыванием в production
Все инструменты работают внутри Docker контейнеров, что обеспечивает изоляцию и переносимость.
## Автор
Сергей Антропов
Сайт: https://devops.org.ru

794
docs/kubernetes-kind.md Normal file
View File

@@ -0,0 +1,794 @@
# Kubernetes Kind Кластеры
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
## Содержание
- [Описание](#описание)
- [Требования к системе](#требования-к-системе)
- [Возможности](#возможности)
- [Быстрый старт](#быстрый-старт)
- [Команды управления](#команды-управления)
- [Работа с Helm](#работа-с-helm)
- [Работа с манифестами](#работа-с-манифестами)
- [Управление Ingress](#управление-ingress)
- [Проброс портов (Port-forward)](#проброс-портов-port-forward)
- [Мониторинг и логи](#мониторинг-и-логи)
- [Конфигурация](#конфигурация)
- [Архитектура](#архитектура)
- [Доступ к приложениям](#доступ-к-приложениям)
- [Кроссплатформенность](#кроссплатформенность)
- [Подробная документация по скриптам](#подробная-документация-по-скриптам)
- [Best Practices](#best-practices)
- [Troubleshooting](#troubleshooting)
---
## Описание
Проект поддерживает автоматическое создание и управление Kubernetes кластерами на базе [Kind](https://kind.sigs.k8s.io/) для тестирования в изолированной лабораторной среде.
Kind позволяет создавать локальные Kubernetes кластеры внутри Docker контейнеров, что идеально подходит для разработки и тестирования без необходимости устанавливать полный Kubernetes.
## Требования к системе
### Обязательные требования
1. **Docker** - для запуска Kind кластеров
2. **Python 3** - для управления port-forward
3. **kubectl** - для работы с кластером
**Установка на macOS:**
```bash
brew install docker python3 kubectl
```
**Установка на Ubuntu/Debian:**
```bash
sudo apt update && sudo apt install -y docker.io python3 python3-pip kubectl
```
**Установка на CentOS/RHEL:**
```bash
sudo yum install -y docker python3 python3-pip kubectl
sudo systemctl start docker
sudo systemctl enable docker
```
### Проверка установки
```bash
docker --version
python3 --version
kubectl version --client
```
### Docker группы
На Linux добавьте пользователя в группу docker:
```bash
sudo usermod -aG docker $USER
# Выйдите и войдите заново
```
---
## Возможности
- ✅ Создание Kind кластеров с настраиваемым количеством worker-узлов
- ✅ Автоматическая установка аддонов (Ingress NGINX, Metrics Server, Istio, Kiali, Prometheus Stack)
-**Автоматический port-forward** для доступа к сервисам
- ✅ Работа с Helm (установка, удаление, обновление, rollback)
- ✅ Работа с Kubernetes манифестами
- ✅ Управление Helm репозиториями
- ✅ Автоматическое управление `/etc/hosts` для Ingress
- ✅ Управление Docker контейнерами в лабораторной сети
- ✅ Интеграция с Istio Service Mesh
- ✅ Детальный отчет о состоянии кластера
---
## Быстрый старт
### 1. Создание кластера
```bash
# Создание кластера с полным набором аддонов
make k8s create kubernetes
```
### 2. Проверка статуса
```bash
# Детальный отчет о кластере
make k8s status kubernetes
```
### 3. Доступ к аддонам
После создания кластера автоматически создаются port-forward:
- Grafana: http://localhost:3000
- Prometheus: http://localhost:9090
- Kiali: http://localhost:20001
### 4. Удаление кластера
```bash
make k8s destroy kubernetes
```
---
## Команды управления
### Создание кластера
```bash
# Минимальный кластер (без аддонов)
make k8s create
# Полный кластер с аддонами
make k8s create kubernetes
# Пользовательский пресет
make k8s create my-custom-preset
```
**Что происходит:**
1. Создается контейнер `k8s-controller` с инструментами (Kind, kubectl, Helm, Istio CLI)
2. Создаются Docker контейнеры из раздела `hosts` (если есть)
3. Создается Kind кластер
4. Устанавливаются аддоны
5. Создается автоматический port-forward
6. Добавляются записи в `/etc/hosts` для Ingress
### Управление жизненным циклом
```bash
# Удаление кластера (с очисткой port-forward и /etc/hosts)
make k8s destroy [preset]
# Остановка кластера (без удаления)
make k8s stop [preset]
# Запуск остановленного кластера
make k8s start [preset]
# Детальный отчет о состоянии
make k8s status [preset]
# Показать узлы кластера
make k8s nodes [preset]
```
### Получение kubeconfig
```bash
# Сохранить kubeconfig для подключения
make k8s config [preset]
# Использовать конфиг
export KUBECONFIG=kubeconfig
kubectl get nodes
```
### Shell доступ
```bash
# Открыть shell в контейнере k8s-controller
make k8s shell [preset]
```
---
## Работа с Helm
Helm - это менеджер пакетов для Kubernetes.
### Управление релизами
```bash
# Установить чарт
make k8s helm apply kubernetes nginx stable/nginx-ingress
# Обновить релиз
make k8s helm update kubernetes nginx stable/nginx-ingress
# Откатить релиз
make k8s helm rollback kubernetes nginx
# Посмотреть статус релиза
make k8s helm status kubernetes nginx
# Удалить релиз
make k8s helm delete kubernetes nginx
# Список всех релизов
make k8s helm list kubernetes
```
### Управление репозиториями
```bash
# Добавить репозиторий
make k8s helmrepo add kubernetes stable https://charts.helm.sh/stable
# Обновить репозиторий
make k8s helmrepo update kubernetes stable
# Список репозиториев
make k8s helmrepo list kubernetes
# Показать доступные чарты
make k8s helmrepo packages kubernetes stable
# Удалить репозиторий
make k8s helmrepo delete kubernetes stable
```
### Пример: установка MySQL
```bash
# Добавить репозиторий Bitnami
make k8s helmrepo add kubernetes bitnami https://charts.bitnami.com/bitnami
# Установить MySQL
make k8s helm apply kubernetes mysql bitnami/mysql
# Проверить статус
make k8s helm status kubernetes mysql
```
---
## Работа с манифестами
Применение обычных Kubernetes манифестов (без Helm).
```bash
# Применить манифест из URL
make k8s manifest apply kubernetes https://example.com/deploy.yaml
# Применить манифест из файла
make k8s manifest apply kubernetes /path/to/manifest.yaml
# Удалить манифест
make k8s manifest delete kubernetes https://example.com/deploy.yaml
```
### Пример: создание Deployment
```yaml
# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
```
```bash
# Применить
make k8s manifest apply kubernetes ./nginx-deployment.yaml
```
---
## Управление Ingress
### Доступ к приложениям через Ingress
Для доступа к приложениям по доменным именам нужно вручную добавить записи в `/etc/hosts`:
```bash
# Добавить запись в /etc/hosts
echo "127.0.0.1 grafana.local #k8s" | sudo tee -a /etc/hosts
# Очистить DNS кеш macOS
sudo killall -HUP mDNSResponder
```
После этого приложение будет доступно по адресу:
```
http://grafana.local:8081
```
**Пример манифеста Ingress:**
```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: grafana-ingress
namespace: monitoring
spec:
rules:
- host: grafana.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: monitoring-grafana
port:
number: 80
```
**Важно:**
- Записи в `/etc/hosts` нужно добавлять вручную
- Используйте порт 8081 для HTTP и 8443 для HTTPS
- Для удаления записей используйте sudo
---
## Проброс портов (Port-forward)
Port-forward позволяет получить доступ к ClusterIP сервисам извне кластера.
### Автоматический port-forward
После создания кластера автоматически создаются порты:
- Ingress HTTP: `8081:80`
- Ingress HTTPS: `8443:443`
- Grafana: `3000:80`
- Prometheus: `9090:9090`
- Kiali: `20001:20001`
### Управление вручную
```bash
# Создать port-forward
make k8s portforward create
# Список активных портов
make k8s portforward list
# Удалить конкретный порт
make k8s portforward delete 3000
# Очистить все порты
make k8s portforward clear
# Пересоздать порты
make k8s portforward recreate
```
### Ручной port-forward для своих сервисов
```bash
# Подключиться к кластеру
export KUBECONFIG=$(docker exec k8s-controller cat /root/.kube/config)
# Создать port-forward
kubectl port-forward -n default svc/my-service 8080:80
```
---
## Мониторинг и логи
### Детальный статус кластера
```bash
make k8s status kubernetes
```
Показывает:
- Узлы кластера
- Namespaces
- Pods
- Services
- Ingress
- Deployments
- DaemonSets
- StatefulSets
- PVC
- События
- Helm релизы
- Использование ресурсов
### Доступ к аддонам
**Grafana:**
```
URL: http://localhost:3000
Login: admin
Password: admin
```
**Prometheus:**
```
URL: http://localhost:9090
```
**Kiali:**
```
URL: http://localhost:20001
Login: admin
Password: admin
```
### Логи контейнера
```bash
# Логи k8s-controller
docker logs k8s-controller
# Логи в реальном времени
docker logs -f k8s-controller
```
### Логи кластера
```bash
# Логи конкретного pod
make k8s shell kubernetes
kubectl logs -n monitoring <pod-name>
# Все логи в namespace
kubectl logs -n monitoring --all-containers=true --tail=100
```
---
## Конфигурация
### Пресеты
Пресеты находятся в `molecule/presets/k8s/`:
**kubernetes.yml** - полный набор аддонов:
- Ingress NGINX
- Metrics Server
- Istio
- Kiali
- Prometheus + Grafana
### Структура пресета
```yaml
k8s_cluster:
name: lab
nodes: 1
addons:
ingress: true
metrics_server: true
istio: true
kiali: true
prometheus_stack: true
addon_ports:
ingress_http: 8081
ingress_https: 8443
prometheus: 9090
grafana: 3000
kiali: 20001
metrics_server: 4443
hosts:
- name: test1
image: centos8
systemd_defaults:
container: true
images:
centos8:
name: inecs/ansible-lab:centos8-latest
```
### Пользовательский пресет
Создайте файл `molecule/presets/k8s/my-preset.yml`:
```yaml
k8s_cluster:
name: my-cluster
nodes: 2
addons:
ingress: true
metrics_server: false
istio: false
kiali: false
prometheus_stack: false
```
Использование:
```bash
make k8s create my-preset
```
---
## Архитектура
```
┌─────────────────────────────────────────────────────┐
│ Локальная машина │
│ │
│ ┌──────────────────────────────────────────────┐ │
│ │ Makefile → Python скрипты → Docker API │ │
│ │ kubectl (port-forward) │ │
│ └──────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ Docker: k8s-controller │
│ ┌──────────────────────────────────────────────┐ │
│ │ kind, kubectl, helm, istioctl │ │
│ └──────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ Docker сеть: kind │
│ ┌──────────────────────────────────────────────┐ │
│ │ Kind Kubernetes Cluster │ │
│ │ • Control Plane (6443) │ │
│ │ • Worker Nodes │ │
│ │ • Services (ClusterIP) │ │
│ │ • Ingress Controller │ │
│ │ • Istio Service Mesh │ │
│ └──────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
```
### Компоненты
1. **k8s-controller** - контейнер с инструментами управления
2. **Kind кластер** - Kubernetes кластер в Docker контейнерах
3. **Port-forward** - локальные процессы на хосте
4. **Ingress** - маршрутизация трафика внутрь кластера
---
## Доступ к приложениям
### Доступ через Ingress
1. Создайте Ingress манифест
2. Примените через `make k8s manifest apply`
3. Запись автоматически добавится в `/etc/hosts`
4. Приложение доступно по доменному имени
### Доступ через port-forward
Для ClusterIP сервисов:
```bash
kubectl port-forward -n namespace svc/service-name 8080:80
```
Доступ: http://localhost:8080
### Доступ внутри кластера
Из другого pod:
```bash
kubectl exec -it pod-name -- curl http://service-name.namespace:80
```
---
## Кроссплатформенность
### Поддерживаемые платформы
- **macOS (Intel & Apple Silicon)** - полная поддержка
- **Linux (amd64 & arm64)** - полная поддержка
- **Windows** - через WSL2
### Проблемы на разных платформах
**Apple Silicon (M1/M2):**
- Используется ARM64 образы
- Автоматическое определение архитектуры
**Linux:**
- Требуются права на Docker socket
- Возможны проблемы с selinux
---
## Подробная документация по скриптам
Для подробного описания работы всех скриптов управления Kubernetes смотрите:
📖 [Документация по скриптам Kubernetes](k8s-scripts.md)
Включает:
- Описание каждого скрипта
- Принцип работы
- Примеры использования
- Архитектура взаимодействия
- Отладка
---
## Best Practices
### 1. Используйте пресеты
Не создавайте кластеры вручную, используйте пресеты для консистентности.
### 2. Очищайте после работы
```bash
# После тестирования
make k8s destroy kubernetes
```
### 3. Проверяйте статус
```bash
# Регулярно проверяйте статус
make k8s status kubernetes
```
### 4. Используйте Helm для сложных приложений
Для многослойных приложений лучше использовать Helm вместо сырых манифестов.
### 5. Логируйте изменения
Все изменения в кластере через `make k8s` автоматически логируются.
---
## Troubleshooting
### Кластер не создается
**Проблема:** `kind create cluster` завершается с ошибкой
**Решение:**
```bash
# Проверьте Docker
docker ps
# Перезапустите Docker
sudo systemctl restart docker
# Очистите старые кластеры
kind delete cluster --all
```
### Port-forward не работает
**Проблема:** Невозможно подключиться к порту
**Решение:**
```bash
# Проверьте процессы
make k8s portforward list
# Пересоздайте порты
make k8s portforward recreate
# Проверьте, что порт свободен
lsof -i :3000
```
### kubectl не подключается
**Проблема:** `kubectl get nodes` выдает ошибку
**Решение:**
```bash
# Проверьте контейнер
docker ps | grep k8s-controller
# Зайдите в контейнер
make k8s shell kubernetes
# Проверьте кластер
kubectl get nodes
# Если не работает, пересоздайте кластер
make k8s destroy kubernetes
make k8s create kubernetes
```
### Аддоны не устанавливаются
**Проблема:** Grafana/Prometheus/Kiali не доступны
**Решение:**
```bash
# Проверьте статус кластера
make k8s status kubernetes
# Проверьте pods
make k8s shell kubernetes
kubectl get pods -n monitoring
kubectl logs -n monitoring <pod-name>
# Пересоздайте кластер
make k8s destroy kubernetes
make k8s create kubernetes
```
### Ingress не работает
**Проблема:** Доменные имена не резолвятся
**Решение:**
```bash
# Проверьте Ingress
make k8s shell kubernetes
kubectl get ingress --all-namespaces
# Добавьте запись в /etc/hosts вручную
echo "127.0.0.1 grafana.local #k8s" | sudo tee -a /etc/hosts
# Очистите DNS кеш
sudo killall -HUP mDNSResponder
# Проверьте доступность
curl http://grafana.local:8081
```
### Helm чарты не устанавливаются
**Проблема:** `helm install` завершается с ошибкой
**Решение:**
```bash
# Проверьте репозитории
make k8s helmrepo list kubernetes
# Обновите репозитории
make k8s helmrepo update kubernetes stable
# Проверьте логи
make k8s shell kubernetes
kubectl logs -l app=<release-name>
```
### Контейнер k8s-controller не запускается
**Проблема:** `docker: Error response from daemon: ...`
**Решение:**
```bash
# Проверьте образ
docker images | grep k8s
# Пересоберите образ
make docker build-image IMAGE=k8s-amd64
make docker build-image IMAGE=k8s-arm64
# Проверьте Docker
docker system prune -f
```
---
## Контакты
- **Автор:** Сергей Антропов
- **Сайт:** https://devops.org.ru
- **GitHub:** https://github.com/your-repo
---
## Лицензия
MIT

View File

@@ -6,7 +6,7 @@
## Обзор
Линтинг ролей - это автоматическая проверка синтаксиса, стиля и соответствия лучшим практикам Ansible. В AnsibleTemplate используется `ansible-lint` для обеспечения качества кода.
Линтинг ролей - это автоматическая проверка синтаксиса, стиля и соответствия лучшим практикам Ansible. В DevOpsLab используется `ansible-lint` для обеспечения качества кода.
## Команды линтинга

View File

@@ -5,7 +5,7 @@
## 📋 Обзор
Molecule - это инструмент для тестирования Ansible ролей в изолированных окружениях. В проекте AnsibleLab используется универсальная конфигурация Molecule с поддержкой множества операционных систем и различных preset'ов для тестирования.
Molecule - это инструмент для тестирования Ansible ролей в изолированных окружениях. В проекте DevOpsLab используется универсальная конфигурация Molecule с поддержкой множества операционных систем и различных preset'ов для тестирования.
### 🔧 Fallback значения
@@ -26,7 +26,7 @@ molecule/
│ ├── converge.yml # Выполнение ролей в контейнерах
│ ├── verify.yml # Проверка результатов тестирования
│ ├── destroy.yml # Удаление тестовых контейнеров
│ └── site.yml # Основной playbook для тестирования
│ └── run.yml # Основной playbook для обновления контейнеров
└── presets/ # Preset конфигурации для разных сценариев
├── minimal.yml # Минимальный preset (1 хост)
├── performance.yml # Performance preset (12 хостов)
@@ -64,7 +64,7 @@ platforms:
```
- **Назначение:** Определяет доступные Docker образы для тестирования
- **Поддерживаемые ОС:** Ubuntu, Debian, RHEL, CentOS, AlmaLinux, Rocky Linux, Alt Linux, Astra Linux, RedOS
- **Собственные образы:** AnsibleLab создает собственные образы для тестирования
- **Собственные образы:** DevOpsLab создает собственные образы для тестирования
**Provisioner (Провижнер):**
```yaml
@@ -131,7 +131,7 @@ vars:
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
images:
alt: "inecs/ansible-lab:alt-linux-latest"
alt: "inecs/ansible-lab:alt9-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos: "inecs/ansible-lab:centos-latest"
@@ -154,7 +154,7 @@ vars:
```
- **Назначение:** Определение fallback значений для случаев когда preset файл не найден
- **Функция:** Обеспечение работоспособности даже без preset файлов
- **Образы:** Собственные образы AnsibleLab для всех поддерживаемых ОС
- **Образы:** Собственные образы DevOpsLab для всех поддерживаемых ОС
- **Systemd настройки:** Стандартные настройки для systemd контейнеров
#### Основные задачи:
@@ -392,12 +392,12 @@ vars:
command: >
bash -lc "
ANSIBLE_ROLES_PATH=/workspace/roles
ansible-playbook -i {{ lookup('env','MOLECULE_EPHEMERAL_DIRECTORY') }}/inventory/hosts.ini /workspace/molecule/default/site.yml
ansible-playbook -i {{ lookup('env','MOLECULE_EPHEMERAL_DIRECTORY') }}/inventory/hosts.ini /workspace/molecule/default/run.yml
"
```
- **Назначение:** Выполнение основного playbook'а
- **Функции:**
- Запуск `site.yml` в ansible-controller контейнере
- Запуск `run.yml` в ansible-controller контейнере
- Использование сгенерированного инвентори
- Установка пути к ролям
@@ -602,7 +602,7 @@ vars:
- **Назначение:** Отображение сводки по очистке
- **Функция:** Информация о удаленных ресурсах
### 6. `molecule/default/site.yml` - Основной playbook
### 6. `molecule/default/run.yml` - Основной playbook
**Назначение:** Основной playbook для тестирования ролей.

View File

@@ -1,7 +1,8 @@
# Мониторинг и диагностика AnsibleLab
# Мониторинг и диагностика DevOpsLab
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
**Сайт:** https://devops.org.ru
**Версия:** 3.0.0
## 🔍 Диагностика Docker
@@ -14,31 +15,37 @@ docker info
# Проверка запущенных контейнеров
docker ps -a
# Проверка образов
# Проверка образов DevOpsLab
docker images | grep inecs/ansible-lab
# Проверка сетей
docker network ls
docker network ls | grep labnet
```
### Диагностика buildx проблем
```bash
# Диагностика buildx
# Полная диагностика buildx
make docker diagnose
# Проверка builder'а
make docker setup-builder
make docker check-builder
# Сброс builder'а при проблемах
make docker reset-builder
# Настройка builder'а
make docker setup-builder
```
### Логи Docker
```bash
# Логи Docker daemon
sudo journalctl -u docker.service
# Логи Docker daemon (Linux)
sudo journalctl -u docker.service -f
# Логи Docker (macOS)
tail -f ~/Library/Containers/com.docker.docker/Data/log/vm/dockerd.log
# Логи конкретного контейнера
docker logs ansible-controller
@@ -48,6 +55,9 @@ docker logs -t ansible-controller
# Следить за логами в реальном времени
docker logs -f ansible-controller
# Последние 100 строк логов
docker logs --tail 100 ansible-controller
```
## 🧪 Диагностика тестирования
@@ -63,76 +73,91 @@ make presets info PRESET=default
# Проверка файлов preset'ов
ls -la molecule/presets/
# Проверка всех preset'ов
find molecule/presets -name "*.yml" -exec echo "=== {} ===" \; -exec cat {} \;
```
### Проверка инвентори
```bash
# Проверка тестового инвентори
cat ${MOLECULE_EPHEMERAL_DIRECTORY}/inventory/hosts.ini
# Проверка продакшн инвентори
cat inventory/hosts.ini
# Тестирование подключения
ansible all -i inventory/hosts.ini -m ping
# Проверка доступности хостов
ansible all -i inventory/hosts.ini -m shell -a "uname -a"
```
### Логи тестирования
```bash
# Логи Molecule
ls -la molecule/default/.molecule/
# Проверка созданных контейнеров
docker ps -a --filter "network=labnet"
# Логи конкретного теста
cat molecule/default/.molecule/test/ansible.log
# Логи всех контейнеров Molecule
docker ps -a --filter "network=labnet" --format "{{.Names}}" | while read name; do
echo "=== $name ==="
docker logs $name 2>&1 | tail -20
done
# Логи Ansible
cat molecule/default/.molecule/test/ansible.log | grep ERROR
# Очистка контейнеров Molecule
make clean-containers
```
## 📊 Мониторинг производительности
## 📊 Мониторинг ресурсов
### Мониторинг ресурсов
### Мониторинг Docker
```bash
# Использование CPU и памяти
docker stats
# Статистика использования ресурсов контейнерами
docker stats --no-stream
# Использование диска Docker
docker system df
# Детальная информация о диске
docker system df -v
# Очистка неиспользуемых ресурсов
docker system prune -a
```
### Мониторинг системы
```bash
# Использование диска
df -h
# Использование памяти
free -h
free -h # Linux
vm_stat # macOS
# Процессы Docker
ps aux | grep docker
# CPU и память в реальном времени
top
# или
htop
```
### Мониторинг сети
```bash
# Статистика сети
# Инспекция сети labnet
docker network inspect labnet
# Подключения к портам
# Статистика сети
docker network inspect labnet --format '{{json .Containers}}' | jq
# Просмотр портов
netstat -tulpn | grep docker
# Проверка DNS
nslookup docker.io
```
### Мониторинг логов
```bash
# Логи системы
sudo journalctl -f
# Логи Docker
sudo journalctl -u docker.service -f
# Логи Ansible
tail -f /var/log/ansible.log
# Просмотр установленных соединений
ss -tulpn | grep docker
```
## 🔧 Диагностика ролей
@@ -144,447 +169,253 @@ tail -f /var/log/ansible.log
make role lint
# Lint проверка конкретной роли
ansible-lint roles/my-role/
make role lint docker
make role lint devops
make role lint ping
# Проверка синтаксиса YAML
ansible-playbook --syntax-check roles/my-role/tasks/main.yml
# Проверка синтаксиса файлов роли
ansible-playbook --syntax-check roles/docker/tasks/main.yml
```
### Проверка переменных
```bash
# Проверка переменных роли
# Просмотр всех переменных для хоста
ansible-inventory --list -i inventory/hosts.ini
# Проверка переменных для конкретного хоста
# Проверка переменных конкретного хоста
ansible-inventory --host web1.example.com -i inventory/hosts.ini
# Проверка переменных группы
ansible-inventory --host web_servers -i inventory/hosts.ini
# Просмотр всех групп
ansible-inventory --list | jq 'keys'
```
### Тестирование ролей
```bash
# Тестирование с verbose выводом
ansible-playbook -i inventory/hosts.ini site.yml -vvv
# Тестирование с подробным выводом
make role test 2>&1 | tee test-output.log
# Тестирование конкретной роли
ansible-playbook -i inventory/hosts.ini site.yml --tags my-role
make role test docker
# Тестирование с dry-run
ansible-playbook -i inventory/hosts.ini site.yml --check
# Тестирование с minimal preset
make role test minimal
# Просмотр результатов теста
docker logs $(docker ps -aq --filter "network=labnet" | head -1)
```
## 🚨 Алерты и уведомления
## 🚨 Решение проблем
### Настройка алертов
### Проблемы с Docker
#### Docker не запускается
```bash
#!/bin/bash
# scripts/monitor.sh
# Скрипт мониторинга AnsibleLab
# Проверка Docker
if ! docker info >/dev/null 2>&1; then
echo "❌ Docker не запущен"
# Отправка уведомления
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"❌ Docker не запущен в AnsibleLab"}' \
$SLACK_WEBHOOK_URL
fi
# Проверка образов
if ! docker images | grep -q inecs/ansible-lab; then
echo "❌ Образы AnsibleLab не найдены"
# Отправка уведомления
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"❌ Образы AnsibleLab не найдены"}' \
$SLACK_WEBHOOK_URL
fi
# Проверка preset'ов
if [ ! -d "molecule/presets" ]; then
echo "❌ Директория preset'ов не найдена"
# Отправка уведомления
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"❌ Директория preset'ов не найдена"}' \
$SLACK_WEBHOOK_URL
fi
echo "✅ Мониторинг завершен"
```
### Настройка cron для мониторинга
```bash
# Добавление в crontab
crontab -e
# Проверка каждые 5 минут
*/5 * * * * /path/to/scripts/monitor.sh
# Проверка каждый час
0 * * * * /path/to/scripts/monitor.sh
# Проверка каждый день в 9:00
0 9 * * * /path/to/scripts/monitor.sh
```
## 📈 Метрики и отчеты
### Сбор метрик
```bash
#!/bin/bash
# scripts/collect-metrics.sh
# Сбор метрик AnsibleLab
echo "📊 Сбор метрик AnsibleLab..."
# Создание директории для метрик
mkdir -p metrics
# Метрики Docker
echo "=== Docker Metrics ===" > metrics/docker.txt
docker info >> metrics/docker.txt
docker images >> metrics/docker.txt
docker ps -a >> metrics/docker.txt
# Метрики системы
echo "=== System Metrics ===" > metrics/system.txt
df -h >> metrics/system.txt
free -h >> metrics/system.txt
uptime >> metrics/system.txt
# Метрики Ansible
echo "=== Ansible Metrics ===" > metrics/ansible.txt
ansible --version >> metrics/ansible.txt
ansible-galaxy list >> metrics/ansible.txt
# Метрики ролей
echo "=== Roles Metrics ===" > metrics/roles.txt
find roles/ -name "main.yml" -path "*/tasks/*" | wc -l >> metrics/roles.txt
ls -la roles/ >> metrics/roles.txt
echo "✅ Метрики собраны"
```
### Генерация отчетов
```bash
#!/bin/bash
# scripts/generate-report.sh
# Генерация отчета о состоянии AnsibleLab
echo "📋 Генерация отчета..."
# Создание директории для отчетов
mkdir -p reports
# Отчет о Docker
cat > reports/docker-report.md << EOF
# Docker Report
## Образы
\`\`\`
$(docker images | grep inecs/ansible-lab)
\`\`\`
## Контейнеры
\`\`\`
$(docker ps -a)
\`\`\`
## Сети
\`\`\`
$(docker network ls)
\`\`\`
EOF
# Отчет о ролях
cat > reports/roles-report.md << EOF
# Roles Report
## Количество ролей
$(find roles/ -name "main.yml" -path "*/tasks/*" | wc -l)
## Список ролей
\`\`\`
$(find roles/ -name "main.yml" -path "*/tasks/*" | sed 's|roles/||; s|/tasks/main.yml||')
\`\`\`
EOF
# Отчет о preset'ах
cat > reports/presets-report.md << EOF
# Presets Report
## Количество preset'ов
$(ls -1 molecule/presets/*.yml | wc -l)
## Список preset'ов
\`\`\`
$(ls -1 molecule/presets/*.yml | sed 's|molecule/presets/||g' | sed 's|\.yml||g')
\`\`\`
EOF
echo "✅ Отчеты сгенерированы"
```
## 🔍 Отладка проблем
### Общие проблемы
#### 1. Docker не запускается
```bash
# Проверка статуса Docker
# Проверка статуса (Linux)
sudo systemctl status docker
# Запуск Docker
# Запуск Docker (Linux)
sudo systemctl start docker
# Проверка логов
sudo journalctl -u docker.service
# Проверка логов (Linux)
sudo journalctl -u docker.service -f
# Перезапуск Docker Desktop (macOS/Windows)
# Use Docker Desktop interface
```
#### 2. Образы не собираются
#### Buildx зависает
```bash
# Проверка builder'а
# Диагностика
make docker diagnose
# Сброс builder'а
make docker reset-builder
# Очистка кеша
make docker clean
# Очистка контейнеров buildkit
docker ps -a --filter "name=buildx_buildkit" --format "{{.Names}}" | xargs -r docker rm -f
```
#### 3. Тесты не проходят
#### Образы не собираются
```bash
# Проверка preset'ов
make presets list
# Очистка builder'а
make docker clean-builder
# Проверка инвентори
cat ${MOLECULE_EPHEMERAL_DIRECTORY}/inventory/hosts.ini
# Пересоздание builder'а
make docker setup-builder
# Проверка логов
docker logs ansible-controller
# Полная пересборка
make docker rebuild
```
#### 4. Роли не работают
### Проблемы с тестированием
#### Preset'ы не работают
```bash
# Проверка preset файлов
ls -la molecule/presets/
# Проверка синтаксиса preset'а
yamllint molecule/presets/default.yml
# Информация о preset'е
make presets info PRESET=default
```
#### Контейнеры не запускаются
```bash
# Проверка созданных контейнеров
docker ps -a --filter "network=labnet"
# Логи контейнера
docker logs <container-name>
# Перезапуск контейнера
docker restart <container-name>
# Удаление всех контейнеров Molecule
make clean-containers
```
#### Роли не выполняются
```bash
# Проверка синтаксиса
make role lint
# Тест с verbose выводом
ansible-playbook -i inventory/hosts.ini run.yml -vvv
# Проверка переменных
ansible-inventory --list -i inventory/hosts.ini
# Тестирование с verbose
ansible-playbook -i inventory/hosts.ini site.yml -vvv
# Dry-run без выполнения
ansible-playbook -i inventory/hosts.ini run.yml --check
```
### Логи для отладки
### Проблемы с ролями
#### Синтаксические ошибки
```bash
# Сбор всех логов
# Lint проверка
make role lint
# Проверка конкретной роли
ansible-lint roles/docker/
# Проверка YAML синтаксиса
yamllint roles/docker/tasks/main.yml
```
#### Логика не работает
```bash
# Проверка переменных
ansible-playbook -i inventory/hosts.ini run.yml --list-tags
ansible-playbook -i inventory/hosts.ini run.yml --list-tasks
# Выполнение конкретной задачи
ansible-playbook -i inventory/hosts.ini run.yml --tags docker
# Debug режим
ansible-playbook -i inventory/hosts.ini run.yml -vvv
```
## 📈 Сбор диагностической информации
### Скрипт диагностики
```bash
#!/bin/bash
# Создание отчета для диагностики
echo "🔍 Сбор диагностической информации..."
# Создание директории для логов
mkdir -p debug-logs
# Логи Docker
docker info > debug-logs/docker-info.txt
docker images > debug-logs/docker-images.txt
docker ps -a > debug-logs/docker-containers.txt
# Docker информация
docker info > debug-logs/docker-info.txt 2>&1
docker images > debug-logs/docker-images.txt 2>&1
docker ps -a > debug-logs/docker-containers.txt 2>&1
docker network ls > debug-logs/docker-networks.txt 2>&1
# Логи системы
df -h > debug-logs/disk-usage.txt
free -h > debug-logs/memory-usage.txt
ps aux > debug-logs/processes.txt
# Системная информация
df -h > debug-logs/disk-usage.txt 2>&1
free -h > debug-logs/memory-usage.txt 2>&1 2>/dev/null || vm_stat > debug-logs/memory-usage.txt 2>&1
ps aux | grep docker > debug-logs/docker-processes.txt 2>&1
# Логи Ansible
ansible --version > debug-logs/ansible-version.txt
ansible-galaxy list > debug-logs/ansible-galaxy.txt
# Информация о проекте
ls -la roles/ > debug-logs/roles-list.txt 2>&1
ls -la molecule/presets/ > debug-logs/presets-list.txt 2>&1
cat inventory/hosts.ini > debug-logs/inventory.txt 2>&1
# Логи ролей
find roles/ -name "*.yml" -exec ansible-playbook --syntax-check {} \; > debug-logs/roles-syntax.txt
# Создание архива
tar -czf debug-logs-$(date +%Y%m%d-%H%M%S).tar.gz debug-logs/
echo "✅ Диагностическая информация собрана в: debug-logs-$(date +%Y%m%d-%H%M%S).tar.gz"
```
## 📊 Дашборд мониторинга
### Простой дашборд
### Команды для быстрой диагностики
```bash
#!/bin/bash
# scripts/dashboard.sh
# Простой дашборд мониторинга
echo "📊 AnsibleLab Dashboard"
echo "=========================="
# Статус Docker
if docker info >/dev/null 2>&1; then
echo "✅ Docker: Запущен"
else
echo "❌ Docker: Не запущен"
fi
# Количество образов
IMAGES=$(docker images | grep inecs/ansible-lab | wc -l)
echo "📦 Образы: $IMAGES"
# Количество ролей
ROLES=$(find roles/ -name "main.yml" -path "*/tasks/*" | wc -l)
echo "🎭 Роли: $ROLES"
# Количество preset'ов
PRESETS=$(ls -1 molecule/presets/*.yml 2>/dev/null | wc -l)
echo "⚙️ Preset'ы: $PRESETS"
# Использование диска
DISK=$(df -h . | tail -1 | awk '{print $5}')
echo "💾 Диск: $DISK"
# Использование памяти
MEMORY=$(free -h | grep Mem | awk '{print $3 "/" $2}')
echo "🧠 Память: $MEMORY"
echo "=========================="
# Быстрая проверка состояния
echo "=== Docker Status ===" && docker info | head -5
echo "=== DevOpsLab Images ===" && docker images | grep inecs/ansible-lab
echo "=== Roles ===" && ls -1 roles/ | grep -v "\.yml"
echo "=== Presets ===" && ls -1 molecule/presets/*.yml 2>/dev/null | wc -l
echo "=== Disk Usage ===" && df -h . | tail -1
```
### Веб-дашборд
## 🔧 Полезные команды
```html
<!DOCTYPE html>
<html>
<head>
<title>AnsibleLab Dashboard</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
.status { padding: 10px; margin: 10px 0; border-radius: 5px; }
.success { background-color: #d4edda; color: #155724; }
.error { background-color: #f8d7da; color: #721c24; }
.info { background-color: #d1ecf1; color: #0c5460; }
</style>
</head>
<body>
<h1>📊 AnsibleLab Dashboard</h1>
<div id="status"></div>
<script>
function updateStatus() {
fetch('/api/status')
.then(response => response.json())
.then(data => {
const statusDiv = document.getElementById('status');
statusDiv.innerHTML = `
<div class="status ${data.docker ? 'success' : 'error'}">
Docker: ${data.docker ? '✅ Запущен' : '❌ Не запущен'}
</div>
<div class="status info">
Образы: ${data.images}
</div>
<div class="status info">
Роли: ${data.roles}
</div>
<div class="status info">
Preset'ы: ${data.presets}
</div>
`;
})
.catch(error => {
console.error('Error:', error);
});
}
// Обновление каждые 30 секунд
setInterval(updateStatus, 30000);
updateStatus();
</script>
</body>
</html>
```
## 🔧 Автоматизация мониторинга
### Настройка мониторинга
### Очистка
```bash
#!/bin/bash
# scripts/setup-monitoring.sh
# Настройка мониторинга AnsibleLab
# Очистка контейнеров Molecule
make clean-containers
echo "🔧 Настройка мониторинга..."
# Очистка Docker образов DevOpsLab
make docker clean
# Создание директорий
mkdir -p {scripts,metrics,reports,debug-logs}
# Очистка всего Docker
make docker purge
# Создание скрипта мониторинга
cat > scripts/monitor.sh << 'EOF'
#!/bin/bash
# Скрипт мониторинга AnsibleLab
# Очистка buildx
make docker clean-builder
```
# Проверка Docker
if ! docker info >/dev/null 2>&1; then
echo "❌ Docker не запущен"
exit 1
fi
### Проверка
# Проверка образов
if ! docker images | grep -q inecs/ansible-lab; then
echo "❌ Образы AnsibleLab не найдены"
exit 1
fi
```bash
# Проверка наличия образов
make custom-images check
echo "✅ Мониторинг завершен"
EOF
# Проверка builder'а
make docker check-builder
# Создание скрипта сбора метрик
cat > scripts/collect-metrics.sh << 'EOF'
#!/bin/bash
# Сбор метрик AnsibleLab
# Информация об образах
make docker info
```
echo "📊 Сбор метрик..."
### Тестирование
# Метрики Docker
docker info > metrics/docker-info.txt
docker images > metrics/docker-images.txt
```bash
# Быстрый тест
make role test minimal
# Метрики системы
df -h > metrics/disk-usage.txt
free -h > metrics/memory-usage.txt
# Полный тест
make role test all-images
echo "✅ Метрики собраны"
EOF
# Создание скрипта генерации отчетов
cat > scripts/generate-report.sh << 'EOF'
#!/bin/bash
# Генерация отчета о состоянии AnsibleLab
echo "📋 Генерация отчета..."
# Отчет о Docker
cat > reports/docker-report.md << EOL
# Docker Report
## Образы
\`\`\`
$(docker images | grep inecs/ansible-lab)
\`\`\`
EOL
echo "✅ Отчеты сгенерированы"
EOF
# Делаем скрипты исполняемыми
chmod +x scripts/*.sh
echo "✅ Мониторинг настроен"
# Тест с конкретным preset'ом
make role test docker-full
```
---

View File

@@ -1,12 +1,12 @@
# Поддержка платформ в пресетах
## Автор
Сергей Антропов
Сайт: https://devops.org.ru
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
**Версия:** 3.0.0
## Описание
Начиная с версии 1.0, Molecule Template поддерживает указание конкретных платформ для хостов в пресетах. Это позволяет автоматически фильтровать хосты, которые не поддерживаются на текущей архитектуре системы.
DevOpsLab поддерживает указание конкретных платформ для хостов в пресетах. Это позволяет автоматически фильтровать хосты, которые не поддерживаются на текущей архитектуре системы.
## Обязательные требования
@@ -118,10 +118,10 @@ hosts:
### Универсальные хосты
Следующие системы работают на всех платформах:
- Ubuntu
- Debian
- Ubuntu 20.04, 22.04, 24.04
- Debian 9, 10, 11, 12
- Alt Linux
- CentOS
- CentOS 7, 8, 9
- RHEL
- AlmaLinux
- Rocky Linux

183
docs/presets-by-os.md Normal file
View File

@@ -0,0 +1,183 @@
# Пресеты по операционным системам
Этот документ описывает специализированные пресеты для тестирования на конкретных версиях операционных систем.
## 🐧 Ubuntu пресеты
### ubuntu-all.yml
**Описание:** Пресет со всеми версиями Ubuntu (20.04, 22.04, 24.04)
**Хосты:** 6 хостов (по 2 на каждую версию)
**Порты:** 8020-8025
**Использование:**
```bash
make role test ubuntu-all
```
### ubuntu20.yml
**Описание:** Пресет для Ubuntu 20.04 LTS
**Хосты:** 3 хоста (web, db, app)
**Порты:** 8020-8022
**Использование:**
```bash
make role test ubuntu20
```
### ubuntu22.yml
**Описание:** Пресет для Ubuntu 22.04 LTS
**Хосты:** 3 хоста (web, db, app)
**Порты:** 8220-8222
**Использование:**
```bash
make role test ubuntu22
```
### ubuntu24.yml
**Описание:** Пресет для Ubuntu 24.04 LTS
**Хосты:** 3 хоста (web, db, app)
**Порты:** 8240-8242
**Использование:**
```bash
make role test ubuntu24
```
## 🐧 Debian пресеты
### debian-all.yml
**Описание:** Пресет со всеми версиями Debian (9, 10, 11, 12)
**Хосты:** 8 хостов (по 2 на каждую версию)
**Порты:** 9009-9016
**Использование:**
```bash
make role test debian-all
```
### debian9.yml
**Описание:** Пресет для Debian 9 Stretch
**Хосты:** 3 хоста (web, db, app)
**Порты:** 9090-9092
**Использование:**
```bash
make role test debian9
```
### debian10.yml
**Описание:** Пресет для Debian 10 Buster
**Хосты:** 3 хоста (web, db, app)
**Порты:** 9100-9102
**Использование:**
```bash
make role test debian10
```
### debian11.yml
**Описание:** Пресет для Debian 11 Bullseye
**Хосты:** 3 хоста (web, db, app)
**Порты:** 9110-9112
**Использование:**
```bash
make role test debian11
```
### debian12.yml
**Описание:** Пресет для Debian 12 Bookworm
**Хосты:** 3 хоста (web, db, app)
**Порты:** 9120-9122
**Использование:**
```bash
make role test debian12
```
## 🐧 CentOS пресеты
### centos-all.yml
**Описание:** Пресет со всеми версиями CentOS (7, 8, 9)
**Хосты:** 6 хостов (по 2 на каждую версию)
**Порты:** 7007-7012
**Использование:**
```bash
make role test centos-all
```
### centos7.yml
**Описание:** Пресет для CentOS 7
**Хосты:** 3 хоста (web, db, app)
**Порты:** 7070-7072
**Использование:**
```bash
make role test centos7
```
### centos8.yml
**Описание:** Пресет для CentOS 8
**Хосты:** 3 хоста (web, db, app)
**Порты:** 7080-7082
**Использование:**
```bash
make role test centos8
```
### centos9.yml
**Описание:** Пресет для CentOS 9 Stream
**Хосты:** 3 хоста (web, db, app)
**Порты:** 7090-7092
**Использование:**
```bash
make role test centos9
```
## 📊 Сравнение пресетов
| Пресет | ОС | Версии | Хостов | Порты | Назначение |
|--------|----|---------|---------|--------|------------|
| ubuntu-all | Ubuntu | 20.04, 22.04, 24.04 | 6 | 8020-8025 | Тестирование всех версий Ubuntu |
| debian-all | Debian | 9, 10, 11, 12 | 8 | 9009-9016 | Тестирование всех версий Debian |
| centos-all | CentOS | 7, 8, 9 | 6 | 7007-7012 | Тестирование всех версий CentOS |
| ubuntu20 | Ubuntu | 20.04 | 3 | 8020-8022 | Тестирование Ubuntu 20.04 |
| ubuntu22 | Ubuntu | 22.04 | 3 | 8220-8222 | Тестирование Ubuntu 22.04 |
| ubuntu24 | Ubuntu | 24.04 | 3 | 8240-8242 | Тестирование Ubuntu 24.04 |
| debian9 | Debian | 9 | 3 | 9090-9092 | Тестирование Debian 9 |
| debian10 | Debian | 10 | 3 | 9100-9102 | Тестирование Debian 10 |
| debian11 | Debian | 11 | 3 | 9110-9112 | Тестирование Debian 11 |
| debian12 | Debian | 12 | 3 | 9120-9122 | Тестирование Debian 12 |
| centos7 | CentOS | 7 | 3 | 7070-7072 | Тестирование CentOS 7 |
| centos8 | CentOS | 8 | 3 | 7080-7082 | Тестирование CentOS 8 |
| centos9 | CentOS | 9 | 3 | 7090-7092 | Тестирование CentOS 9 |
## 🎯 Рекомендации по использованию
### Для разработки:
- Используйте `ubuntu22` или `debian12` для быстрого тестирования
- Используйте `ubuntu-all` для проверки совместимости с разными версиями Ubuntu
### Для продакшена:
- Используйте `centos-all` для проверки RHEL-совместимых систем
- Используйте `debian-all` для проверки Debian-совместимых систем
### Для CI/CD:
- Используйте отдельные пресеты для изолированного тестирования
- Используйте `*-all` пресеты для комплексной проверки совместимости
## 🔧 Настройка портов
Все пресеты используют уникальные диапазоны портов:
### Ubuntu пресеты:
- **ubuntu-all:** 8020-8025 (все версии)
- **ubuntu20:** 8020-8022
- **ubuntu22:** 8220-8222
- **ubuntu24:** 8240-8242
### Debian пресеты:
- **debian-all:** 9009-9016 (все версии)
- **debian9:** 9090-9092
- **debian10:** 9100-9102
- **debian11:** 9110-9112
- **debian12:** 9120-9122
### CentOS пресеты:
- **centos-all:** 7007-7012 (все версии)
- **centos7:** 7070-7072
- **centos8:** 7080-7082
- **centos9:** 7090-7092
Это позволяет запускать несколько пресетов одновременно без конфликтов портов.

248
docs/run-yml-guide.md Normal file
View File

@@ -0,0 +1,248 @@
# Руководство по файлу run.yml
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
## 📋 Описание
Файл `molecule/default/run.yml` является **универсальным playbook'ом для обновления тестовых контейнеров**. Этот файл отвечает за подготовку окружения и установку необходимых утилит внутри контейнеров при запуске тестов.
## 🎯 Назначение
### Основные функции:
1. **Обновление пакетов** в контейнерах при запуске тестов
2. **Установка common tools** для корректной работы тестов
3. **Подготовка окружения** для тестирования ролей
4. **Импорт roles/deploy.yml** для запуска ролей
## 🏗️ Структура файла
### 1. Подготовка окружения для тестирования
```yaml
- name: Подготовка окружения для тестирования
hosts: all
become: true
tasks:
# Задачи подготовки...
```
**Что делает:**
- Обновляет кеш пакетов для всех поддерживаемых ОС
- Устанавливает необходимые утилиты
- Настраивает пользователя для тестирования
- Создает рабочие директории
### 2. Импорт deploy.yml
```yaml
- import_playbook: ../../roles/deploy.yml
```
**Что делает:**
- Импортирует `roles/deploy.yml` для запуска ролей
- Разделяет логику: `run.yml` - подготовка, `deploy.yml` - роли
- Обеспечивает единую точку управления ролями
## 🐧 Поддерживаемые ОС
### Debian/Ubuntu
- **Менеджер пакетов:** `apt`
- **Обновление:** `apt update`
- **Утилиты:** `curl`, `jq`, `ca-certificates`, `iproute2`, `iputils-ping`, `procps`, `net-tools`, `sudo`, `vim`, `wget`, `unzip`, `git`
### RHEL/CentOS/AlmaLinux/Rocky
- **Менеджер пакетов:** `yum`
- **Обновление:** `yum update_cache`
- **Утилиты:** `curl`, `jq`, `ca-certificates`, `iproute`, `iputils`, `procps-ng`, `net-tools`, `sudo`, `vim`, `wget`, `unzip`, `git`
### Alt Linux
- **Менеджер пакетов:** `apt` (специальная версия)
- **Обновление:** `apt update`
- **Утилиты:** `curl`, `jq`, `ca-certificates`, `iproute2`, `iputils`, `procps`, `net-tools`, `sudo`, `vim`, `wget`, `unzip`, `git`
## 🏷️ Теги (Tags)
### setup
- Обновление пакетов
- Установка утилит
- Настройка пользователей
- Создание директорий
### update
- Обновление кеша пакетов
- Обновление списка пакетов
### tools
- Установка common tools
- Установка системных утилит
### python
- Установка Python 3
- Установка pip
- Установка venv
### user
- Создание тестового пользователя
- Настройка домашней директории
### sudo
- Настройка sudo для тестового пользователя
- Конфигурация прав доступа
### directory
- Создание рабочих директорий
- Настройка прав доступа
### roles
- Запуск тестирования ролей
- Выполнение функциональных тестов
### test
- Тестирование функциональности
- Проверка работоспособности
## 🚀 Использование
### Запуск полного тестирования
```bash
make role test
```
### Запуск только подготовки окружения
```bash
make role test --tags setup
```
### Запуск только обновления пакетов
```bash
make role test --tags update
```
### Запуск только установки утилит
```bash
make role test --tags tools
```
### Запуск только тестирования ролей
```bash
make role test --tags roles
```
## 🔧 Настройка
### Переменные окружения
```bash
# Настройка тестового пользователя
export TEST_USER=testuser
# Настройка рабочей директории
export TEST_DIR=/tmp/ansible-test
# Настройка прав доступа
export TEST_MODE=0755
```
### Кастомизация утилит
Для добавления дополнительных утилит отредактируйте соответствующие секции:
```yaml
# Для Debian/Ubuntu
- name: Install common tools (Debian/Ubuntu)
apt:
name:
- curl
- jq
- your-custom-tool # Добавьте сюда
state: present
```
## 🐛 Troubleshooting
### Проблема: Ошибка обновления пакетов
**Решение:** Проверьте доступность репозиториев и интернет-соединение
### Проблема: Не удается установить утилиты
**Решение:** Проверьте названия пакетов для конкретной ОС
### Проблема: Ошибка создания пользователя
**Решение:** Проверьте права доступа и существование пользователя
### Проблема: Ошибка настройки sudo
**Решение:** Проверьте синтаксис файла sudoers
## 📊 Мониторинг
### Логи выполнения
```bash
# Просмотр логов тестирования
make role test 2>&1 | tee test.log
# Фильтрация по тегам
grep "TASK \[.*\]" test.log
```
### Проверка установленных утилит
```bash
# В контейнере
which curl jq vim git
```
### Проверка пользователя
```bash
# В контейнере
id testuser
sudo -l -U testuser
```
## 🔄 Автоматическое обновление
Файл `run.yml` автоматически обновляется при добавлении новых ролей:
```bash
# Автоматическое обновление
make update-playbooks
```
**Что происходит:**
1. Обнаруживаются все роли в директории `roles/`
2. Обновляется секция "Тестирование всех ролей"
3. Добавляются новые роли в список
## 📝 Примеры использования
### Тестирование конкретной роли
```bash
# Тестирование только роли ping
make role test minimal ping
```
### Тестирование с конкретным preset'ом
```bash
# Тестирование с preset'ом performance
make role test performance
```
### Отладка проблем
```bash
# Запуск с подробным выводом
make role test --verbose
```
## 🎯 Лучшие практики
1. **Всегда используйте теги** для разделения задач
2. **Проверяйте совместимость** утилит с ОС
3. **Тестируйте на разных образах** перед коммитом
4. **Используйте idempotent задачи** для стабильности
5. **Документируйте изменения** в комментариях
## 🔗 Связанные файлы
- `molecule/default/molecule.yml` - конфигурация Molecule
- `roles/deploy.yml` - playbook для продакшн развертывания
- `inventory/hosts.ini` - инвентори для тестирования
- `Makefile` - команды для запуска тестов

View File

@@ -1,11 +1,11 @@
# Руководство по файлу site.yml
# Руководство по файлу run.yml
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
## 📋 Описание
Файл `molecule/default/site.yml` является **универсальным playbook'ом для тестирования Ansible ролей** в контейнерах. Этот файл отвечает за подготовку окружения и установку необходимых утилит внутри контейнеров при запуске тестов.
Файл `molecule/default/run.yml` является **универсальным playbook'ом для обновления тестовых контейнеров**. Этот файл отвечает за подготовку окружения и установку необходимых утилит внутри контейнеров при запуске тестов.
## 🎯 Назначение
@@ -42,7 +42,7 @@
**Что делает:**
- Импортирует `roles/deploy.yml` для запуска ролей
- Разделяет логику: `site.yml` - подготовка, `deploy.yml` - роли
- Разделяет логику: `run.yml` - подготовка, `deploy.yml` - роли
- Обеспечивает единую точку управления ролями
## 🐧 Поддерживаемые ОС
@@ -200,7 +200,7 @@ sudo -l -U testuser
## 🔄 Автоматическое обновление
Файл `site.yml` автоматически обновляется при добавлении новых ролей:
Файл `run.yml` автоматически обновляется при добавлении новых ролей:
```bash
# Автоматическое обновление

View File

@@ -136,7 +136,7 @@ make vault decrypt
├── files/
│ ├── requirements.yml
│ └── playbooks/
│ └── site.yml
│ └── run.yml
├── vault/
│ └── secrets.yml
└── Makefile

View File

@@ -6,7 +6,7 @@
## Описание
Это руководство описывает работу с зашифрованными секретами в Ansible Vault для проекта AnsibleTemplate.
Это руководство описывает работу с зашифрованными секретами в Ansible Vault для проекта DevOpsLab.
## Безопасность

View File

@@ -0,0 +1,19 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: grafana-ingress
namespace: monitoring
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: grafana.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: monitoring-grafana
port:
number: 80

View File

@@ -1,75 +1,239 @@
---
# =============================================================================
# CONVERGE - Сборка и запуск тестовых сценариев
# =============================================================================
- hosts: localhost
gather_facts: false
vars:
# Получаем preset из переменной окружения или используем default
preset_name: "{{ lookup('env', 'MOLECULE_PRESET') | default('default') }}"
preset_file: "/workspace/molecule/presets/{{ preset_name }}.yml"
# перечисли файлы/глобы, которые нужно временно расшифровать
vault_targets:
- /workspace/vault/secrets.yml
- /workspace/files/playbooks/group_vars/*/vault.yml
- /workspace/files/playbooks/host_vars/*/vault.yml
- /workspace/roles/**/vars/vault.yml
tasks:
- name: Display filtered hosts
debug:
msg: |
================================================================================
Начало работы converge.yml
================================================================================
# =============================================================================
# НАСТРОЙКА - Загрузка конфигурации и подготовка
# =============================================================================
- name: Configuration setup
debug:
msg: |
================================================================================
НАСТРОЙКА - Загрузка пресетов конфигурации и подготовка
================================================================================
Preset: {{ preset_name }}
================================================================================
- name: Load preset configuration
include_vars: "{{ preset_file }}"
when: preset_file is file
ignore_errors: true
# - name: Install collections
# community.docker.docker_container_exec:
# container: ansible-controller
# command: bash -lc "ansible-galaxy collection install -r /workspace/requirements.yml --force --no-deps --upgrade >/dev/null 2>&1 || true"
- name: Preflight vault — normalize state (encrypt if plaintext, then decrypt)
community.docker.docker_container_exec:
container: ansible-controller
command: >
bash -lc '
set -euo pipefail; shopt -s nullglob globstar;
for p in {{ vault_targets | map('quote') | join(' ') }}; do
for f in $p; do
[ -f "$f" ] || continue;
if head -n1 "$f" | grep -q "^\$ANSIBLE_VAULT;"; then
echo "[vault] already encrypted: $f";
else
echo "[vault] plaintext -> encrypt: $f";
ansible-vault encrypt --encrypt-vault-id default --vault-password-file /workspace/vault/.vault "$f";
fi
echo "[vault] decrypt for run: $f";
ansible-vault decrypt --vault-password-file /workspace/vault/.vault "$f";
done
done
'
- name: Run lab playbook
community.docker.docker_container_exec:
container: ansible-controller
command: >
bash -lc "
ANSIBLE_ROLES_PATH=/workspace/roles
ansible-playbook -i {{ lookup('env','MOLECULE_EPHEMERAL_DIRECTORY') }}/inventory/hosts.ini /workspace/molecule/default/site.yml
"
# =============================================================================
# ПОДГОТОВКА КОНТЕЙНЕРОВ (бывший run.yml)
# =============================================================================
- name: Подготовка окружения для тестирования
hosts: all
become: true
tasks:
# Сброс цветовых кодов ANSI для корректного отображения
- name: Reset ANSI color codes
debug:
msg: "\033[0m"
changed_when: false
tags:
- setup
- color-reset
- name: Post-run — re-encrypt secrets
community.docker.docker_container_exec:
container: ansible-controller
command: >
bash -lc '
set -euo pipefail; shopt -s nullglob globstar;
for p in {{ vault_targets | map('quote') | join(' ') }}; do
for f in $p; do
[ -f "$f" ] || continue;
if head -n1 "$f" | grep -q "^\$ANSIBLE_VAULT;"; then
echo "[vault] ok (encrypted): $f";
else
echo "[vault] encrypt back: $f";
ansible-vault encrypt --encrypt-vault-id default --vault-password-file /workspace/vault/.vault "$f" || true;
fi
done
done
'
ignore_errors: true
- name: Display filtered hosts
debug:
msg: |
================================================================================
ПОДГОТОВКА КОНТЕЙНЕРОВ
================================================================================
# Создание tmp директории для Ansible
- name: Create Ansible tmp directory
file:
path: /tmp/.ansible-tmp
state: directory
mode: '0755'
owner: root
group: root
tags:
- setup
- tmp
# Обновление кеша пакетов для Debian/Ubuntu
- name: Update package cache (Debian/Ubuntu)
apt:
update_cache: true
cache_valid_time: 3600
when: ansible_os_family == 'Debian'
changed_when: false
tags:
- setup
- update
# Обновление кеша пакетов для RHEL/CentOS/AlmaLinux/Rocky
- name: Update package cache (RHEL/CentOS/AlmaLinux/Rocky)
yum:
update_cache: true
when: ansible_os_family == 'RedHat'
changed_when: false
tags:
- setup
- update
# Обновление кеша пакетов для Alt Linux
- name: Update package cache (Alt Linux)
command: apt-get update
when: ansible_os_family == 'Altlinux'
changed_when: false
failed_when: false
tags:
- setup
- update
# Обновление кеша пакетов для Astra Linux
- name: Update package cache (Astra Linux)
command: apt-get update
when: ansible_os_family == 'Astra Linux'
changed_when: false
failed_when: false
tags:
- setup
- update
# Установка common tools для всех ОС
- name: Install common tools (Debian/Ubuntu)
apt:
name:
- curl
- jq
- ca-certificates
- iproute2
- iputils-ping
- procps
- net-tools
- vim
- wget
- unzip
- git
- sudo
state: present
update_cache: false
when: ansible_os_family == 'Debian'
no_log: true
tags:
- setup
- tools
- name: Install common tools (RHEL/CentOS/AlmaLinux/Rocky)
yum:
name:
- curl
- jq
- ca-certificates
- iproute
- iputils
- procps-ng
- net-tools
- vim
- wget
- unzip
- git
- sudo
state: present
when: ansible_os_family == 'RedHat'
no_log: true
tags:
- setup
- tools
- name: Install common tools (Alt Linux)
command: apt-get install -y curl jq ca-certificates iproute2 iputils procps net-tools vim wget unzip git sudo
when: ansible_os_family == 'Altlinux'
changed_when: false
failed_when: false
no_log: true
tags:
- setup
- tools
- name: Install common tools (Astra Linux)
command: apt-get install -y curl jq ca-certificates iproute2 iputils procps net-tools vim wget unzip git sudo
when: ansible_os_family == 'Astra Linux'
changed_when: false
failed_when: false
no_log: true
tags:
- setup
- tools
# Установка Python для Ansible (если не установлен)
- name: Install Python (Debian/Ubuntu)
apt:
name:
- python3
- python3-pip
- python3-venv
state: present
when: ansible_os_family == 'Debian'
no_log: true
tags:
- setup
- python
- name: Install Python (RHEL/CentOS/AlmaLinux/Rocky)
yum:
name:
- python3
- python3-pip
state: present
when: ansible_os_family == 'RedHat'
no_log: true
tags:
- setup
- python
- name: Install Python (Alt Linux)
command: apt-get install -y python3 python3-pip
when: ansible_os_family == 'Altlinux'
changed_when: false
failed_when: false
no_log: true
tags:
- setup
- python
- name: Install Python (Astra Linux)
command: apt-get install -y python3 python3-pip
when: ansible_os_family == 'Astra Linux'
changed_when: false
failed_when: false
no_log: true
tags:
- setup
- python
- name: Display filtered hosts
debug:
msg: |
================================================================================
ПОДГОТОВКА КОНТЕЙНЕРОВ ЗАВЕРШЕНА
================================================================================
- name: Display filtered hosts
debug:
msg: |
================================================================================
РАБОТА ФАЙЛА CONVERGE.YML ЗАВЕРШЕНА
================================================================================

View File

@@ -1,24 +1,37 @@
---
# =============================================================================
# CREATE - Создание тестовых инстансов
# =============================================================================
- hosts: localhost
gather_facts: false
vars:
# Получаем preset из переменной окружения или используем default
preset_name: "{{ lookup('env', 'MOLECULE_PRESET') | default('default') }}"
preset_file: "/workspace/molecule/presets/{{ preset_name }}.yml"
# Проверяем сначала в папке k8s, затем в основной папке presets
preset_file: "{{ '/workspace/molecule/presets/k8s/' + preset_name + '.yml' if (preset_name in ['k8s-minimal', 'kubernetes', 'k8s-full'] or preset_name.startswith('k8s-')) else '/workspace/molecule/presets/' + preset_name + '.yml' }}"
# Fallback значения если preset файл не найден
docker_network: labnet
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
images:
alt: "inecs/ansible-lab:alt-linux-latest"
alt9: "inecs/ansible-lab:alt9-latest"
alt10: "inecs/ansible-lab:alt10-latest"
astra: "inecs/ansible-lab:astra-linux-latest"
astra-arm64: "inecs/ansible-lab:astra-linux-arm64-latest"
rhel: "inecs/ansible-lab:rhel-latest"
centos: "inecs/ansible-lab:centos-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"
ubuntu: "inecs/ansible-lab:ubuntu-latest"
debian: "inecs/ansible-lab:debian-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"
@@ -30,20 +43,15 @@
- name: u1
family: debian
groups: [test]
kind_clusters: []
tasks:
# - name: Install required collections
# command: ansible-galaxy collection install -r /workspace/requirements.yml
# delegate_to: localhost
# ignore_errors: true
# register: collections_install
# changed_when: false
# run_once: true
# become: true
# vars:
# ansible_python_interpreter: /usr/bin/python3
# environment:
# ANSIBLE_COLLECTIONS_PATH: /usr/share/ansible/collections
- name: Display running create.yml
debug:
msg: |
================================================================================
Запуск create.yml
================================================================================
# Определяем архитектуру системы для корректной загрузки образов
- name: Detect system architecture
@@ -80,16 +88,35 @@
set_fact:
hosts: "{{ filtered_hosts | default(hosts) }}"
- name: Display filtered hosts
# =============================================================================
# СЕТЕВОЕ ПОДКЛЮЧЕНИЕ
# =============================================================================
- name: Network setup
debug:
msg: "Platform {{ ansible_architecture }}: {{ hosts | length }} hosts will be deployed"
msg: |
================================================================================
НАСТРОЙКА СЕТИ
================================================================================
Network: {{ docker_network }}
================================================================================
- name: Ensure network exists
community.docker.docker_network:
name: "{{ docker_network }}"
state: present
# SYSTEMD nodes
# =============================================================================
# SYSTEMD NODES - Создание контейнеров с systemd
# =============================================================================
- name: Systemd nodes setup
debug:
msg: |
================================================================================
SYSTEMD NODES - Создание контейнеров с systemd
================================================================================
Count: {{ hosts | selectattr('type','undefined') | list | length }}
================================================================================
- name: Pull systemd images with correct platform
command: "docker pull --platform {{ ansible_architecture }} {{ images[item.family] }}"
loop: "{{ hosts | selectattr('type','undefined') | list }}"
@@ -100,7 +127,7 @@
- name: Display pull results
debug:
msg: "Pulled {{ item.item.name }}: {{ 'OK' if item.rc == 0 else 'SKIPPED (not available for this platform)' }}"
msg: "Pulled {{ item.item.name }}: {{ 'OK' if (item.rc is defined and item.rc == 0) else 'SKIPPED (not available for this platform)' }}"
loop: "{{ pull_result.results | default([]) }}"
loop_control:
label: "{{ item.item.name }}"
@@ -112,15 +139,15 @@
networks:
- name: "{{ docker_network }}"
privileged: "{{ systemd_defaults.privileged }}"
command: "{{ systemd_defaults.command }}"
volumes: "{{ systemd_defaults.volumes | default([]) + (item.volumes | default([])) }}"
command: "{{ '/bin/bash -c \"while true; do sleep 30; done\"' if item.family in ['alt10', 'alt9'] else systemd_defaults.command }}"
volumes: "{{ systemd_defaults.volumes | default([]) + (item.volumes | default([])) + ['/Users/inecs/PycharmProjects/DevOpsLab/vault:/workspace/vault:ro', '/Users/inecs/PycharmProjects/DevOpsLab/files:/workspace/files:ro', '/Users/inecs/PycharmProjects/DevOpsLab/roles:/workspace/roles:ro'] }}"
tmpfs: "{{ systemd_defaults.tmpfs | default([]) }}"
capabilities: "{{ systemd_defaults.capabilities | default([]) }}"
published_ports: "{{ item.publish | default([]) }}"
env: "{{ item.env | default({}) }}"
# Специальные настройки для Astra Linux и RedOS (для совместимости с amd64 базовыми образами)
# Специальные настройки для Astra Linux и RedOS
security_opts: "{{ ['seccomp=unconfined', 'apparmor=unconfined'] if item.family in ['astra', 'redos'] else [] }}"
platform: "{{ 'linux/amd64' if item.family in ['astra', 'redos'] else omit }}"
platform: "{{ item.docker_platform | default(item.platform) | default(omit) }}"
state: started
restart_policy: unless-stopped
loop: "{{ hosts | selectattr('type','undefined') | list }}"
@@ -130,22 +157,34 @@
# Ожидание стабилизации контейнеров
- name: Wait for containers to be ready
pause:
seconds: 5
seconds: 10
when: hosts | length > 0
# Создание tmp директории в контейнерах
- name: Create Ansible tmp directory in containers
community.docker.docker_container_exec:
container: "{{ item.name }}"
command: "mkdir -p /tmp/.ansible-tmp && chmod 755 /tmp/.ansible-tmp"
# Проверка готовности контейнеров
- name: Wait for containers to be running
community.docker.docker_container_info:
name: "{{ item.name }}"
register: container_info
loop: "{{ hosts | selectattr('type','undefined') | list }}"
loop_control: { label: "{{ item.name }}" }
when: item.family is defined and images[item.family] is defined
ignore_errors: true
retries: 3
delay: 2
retries: 10
delay: 5
until: container_info.container.State.Running | default(false)
# =============================================================================
# DIND NODES - Создание контейнеров Docker-in-Docker
# =============================================================================
- name: DinD nodes setup
debug:
msg: |
================================================================================
DIND NODES - Создание контейнеров Docker-in-Docker
================================================================================
Count: {{ hosts | selectattr('type','defined') | selectattr('type','equalto','dind') | list | length }}
================================================================================
# DinD nodes
- name: Start DinD nodes (docker:27-dind)
community.docker.docker_container:
name: "{{ item.name }}"
@@ -162,7 +201,18 @@
loop: "{{ hosts | selectattr('type','defined') | selectattr('type','equalto','dind') | list }}"
loop_control: { label: "{{ item.name }}" }
# DOoD nodes (mount docker.sock)
# =============================================================================
# DOOD NODES - Создание контейнеров Docker-out-of-Docker
# =============================================================================
- name: DOoD nodes setup
debug:
msg: |
================================================================================
DOOD NODES - Создание контейнеров Docker-out-of-Docker
================================================================================
Count: {{ hosts | selectattr('type','defined') | selectattr('type','equalto','dood') | list | length }}
================================================================================
- name: Start DOoD nodes (systemd + docker.sock mount)
community.docker.docker_container:
name: "{{ item.name }}"
@@ -171,11 +221,12 @@
- name: "{{ docker_network }}"
privileged: "{{ systemd_defaults.privileged }}"
command: "{{ systemd_defaults.command }}"
volumes: "{{ (systemd_defaults.volumes | default([])) + ['/var/run/docker.sock:/var/run/docker.sock'] + (item.volumes | default([])) }}"
volumes: "{{ (systemd_defaults.volumes | default([])) + ['/var/run/docker.sock:/var/run/docker.sock'] + (item.volumes | default([])) + ['/Users/inecs/PycharmProjects/DevOpsLab/vault:/workspace/vault:ro', '/Users/inecs/PycharmProjects/DevOpsLab/files:/workspace/files:ro', '/Users/inecs/PycharmProjects/DevOpsLab/roles:/workspace/roles:ro'] }}"
tmpfs: "{{ systemd_defaults.tmpfs | default([]) }}"
capabilities: "{{ systemd_defaults.capabilities | default([]) }}"
published_ports: "{{ item.publish | default([]) }}"
env: "{{ item.env | default({}) }}"
platform: "{{ item.docker_platform | default(item.platform) | default(omit) }}"
state: started
restart_policy: unless-stopped
loop: "{{ hosts | selectattr('type','defined') | selectattr('type','equalto','dood') | list }}"
@@ -197,7 +248,18 @@
item_name: "{{ item.0.name }}"
item_group: "{{ item.1 }}"
# Render inventory
# =============================================================================
# ИНВЕНТАРЬ - Генерация inventory файла
# =============================================================================
- name: Inventory generation
debug:
msg: |
================================================================================
ИНВЕНТАРЬ - Генерация inventory файла
================================================================================
File: {{ generated_inventory }}
================================================================================
- name: Render inventory ini
set_fact:
inv_content: |
@@ -264,7 +326,7 @@
{% endif %}
{# Глобальный fallback для остальных хостов #}
[unmatched_hosts:vars]
[all:vars]
ansible_python_interpreter=auto_silent
- name: Write inventory file
@@ -274,11 +336,23 @@
mode: "0644"
- name: Display inventory summary
shell: |
echo "Inventory Summary:"
echo "- Total hosts: {{ hosts | length }}"
echo "- Groups: {{ groups_map.keys() | list | join(', ') }}"
echo "- Systemd nodes: {{ hosts | selectattr('type','undefined') | list | length }}"
echo "- DinD nodes: {{ hosts | selectattr('type','defined') | selectattr('type','equalto','dind') | list | length }}"
echo "- DOoD nodes: {{ hosts | selectattr('type','defined') | selectattr('type','equalto','dood') | list | length }}"
register: inventory_summary_output
changed_when: false
- name: Show inventory summary
debug:
msg: "{{ inventory_summary_output.stdout_lines }}"
- name: End of create.yml
debug:
msg: |
📋 Inventory Summary:
- Total hosts: {{ hosts | length }}
- Groups: {{ groups_map.keys() | list | join(', ') }}
- Systemd nodes: {{ hosts | selectattr('type','undefined') | list | length }}
- DinD nodes: {{ hosts | selectattr('type','defined') | selectattr('type','equalto','dind') | list | length }}
- DOoD nodes: {{ hosts | selectattr('type','defined') | selectattr('type','equalto','dood') | list | length }}
================================================================================
Окончание работы create.yml
================================================================================

View File

@@ -1,10 +1,14 @@
---
# =============================================================================
# DESTROY - Удаление тестовых инстансов
# =============================================================================
- hosts: localhost
gather_facts: false
vars:
# Получаем preset из переменной окружения или используем default
preset_name: "{{ lookup('env', 'MOLECULE_PRESET') | default('default') }}"
preset_file: "/workspace/molecule/presets/{{ preset_name }}.yml"
# Проверяем сначала в папке k8s, затем в основной папке presets
preset_file: "{{ '/workspace/molecule/presets/k8s/' + preset_name + '.yml' if (preset_name in ['k8s-minimal', 'kubernetes', 'k8s-full'] or preset_name.startswith('k8s-')) else '/workspace/molecule/presets/' + preset_name + '.yml' }}"
# Fallback значения если preset файл не найден
docker_network: labnet
@@ -12,13 +16,46 @@
- name: u1
family: debian
groups: [test]
kind_clusters: []
tasks:
- name: Display filtered hosts
debug:
msg: |
================================================================================
НАЧАЛО РАБОТЫ ФАЙЛА DESTROY.YML
================================================================================
# =============================================================================
# НАСТРОЙКА - Загрузка конфигурации
# =============================================================================
- name: Configuration setup
debug:
msg: |
================================================================================
НАСТРОЙКА - Загрузка конфигурации
================================================================================
Preset: {{ preset_name }}
================================================================================
- name: Load preset configuration
include_vars: "{{ preset_file }}"
when: preset_file is file
ignore_errors: true
# =============================================================================
# УДАЛЕНИЕ КОНТЕЙНЕРОВ - Остановка и удаление контейнеров
# =============================================================================
- name: Container removal
debug:
msg: |
================================================================================
УДАЛЕНИЕ КОНТЕЙНЕРОВ - Остановка и удаление контейнеров
================================================================================
Count: {{ hosts | length }} containers
================================================================================
- name: Stop and remove containers
community.docker.docker_container:
name: "{{ item.name }}"
@@ -53,6 +90,18 @@
ignore_errors: true
when: item.volumes is defined
# =============================================================================
# ОЧИСТКА СЕТИ - Удаление Docker сети
# =============================================================================
- name: Network cleanup
debug:
msg: |
================================================================================
ОЧИСТКА СЕТИ - Удаление Docker сети
================================================================================
Network: {{ docker_network }}
================================================================================
- name: Remove network
community.docker.docker_network:
name: "{{ docker_network }}"
@@ -77,7 +126,18 @@
- name: Display cleanup summary
debug:
msg: |
🧹 Cleanup Summary:
- Removed containers: {{ hosts | length }}
- Removed DinD volumes: {{ hosts | selectattr('type','defined') | selectattr('type','equalto','dind') | list | length }}
- Network: {{ docker_network }}
================================================================================
СТАТИСТИКА ОЧИСТКИ
================================================================================
Containers: {{ hosts | length }}
Volumes: {{ hosts | selectattr('type','defined') | selectattr('type','equalto','dind') | list | length }}
Network: {{ docker_network }}
Clusters: {{ kind_clusters | default([]) | length }}
================================================================================
- name: Display filtered hosts
debug:
msg: |
================================================================================
РАБОТА ФАЙЛА DESTROY.YML ЗАВЕРШЕНА
================================================================================

View File

@@ -8,7 +8,7 @@ driver:
platforms:
# Платформы будут созданы динамически через preset файлы
# Поддержка собственных образов AnsibleLab
# Поддержка собственных образов DevOpsLab с правильными тегами
- name: placeholder
image: ghcr.io/ansible-community/molecule-ubuntu-systemd:jammy
pre_build_image: true
@@ -16,32 +16,71 @@ platforms:
- name: ansible-controller
image: inecs/ansible-lab:ansible-controller-latest
pre_build_image: true
- name: alt-linux
image: inecs/ansible-lab:alt-linux-latest
volumes:
- "${MOLECULE_EPHEMERAL_DIRECTORY}:/tmp/molecule_workspace:ro"
- "../vault:/workspace/vault:ro"
# ALT Linux
- name: alt9
image: inecs/ansible-lab:alt9-latest
pre_build_image: true
- name: alt10
image: inecs/ansible-lab:alt10-latest
pre_build_image: true
# Astra Linux
- name: astra-linux
image: inecs/ansible-lab:astra-linux-latest
pre_build_image: true
- name: astra-linux-arm64
image: inecs/ansible-lab:astra-linux-arm64-latest
pre_build_image: true
# RED OS
- name: redos
image: inecs/ansible-lab:redos-latest
pre_build_image: true
# RHEL
- name: rhel
image: inecs/ansible-lab:rhel-latest
pre_build_image: true
- name: centos
image: inecs/ansible-lab:centos-latest
# CentOS
- name: centos7
image: inecs/ansible-lab:centos7-latest
pre_build_image: true
- name: centos8
image: inecs/ansible-lab:centos8-latest
pre_build_image: true
- name: centos9
image: inecs/ansible-lab:centos9-latest
pre_build_image: true
# AlmaLinux
- name: alma
image: inecs/ansible-lab:alma-latest
pre_build_image: true
# Rocky Linux
- name: rocky
image: inecs/ansible-lab:rocky-latest
pre_build_image: true
- name: ubuntu
image: inecs/ansible-lab:ubuntu-latest
# Ubuntu
- name: ubuntu20
image: inecs/ansible-lab:ubuntu20-latest
pre_build_image: true
- name: debian
image: inecs/ansible-lab:debian-latest
- name: ubuntu22
image: inecs/ansible-lab:ubuntu22-latest
pre_build_image: true
- name: ubuntu24
image: inecs/ansible-lab:ubuntu24-latest
pre_build_image: true
# Debian
- name: debian9
image: inecs/ansible-lab:debian9-latest
pre_build_image: true
- name: debian10
image: inecs/ansible-lab:debian10-latest
pre_build_image: true
- name: debian11
image: inecs/ansible-lab:debian11-latest
pre_build_image: true
- name: debian12
image: inecs/ansible-lab:debian12-latest
pre_build_image: true
provisioner:

View File

@@ -1,216 +0,0 @@
---
# Универсальный playbook для тестирования Ansible ролей
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
#
# Этот файл отвечает за:
# 1. Обновление пакетов в контейнерах при запуске тестов
# 2. Установку common tools для корректной работы тестов
# 3. Подготовку окружения для тестирования ролей
# 4. Запуск всех ролей из директории roles/
- name: Подготовка окружения для тестирования
hosts: all
become: true
tasks:
# Создание tmp директории для Ansible
- name: Create Ansible tmp directory
file:
path: /tmp/.ansible-tmp
state: directory
mode: '0755'
owner: root
group: root
tags:
- setup
- tmp
# Обновление кеша пакетов для Debian/Ubuntu
- name: Update package cache (Debian/Ubuntu)
apt:
update_cache: true
cache_valid_time: 3600
when: ansible_os_family == 'Debian'
changed_when: false
tags:
- setup
- update
# Обновление кеша пакетов для RHEL/CentOS/AlmaLinux/Rocky
- name: Update package cache (RHEL/CentOS/AlmaLinux/Rocky)
yum:
update_cache: true
when: ansible_os_family == 'RedHat'
changed_when: false
tags:
- setup
- update
# Обновление кеша пакетов для Alt Linux
- name: Update package cache (Alt Linux)
command: apt-get update
when: ansible_os_family == 'Altlinux'
changed_when: false
failed_when: false
tags:
- setup
- update
# Обновление кеша пакетов для Astra Linux
- name: Update package cache (Astra Linux)
command: apt-get update
when: ansible_os_family == 'Astra Linux'
changed_when: false
failed_when: false
tags:
- setup
- update
# Установка common tools для всех ОС
- name: Install common tools (Debian/Ubuntu)
apt:
name:
- curl
- jq
- ca-certificates
- iproute2
- iputils-ping
- procps
- net-tools
- vim
- wget
- unzip
- git
state: present
update_cache: false
when: ansible_os_family == 'Debian'
tags:
- setup
- tools
- name: Install common tools (RHEL/CentOS/AlmaLinux/Rocky)
yum:
name:
- curl
- jq
- ca-certificates
- iproute
- iputils
- procps-ng
- net-tools
- vim
- wget
- unzip
- git
state: present
when: ansible_os_family == 'RedHat'
tags:
- setup
- tools
- name: Install common tools (Alt Linux)
command: apt-get install -y curl jq ca-certificates iproute2 iputils procps net-tools vim wget unzip git
when: ansible_os_family == 'Altlinux'
changed_when: false
failed_when: false
tags:
- setup
- tools
- name: Install common tools (Astra Linux)
command: apt-get install -y curl jq ca-certificates iproute2 iputils procps net-tools vim wget unzip git
when: ansible_os_family == 'Astra Linux'
changed_when: false
failed_when: false
tags:
- setup
- tools
# Установка Python для Ansible (если не установлен)
- name: Install Python (Debian/Ubuntu)
apt:
name:
- python3
- python3-pip
- python3-venv
state: present
when: ansible_os_family == 'Debian'
tags:
- setup
- python
# Установка Python 3.8+ для RHEL/CentOS/Rocky/AlmaLinux
- name: Install Python 3.8+ (RHEL/CentOS/Rocky/AlmaLinux)
yum:
name:
- python3
- python3-pip
state: present
when: ansible_os_family == 'RedHat'
tags:
- setup
- python
- name: Install Python (RHEL/CentOS/AlmaLinux/Rocky)
yum:
name:
- python3
- python3-pip
state: present
when: ansible_os_family == 'RedHat'
tags:
- setup
- python
- name: Install Python (Alt Linux)
command: apt-get install -y python3 python3-pip
when: ansible_os_family == 'Altlinux'
changed_when: false
failed_when: false
tags:
- setup
- python
- name: Install Python (Astra Linux)
command: apt-get install -y python3 python3-pip
when: ansible_os_family == 'Astra Linux'
changed_when: false
failed_when: false
tags:
- setup
- python
# Создание пользователя для тестирования
- name: Create test user
user:
name: testuser
shell: /bin/bash
create_home: yes
state: present
tags:
- setup
- user
# Настройка sudo для тестового пользователя
- name: Configure sudo for test user
lineinfile:
path: /etc/sudoers
line: "testuser ALL=(ALL) NOPASSWD:ALL"
state: present
validate: 'visudo -cf %s'
tags:
- setup
- sudo
# Создание директории для тестов
- name: Create test directory
file:
path: /tmp/ansible-test
state: directory
mode: '0755'
owner: testuser
group: testuser
tags:
- setup
- directory
- import_playbook: ../../roles/deploy.yml

View File

@@ -1,4 +1,7 @@
---
# =============================================================================
# VERIFY - Проверка тестовых инстансов
# =============================================================================
- hosts: localhost
gather_facts: false
vars:
@@ -14,12 +17,35 @@
groups: [test]
tasks:
# =============================================================================
# НАСТРОЙКА - Загрузка конфигурации
# =============================================================================
- name: Configuration setup
debug:
msg: |
================================================================================
НАСТРОЙКА - Загрузка конфигурации
================================================================================
Preset: {{ preset_name }}
================================================================================
- name: Load preset configuration
include_vars: "{{ preset_file }}"
when: preset_file is file
ignore_errors: true
# Проверка systemd узлов
# =============================================================================
# ПРОВЕРКА SYSTEMD УЗЛОВ - Статус systemd контейнеров
# =============================================================================
- name: Systemd nodes verification
debug:
msg: |
================================================================================
ПРОВЕРКА SYSTEMD УЗЛОВ - Статус systemd контейнеров
================================================================================
Count: {{ hosts | selectattr('type','undefined') | list | length }}
================================================================================
- name: Check systemd nodes status
community.docker.docker_container_exec:
container: "{{ item.name }}"

106
molecule/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

@@ -8,15 +8,23 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt: "inecs/ansible-lab:alt-linux-latest"
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"
centos: "inecs/ansible-lab:centos-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"
ubuntu: "inecs/ansible-lab:ubuntu-latest"
debian: "inecs/ansible-lab:debian-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
@@ -29,8 +37,8 @@ systemd_defaults:
hosts:
# Стандартный набор - 2 хоста для базового тестирования (стабильные ОС)
- name: u1
family: ubuntu
family: ubuntu22
groups: [test, web]
- name: u2
family: debian
family: debian12
groups: [test, web]

View File

@@ -9,15 +9,23 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt: "inecs/ansible-lab:alt-linux-latest"
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"
centos: "inecs/ansible-lab:centos-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"
ubuntu: "inecs/ansible-lab:ubuntu-latest"
debian: "inecs/ansible-lab:debian-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
@@ -29,22 +37,67 @@ systemd_defaults:
hosts:
# Debian-based системы
- name: ubuntu-test
family: ubuntu
groups: [test, debian]
- name: ubuntu20-test
family: ubuntu2220
groups: [test, debian, ubuntu]
publish:
- "8080:80"
env:
TEST_OS: "Ubuntu"
TEST_OS: "Ubuntu 20.04"
TEST_FAMILY: "Debian"
- name: debian-test
family: debian
groups: [test, debian]
- name: ubuntu22-test
family: ubuntu22
groups: [test, debian, ubuntu]
publish:
- "8081:80"
env:
TEST_OS: "Debian"
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
@@ -67,13 +120,31 @@ hosts:
TEST_FAMILY: "Astra Linux"
# RHEL-based системы
- name: centos-test
family: centos
groups: [test, rhel]
- name: centos7-test
family: centos97
groups: [test, rhel, centos]
publish:
- "8084:80"
- "8090:80"
env:
TEST_OS: "CentOS"
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

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

@@ -8,15 +8,23 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt: "inecs/ansible-lab:alt-linux-latest"
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"
centos: "inecs/ansible-lab:centos-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"
ubuntu: "inecs/ansible-lab:ubuntu-latest"
debian: "inecs/ansible-lab:debian-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
@@ -29,10 +37,10 @@ systemd_defaults:
hosts:
# Базовые хосты (стабильные ОС)
- name: u1
family: ubuntu
family: ubuntu22
groups: [test, web]
- name: u2
family: debian
family: debian12
groups: [test, web]
# DinD узел (Docker-in-Docker)
@@ -44,7 +52,7 @@ hosts:
# DOoD узел (Docker-out-of-Docker)
- name: dood1
type: dood
family: ubuntu
family: ubuntu22
groups: [dood]
publish: ["8081:8081"]
env:

View File

@@ -8,15 +8,23 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt: "inecs/ansible-lab:alt-linux-latest"
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"
centos: "inecs/ansible-lab:centos-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"
ubuntu: "inecs/ansible-lab:ubuntu-latest"
debian: "inecs/ansible-lab:debian-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
@@ -29,7 +37,7 @@ systemd_defaults:
hosts:
# Тестовые хосты
- name: test1
family: debian
family: debian12
groups: [test]
- name: test2
family: rhel
@@ -44,7 +52,7 @@ hosts:
# DOoD узел (Docker-out-of-Docker)
- name: dood1
type: dood
family: debian
family: debian12
groups: [dood]
publish: ["8081:8081"]
env:

View File

@@ -8,15 +8,23 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt: "inecs/ansible-lab:alt-linux-latest"
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"
centos: "inecs/ansible-lab:centos-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"
ubuntu: "inecs/ansible-lab:ubuntu-latest"
debian: "inecs/ansible-lab:debian-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
@@ -30,19 +38,19 @@ systemd_defaults:
hosts:
# ETCD кластер (5 узлов для высокой доступности)
- name: etcd1
family: debian
family: debian12
groups: [etcd, cluster]
- name: etcd2
family: rhel
groups: [etcd, cluster]
- name: etcd3
family: debian
family: debian12
groups: [etcd, cluster]
- name: etcd4
family: rhel
groups: [etcd, cluster]
- name: etcd5
family: debian
family: debian12
groups: [etcd, cluster]
# Patroni кластер (3 узла PostgreSQL)
@@ -50,7 +58,7 @@ hosts:
family: rhel
groups: [patroni, database, cluster]
- name: patroni2
family: debian
family: debian12
groups: [patroni, database, cluster]
- name: patroni3
family: rhel
@@ -58,7 +66,7 @@ hosts:
# HAProxy для балансировки
- name: haproxy
family: debian
family: debian12
groups: [haproxy, loadbalancer]
publish: ["5000:5000", "5001:5001"] # RW и RO порты

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

@@ -8,15 +8,23 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы для разных ОС
images:
alt: "inecs/ansible-lab:alt-linux-latest"
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"
centos: "inecs/ansible-lab:centos-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"
ubuntu: "inecs/ansible-lab:ubuntu-latest"
debian: "inecs/ansible-lab:debian-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
@@ -30,16 +38,16 @@ systemd_defaults:
hosts:
# Debian серверы
- name: debian1
family: debian
family: debian12
groups: [debian, servers, web]
- name: debian2
family: debian
family: debian12
groups: [debian, servers, web]
- name: debian3
family: debian
family: debian12
groups: [debian, servers, app]
- name: debian4
family: debian
family: debian12
groups: [debian, servers, app]
# RHEL серверы
@@ -58,7 +66,7 @@ hosts:
# База данных на разных ОС
- name: db-debian
family: debian
family: debian12
groups: [database, debian, db]
- name: db-rhel
family: rhel
@@ -66,7 +74,7 @@ hosts:
# Load balancer
- name: lb-mixed
family: debian
family: debian12
groups: [loadbalancer, haproxy]
publish: ["80:80", "443:443"]

View File

@@ -8,15 +8,23 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt: "inecs/ansible-lab:alt-linux-latest"
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"
centos: "inecs/ansible-lab:centos-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"
ubuntu: "inecs/ansible-lab:ubuntu-latest"
debian: "inecs/ansible-lab:debian-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
@@ -30,19 +38,19 @@ systemd_defaults:
hosts:
# Основные серверы (5 узлов)
- name: server1
family: debian
family: debian12
groups: [servers, web, app]
- name: server2
family: rhel
groups: [servers, web, app]
- name: server3
family: debian
family: debian12
groups: [servers, web, app]
- name: server4
family: rhel
groups: [servers, web, app]
- name: server5
family: debian
family: debian12
groups: [servers, web, app]
# База данных (3 узла)
@@ -50,7 +58,7 @@ hosts:
family: rhel
groups: [database, db]
- name: db2
family: debian
family: debian12
groups: [database, db]
- name: db3
family: rhel
@@ -58,13 +66,13 @@ hosts:
# Кэш (3 узла Redis)
- name: cache1
family: debian
family: debian12
groups: [cache, redis]
- name: cache2
family: rhel
groups: [cache, redis]
- name: cache3
family: debian
family: debian12
groups: [cache, redis]
# Load balancer

View File

@@ -8,15 +8,23 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt: "inecs/ansible-lab:alt-linux-latest"
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"
centos: "inecs/ansible-lab:centos-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"
ubuntu: "inecs/ansible-lab:ubuntu-latest"
debian: "inecs/ansible-lab:debian-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
@@ -34,7 +42,7 @@ hosts:
groups: [bastion, security, jump]
publish: ["2222:22"]
- name: bastion2
family: debian
family: debian12
groups: [bastion, security, jump]
publish: ["2223:22"]
@@ -43,7 +51,7 @@ hosts:
family: rhel
groups: [internal, servers, app]
- name: internal2
family: debian
family: debian12
groups: [internal, servers, app]
- name: internal3
family: rhel
@@ -54,12 +62,12 @@ hosts:
family: rhel
groups: [database, secure, internal]
- name: db-secure2
family: debian
family: debian12
groups: [database, secure, internal]
# Мониторинг и логирование
- name: monitor1
family: debian
family: debian12
groups: [monitoring, security, logs]
- name: monitor2
family: rhel
@@ -70,13 +78,13 @@ hosts:
family: rhel
groups: [firewall, network, security]
- name: fw2
family: debian
family: debian12
groups: [firewall, network, security]
# DOoD узел для тестирования Docker безопасности
- name: docker-secure
type: dood
family: debian
family: debian12
groups: [docker, security, apps]
publish: ["8080:8080"]
env:

View File

@@ -8,15 +8,23 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt: "inecs/ansible-lab:alt-linux-latest"
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"
centos: "inecs/ansible-lab:centos-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"
ubuntu: "inecs/ansible-lab:ubuntu-latest"
debian: "inecs/ansible-lab:debian-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
@@ -29,8 +37,8 @@ systemd_defaults:
hosts:
# Стабильные ОС для надежного тестирования
- name: u1
family: ubuntu
family: ubuntu22
groups: [test, web]
- name: u2
family: debian
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

@@ -8,15 +8,23 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt: "inecs/ansible-lab:alt-linux-latest"
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"
centos: "inecs/ansible-lab:centos-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"
ubuntu: "inecs/ansible-lab:ubuntu-latest"
debian: "inecs/ansible-lab:debian-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
@@ -29,5 +37,5 @@ systemd_defaults:
hosts:
# Минимальный набор - один хост
- name: u1
family: debian
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"]

93
molecule/presets/geop.yml Normal file
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,55 @@
---
# ПРЕСЕТ: 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: "ghcr.io/ansible-community/molecule-ubuntu-systemd:jammy"
rhel: "quay.io/centos/centos:stream9-systemd"
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,81 @@
---
# ПРЕСЕТ: 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: "ghcr.io/ansible-community/molecule-ubuntu-systemd:jammy"
rhel: "quay.io/centos/centos:stream9-systemd"
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,46 @@
---
# ПРЕСЕТ: 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: "ghcr.io/ansible-community/molecule-ubuntu-systemd:jammy"
rhel: "quay.io/centos/centos:stream9-systemd"
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

@@ -8,15 +8,23 @@ generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
# systemd-ready образы
images:
alt: "inecs/ansible-lab:alt-linux-latest"
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"
centos: "inecs/ansible-lab:centos-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"
ubuntu: "inecs/ansible-lab:ubuntu-latest"
debian: "inecs/ansible-lab:debian-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
@@ -27,11 +35,8 @@ systemd_defaults:
capabilities: ["SYS_ADMIN"]
hosts:
# Минимальный набор - один хост
# Минимальный набор - один хост Astra Linux для arm64
- name: u1
family: astra
groups: [test]
supported_platforms: ["linux/amd64"] # Только amd64
- name: u2
family: alt
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

@@ -1,39 +0,0 @@
---
#description: Стандартный пресет для тестирования с 3 хостами (Debian + RHEL)
# Автор: Сергей Антропов
# Сайт: 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"
centos: "inecs/ansible-lab:centos-latest"
alma: "inecs/ansible-lab:alma-latest"
rocky: "inecs/ansible-lab:rocky-latest"
redos: "inecs/ansible-lab:redos-latest"
ubuntu: "inecs/ansible-lab:ubuntu-latest"
debian: "inecs/ansible-lab:debian-latest"
systemd_defaults:
privileged: true
command: "/sbin/init"
volumes:
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
tmpfs: ["/run", "/run/lock"]
capabilities: ["SYS_ADMIN"]
hosts:
# Стандартный набор - 3 хоста
- name: u1
family: debian
groups: [test]
- name: u2
family: rhel
groups: [test]
- name: u3
family: debian
groups: [test]

View File

@@ -3,8 +3,53 @@
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: Развертывание всех ролей
- name: Установка роли repo
hosts: all
become: true
pre_tasks:
- name: Running role repo
debug:
msg: |
================================================================================
Запуск роли repo
================================================================================
roles:
# - ping
- devops
- repo
# - name: Установка роли devops
# hosts: all
# become: true
# pre_tasks:
# - name: Running role devops
# debug:
# msg: |
# ================================================================================
# Запуск роли devops
# ================================================================================
# roles:
# - devops
# - name: Установка роли docker
# hosts: all
# become: true
# pre_tasks:
# - name: Running role docker
# debug:
# msg: |
# ================================================================================
# Запуск роли docker
# ================================================================================
# roles:
# - docker
# - name: Установка роли python
# hosts: all
# become: true
# pre_tasks:
# - name: Running role python
# debug:
# msg: |
# ================================================================================
# Запуск роли python
# ================================================================================
# roles:
# - python

View File

@@ -1,122 +0,0 @@
# Быстрый старт - Роль devops
## Автор
Сергей Антропов
Сайт: https://devops.org.ru
## Что делает роль
Роль `devops` автоматически:
1. ✅ Создает пользователя `devops`
2. ✅ Генерирует безопасный пароль (30 символов)
3. ✅ Настраивает SSH доступ по ключу
4. ✅ Добавляет права sudo без пароля
5. ✅ Создает домашнюю директорию
6. ✅ Автоматически определяет ОС и настраивает группы
7. ✅ Поддерживает все ОС из dockerfiles (Ubuntu, Debian, RHEL, CentOS, Rocky, AlmaLinux, Astra Linux, ALT Linux, RedOS)
## Быстрый запуск
### 1. Базовое использование
```bash
ansible-playbook -i inventory/hosts.ini roles/deploy.yml
```
### 2. С SSH ключом из vault
```bash
ansible-playbook -i inventory/hosts.ini roles/deploy.yml \
--ask-vault-pass \
-e "devops_ssh_public_key={{ devops_ssh_keys.public_key }}"
```
### 3. Только роль devops
```bash
ansible-playbook -i inventory/hosts.ini roles/devops/playbook.yml
```
## Проверка результата
После выполнения проверьте:
```bash
# Проверка пользователя
ansible all -i inventory/hosts.ini -m shell -a "id devops"
# Проверка sudo прав
ansible all -i inventory/hosts.ini -m shell -a "sudo -l -U devops"
# Проверка SSH директории
ansible all -i inventory/hosts.ini -m shell -a "ls -la /home/devops/.ssh/"
```
## Настройка SSH ключа
1. Добавьте ваш SSH ключ в `vault/secrets.yml`:
```yaml
devops_ssh_keys:
public_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC7vbqajDhA... your@email.com"
```
2. Запустите playbook с передачей ключа:
```bash
ansible-playbook -i inventory/hosts.ini roles/deploy.yml \
--ask-vault-pass \
-e "devops_ssh_public_key={{ devops_ssh_keys.public_key }}"
```
## Кастомизация
### Изменить имя пользователя
```yaml
vars:
devops_user:
name: "myuser"
home: "/home/myuser"
```
### Изменить длину пароля
```yaml
vars:
devops_password:
length: 40
```
### Добавить группы
```yaml
vars:
devops_user:
groups: ["sudo", "docker", "wheel", "adm"]
```
## Безопасность
- 🔒 Пароль генерируется автоматически и не сохраняется в логах
- 🔑 SSH доступ только по ключу (если настроен)
- 🛡️ Пользователь добавлен в sudoers с правами NOPASSWD
- 📁 SSH директория имеет правильные права доступа (700)
## Troubleshooting
### Проблема: Пользователь не создан
```bash
# Проверьте права sudo
ansible all -i inventory/hosts.ini -m shell -a "sudo whoami"
```
### Проблема: SSH не работает
```bash
# Проверьте права на SSH директорию
ansible all -i inventory/hosts.ini -m shell -a "ls -la /home/devops/.ssh/"
```
### Проблема: Sudo не работает
```bash
# Проверьте sudoers файл
ansible all -i inventory/hosts.ini -m shell -a "sudo visudo -c"
```
## Поддержка
- 📧 Email: через сайт https://devops.org.ru
- 📖 Документация: `roles/devops/README.md`
- 🧪 Тесты: `roles/devops/tests/test.yml`

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