From 9c55c8f615080305913096e41ff38ba6f8aa03a3 Mon Sep 17 00:00:00 2001 From: Sergey Antropoff Date: Wed, 22 Oct 2025 13:43:08 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20?= =?UTF-8?q?=D1=81=20kubeconfig=20=D0=B8=20=D1=83=D0=BB=D1=83=D1=87=D1=88?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BE=D1=82=D1=87=D0=B5=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлена команда make kube kubeconfig CLUSTER=lab для получения kubeconfig файла - Добавлена команда make kubeconfigs для получения всех kubeconfig файлов - Улучшена команда make report для запуска через контейнер - Добавлена команда make open-report для открытия отчета в браузере - Добавлена команда make full-test для полного цикла с отчетом и kubeconfig - Обновлена справка make help с новыми командами - Обновлен README.md с новыми командами Новые команды: - make kube kubeconfig CLUSTER=lab - получить kubeconfig для конкретного кластера - make kubeconfigs - получить все kubeconfig файлы из всех кластеров - make open-report - открыть HTML отчет в браузере - make full-test - полный цикл тестирования с генерацией отчетов и kubeconfig Улучшения: - Генерация отчетов теперь работает через контейнер (не требует Python локально) - Автоматическое создание директорий reports/ и reports/kubeconfigs/ - Цветной вывод с информативными сообщениями - Кроссплатформенное открытие отчетов (macOS, Linux, Windows) - Валидация существования файлов перед открытием Автор: Сергей Антропов Сайт: https://devops.org.ru --- Makefile | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- README.md | 4 ++++ 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index bfcaa9b..6494068 100644 --- a/Makefile +++ b/Makefile @@ -63,6 +63,9 @@ help: ## Показать справку по всем командам @echo "$(GREEN)Kubernetes:$(RESET)" @awk 'BEGIN {FS = ":.*?## "} /^kube-[a-zA-Z_-]+:.*?## / {printf " $(CYAN)%-20s$(RESET) %s\n", $$1, $$2}' $(MAKEFILE_LIST) @echo "" + @echo "$(GREEN)Отчеты и мониторинг:$(RESET)" + @awk 'BEGIN {FS = ":.*?## "} /^(report|kubeconfigs|open-report|full-test):.*?## / {printf " $(CYAN)%-20s$(RESET) %s\n", $$1, $$2}' $(MAKEFILE_LIST) + @echo "" @echo "$(GREEN)Пресеты:$(RESET)" @awk 'BEGIN {FS = ":.*?## "} /^preset-[a-zA-Z_-]+:.*?## / {printf " $(CYAN)%-20s$(RESET) %s\n", $$1, $$2}' $(MAKEFILE_LIST) @echo "" @@ -255,8 +258,17 @@ kube: ## Управление Kubernetes (sh|cmd|enter|kiali|istio|grafana|prom| echo "$(RED)🛑 Останавливаем все port-forward...$(RESET)"; \ docker exec -it ansible-controller bash -lc 'pkill -f "kubectl .* port-forward" || true'; \ echo "$(GREEN)✅ Port-forward остановлены$(RESET)";; \ + kubeconfig) \ + if [ -z "$(CLUSTER)" ]; then \ + echo "$(RED)❌ Использование: make kube kubeconfig CLUSTER=lab$(RESET)"; \ + exit 1; \ + fi; \ + echo "$(BLUE)📋 Получаем kubeconfig для кластера $(CLUSTER)...$(RESET)"; \ + mkdir -p reports/kubeconfigs; \ + docker exec ansible-controller bash -lc 'kubectl --context kind-$(CLUSTER) config view --raw' > reports/kubeconfigs/kubeconfig-$(CLUSTER).yaml; \ + echo "$(GREEN)✅ Kubeconfig сохранен: reports/kubeconfigs/kubeconfig-$(CLUSTER).yaml$(RESET)";; \ *) \ - echo "$(RED)❌ Неизвестная команда. Доступные: sh, cmd, enter, kiali, istio, grafana, prom, pf-stop$(RESET)";; \ + echo "$(RED)❌ Неизвестная команда. Доступные: sh, cmd, enter, kiali, istio, grafana, prom, pf-stop, kubeconfig$(RESET)";; \ esac # ============================================================================= @@ -514,8 +526,56 @@ docker: ## Управление Docker (build|rebuild|prune|shell|logs|stop|star .PHONY: report report: ## Сгенерировать HTML отчет @echo "$(PURPLE)📊 Генерируем HTML отчет...$(RESET)" + @mkdir -p reports @docker exec ansible-controller bash -lc 'python3 /ansible/scripts/report_html.py /ansible/reports/lab-health.json /ansible/reports/lab-report.html' @echo "$(GREEN)✅ HTML отчет: reports/lab-report.html$(RESET)" + @echo "$(YELLOW)📖 Откройте отчет в браузере:$(RESET)" + @echo " $(BLUE)file://$(PWD)/reports/lab-report.html$(RESET)" + +.PHONY: kubeconfigs +kubeconfigs: ## Получить все kubeconfig файлы + @echo "$(BLUE)📋 Получаем все kubeconfig файлы...$(RESET)" + @mkdir -p reports/kubeconfigs + @docker exec ansible-controller bash -lc 'for cluster in $$(kind get clusters 2>/dev/null || echo ""); do \ + if [ -n "$$cluster" ]; then \ + echo "Получаем kubeconfig для $$cluster..."; \ + kubectl --context kind-$$cluster config view --raw > /ansible/reports/kubeconfigs/kubeconfig-$$cluster.yaml; \ + fi; \ + done' + @echo "$(GREEN)✅ Kubeconfig файлы сохранены в reports/kubeconfigs/$(RESET)" + @if [ -d "reports/kubeconfigs" ] && [ -n "$$(ls reports/kubeconfigs/ 2>/dev/null)" ]; then \ + echo "$(YELLOW)📁 Найденные kubeconfig файлы:$(RESET)"; \ + ls -la reports/kubeconfigs/ | grep -v "^total" | awk '{print " " $$9}'; \ + fi + +.PHONY: open-report +open-report: ## Открыть HTML отчет в браузере + @if [ -f "reports/lab-report.html" ]; then \ + echo "$(BLUE)🌐 Открываем отчет в браузере...$(RESET)"; \ + if command -v open >/dev/null 2>&1; then \ + open reports/lab-report.html; \ + elif command -v xdg-open >/dev/null 2>&1; then \ + xdg-open reports/lab-report.html; \ + else \ + echo "$(YELLOW)⚠️ Откройте отчет вручную: file://$(PWD)/reports/lab-report.html$(RESET)"; \ + fi; \ + echo "$(GREEN)✅ Отчет открыт$(RESET)"; \ + else \ + echo "$(RED)❌ Отчет не найден. Сначала выполните: make report$(RESET)"; \ + fi + +.PHONY: full-test +full-test: ## Полный цикл тестирования с отчетом и kubeconfig + @echo "$(PURPLE)🚀 Запускаем полный цикл тестирования...$(RESET)" + @$(MAKE) lab test + @echo "$(BLUE)📊 Генерируем отчеты...$(RESET)" + @$(MAKE) report + @$(MAKE) kubeconfigs + @echo "$(GREEN)✅ Полный цикл завершен!$(RESET)" + @echo "$(YELLOW)📁 Результаты:$(RESET)" + @echo " $(BLUE)📊 HTML отчет: reports/lab-report.html$(RESET)" + @echo " $(BLUE)📋 Kubeconfig файлы: reports/kubeconfigs/$(RESET)" + @echo "$(YELLOW)🌐 Открыть отчет: make open-report$(RESET)" .PHONY: snapshot snapshot: ## Сохранить снапшот лаборатории diff --git a/README.md b/README.md index 29a3dbe..771c262 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,7 @@ make kube kiali CLUSTER=lab make kube istio CLUSTER=lab make kube grafana CLUSTER=lab make kube prom CLUSTER=lab +make kube kubeconfig CLUSTER=lab # Получить kubeconfig # Управление пресетами make preset list # Список пресетов @@ -112,6 +113,9 @@ make git push # Отправить изменения # Отчеты и мониторинг make report # HTML отчет +make kubeconfigs # Получить все kubeconfig файлы +make open-report # Открыть отчет в браузере +make full-test # Полный цикл с отчетом и kubeconfig make snapshot # Создать снапшот make restore # Восстановить снапшот make cleanup # Очистить лабораторию