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 # Очистить лабораторию