diff --git a/Makefile b/Makefile index e96afcc..a4cba6d 100644 --- a/Makefile +++ b/Makefile @@ -133,13 +133,56 @@ menu-lab: check-whiptail ## Меню управления лабораторие 3>&1 1>&2 2>&3); \ if [ $$? -ne 0 ] || [ "$$CHOICE" = "back" ]; then exit 0; fi; \ case "$$CHOICE" in \ - "up") make lab up;; \ - "down") make lab down;; \ - "test") make lab test;; \ - "destroy") make lab destroy;; \ - "status") make lab status;; \ - "logs") make lab logs;; \ - "shell") make lab shell;; \ + "up") \ + echo "$(BLUE)🚀 Запуск лаборатории...$(RESET)"; \ + if make lab up; then \ + whiptail --title "✅ Успех" --msgbox "Лаборатория успешно запущена!" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при запуске лаборатории. Проверьте логи." 8 50; \ + fi;; \ + "down") \ + echo "$(BLUE)🛑 Остановка лаборатории...$(RESET)"; \ + if make lab down; then \ + whiptail --title "✅ Успех" --msgbox "Лаборатория успешно остановлена!" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при остановке лаборатории." 8 50; \ + fi;; \ + "test") \ + echo "$(BLUE)🧪 Тестирование лаборатории...$(RESET)"; \ + if make lab test; then \ + whiptail --title "✅ Успех" --msgbox "Тесты лаборатории прошли успешно!" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Тесты лаборатории не прошли. Проверьте логи." 8 50; \ + fi;; \ + "destroy") \ + if whiptail --title "⚠️ Подтверждение" --yesno "Вы уверены, что хотите уничтожить лабораторию? Это действие необратимо!" 8 50; then \ + echo "$(BLUE)💥 Уничтожение лаборатории...$(RESET)"; \ + if make lab destroy; then \ + whiptail --title "✅ Успех" --msgbox "Лаборатория успешно уничтожена!" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при уничтожении лаборатории." 8 50; \ + fi; \ + fi;; \ + "status") \ + echo "$(BLUE)📊 Проверка статуса лаборатории...$(RESET)"; \ + STATUS_OUTPUT=$$(make lab status 2>&1); \ + if [ $$? -eq 0 ] && [ -n "$$STATUS_OUTPUT" ]; then \ + whiptail --title "📊 Статус лаборатории" --msgbox "$$STATUS_OUTPUT" 15 70; \ + else \ + whiptail --title "⚠️ Предупреждение" --msgbox "Лаборатория не запущена или статус недоступен." 8 50; \ + fi;; \ + "logs") \ + echo "$(BLUE)📝 Получение логов лаборатории...$(RESET)"; \ + LOGS_OUTPUT=$$(make lab logs 2>&1); \ + if [ $$? -eq 0 ] && [ -n "$$LOGS_OUTPUT" ]; then \ + echo "$$LOGS_OUTPUT" | whiptail --title "📝 Логи лаборатории" --scrolltext --textbox /dev/stdin 20 70; \ + else \ + whiptail --title "⚠️ Предупреждение" --msgbox "Логи недоступны. Лаборатория может быть не запущена." 8 50; \ + fi;; \ + "shell") \ + echo "$(BLUE)🐚 Подключение к контейнеру...$(RESET)"; \ + whiptail --title "🐚 Shell" --msgbox "Подключение к контейнеру. Используйте Ctrl+D для выхода." 8 50; \ + make lab shell;; \ esac .PHONY: menu-kube @@ -157,13 +200,61 @@ menu-kube: check-whiptail ## Меню управления Kubernetes 3>&1 1>&2 2>&3); \ if [ $$? -ne 0 ] || [ "$$CHOICE" = "back" ]; then exit 0; fi; \ case "$$CHOICE" in \ - "logs") make kube logs;; \ - "exec") make kube exec;; \ - "port-forward") make kube port-forward;; \ - "kiali") make kube kiali;; \ - "istio") make kube istio;; \ - "grafana") make kube grafana;; \ - "prometheus") make kube prometheus;; \ + "logs") \ + echo "$(BLUE)📝 Получение логов Kubernetes...$(RESET)"; \ + KUBE_LOGS=$$(make kube logs 2>&1); \ + if [ $$? -eq 0 ] && [ -n "$$KUBE_LOGS" ]; then \ + echo "$$KUBE_LOGS" | whiptail --title "📝 Логи Kubernetes" --scrolltext --textbox /dev/stdin 20 70; \ + else \ + whiptail --title "⚠️ Предупреждение" --msgbox "Логи Kubernetes недоступны. Кластер может быть не запущен." 8 50; \ + fi;; \ + "exec") \ + COMMAND=$$(whiptail --inputbox "Введите команду для выполнения в кластере:" 8 50 "kubectl get pods" 3>&1 1>&2 2>&3); \ + if [ $$? -eq 0 ] && [ -n "$$COMMAND" ]; then \ + echo "$(BLUE)🐚 Выполнение команды: $$COMMAND$(RESET)"; \ + EXEC_OUTPUT=$$(make kube exec CMD="$$COMMAND" 2>&1); \ + if [ $$? -eq 0 ] && [ -n "$$EXEC_OUTPUT" ]; then \ + echo "$$EXEC_OUTPUT" | whiptail --title "🐚 Результат выполнения" --scrolltext --textbox /dev/stdin 20 70; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при выполнении команды в кластере." 8 50; \ + fi; \ + fi;; \ + "port-forward") \ + SERVICE=$$(whiptail --inputbox "Введите имя сервиса для проброса портов:" 8 50 "kiali" 3>&1 1>&2 2>&3); \ + PORT=$$(whiptail --inputbox "Введите порт для проброса:" 8 50 "20001" 3>&1 1>&2 2>&3); \ + if [ $$? -eq 0 ] && [ -n "$$SERVICE" ] && [ -n "$$PORT" ]; then \ + echo "$(BLUE)🔗 Проброс портов для $$SERVICE:$$PORT$(RESET)"; \ + whiptail --title "🔗 Port Forward" --msgbox "Проброс портов запущен. Используйте Ctrl+C для остановки." 8 50; \ + make kube port-forward SERVICE="$$SERVICE" PORT="$$PORT"; \ + fi;; \ + "kiali") \ + echo "$(BLUE)🔍 Запуск Kiali Dashboard...$(RESET)"; \ + if make kube kiali; then \ + whiptail --title "✅ Успех" --msgbox "Kiali Dashboard доступен по адресу: http://localhost:20001" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при запуске Kiali Dashboard." 8 50; \ + fi;; \ + "istio") \ + echo "$(BLUE)🌐 Запуск Istio Gateway...$(RESET)"; \ + if make kube istio; then \ + whiptail --title "✅ Успех" --msgbox "Istio Gateway доступен по адресу: http://localhost:8080" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при запуске Istio Gateway." 8 50; \ + fi;; \ + "grafana") \ + echo "$(BLUE)📊 Запуск Grafana Dashboard...$(RESET)"; \ + if make kube grafana; then \ + whiptail --title "✅ Успех" --msgbox "Grafana Dashboard доступен по адресу: http://localhost:3000" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при запуске Grafana Dashboard." 8 50; \ + fi;; \ + "prometheus") \ + echo "$(BLUE)📈 Запуск Prometheus...$(RESET)"; \ + if make kube prometheus; then \ + whiptail --title "✅ Успех" --msgbox "Prometheus доступен по адресу: http://localhost:9090" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при запуске Prometheus." 8 50; \ + fi;; \ esac .PHONY: menu-preset @@ -180,12 +271,62 @@ menu-preset: check-whiptail ## Меню управления пресетами 3>&1 1>&2 2>&3); \ if [ $$? -ne 0 ] || [ "$$CHOICE" = "back" ]; then exit 0; fi; \ case "$$CHOICE" in \ - "list") make preset list;; \ - "create") make preset create;; \ - "edit") make preset edit;; \ - "test") make preset test;; \ - "copy") make preset copy;; \ - "interactive") make preset-create-interactive;; \ + "list") \ + echo "$(BLUE)📋 Получение списка пресетов...$(RESET)"; \ + PRESET_LIST=$$(make preset list 2>&1); \ + if [ $$? -eq 0 ] && [ -n "$$PRESET_LIST" ]; then \ + echo "$$PRESET_LIST" | whiptail --title "📋 Список пресетов" --scrolltext --textbox /dev/stdin 20 70; \ + else \ + whiptail --title "⚠️ Предупреждение" --msgbox "Пресеты не найдены или недоступны." 8 50; \ + fi;; \ + "create") \ + PRESET_NAME=$$(whiptail --inputbox "Введите имя нового пресета:" 8 50 "my-preset" 3>&1 1>&2 2>&3); \ + if [ $$? -eq 0 ] && [ -n "$$PRESET_NAME" ]; then \ + echo "$(BLUE)➕ Создание пресета: $$PRESET_NAME$(RESET)"; \ + if make preset create NAME="$$PRESET_NAME"; then \ + whiptail --title "✅ Успех" --msgbox "Пресет $$PRESET_NAME успешно создан!" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при создании пресета $$PRESET_NAME." 8 50; \ + fi; \ + fi;; \ + "edit") \ + PRESET_NAME=$$(whiptail --inputbox "Введите имя пресета для редактирования:" 8 50 "" 3>&1 1>&2 2>&3); \ + if [ $$? -eq 0 ] && [ -n "$$PRESET_NAME" ]; then \ + echo "$(BLUE)✏️ Редактирование пресета: $$PRESET_NAME$(RESET)"; \ + if make preset edit NAME="$$PRESET_NAME"; then \ + whiptail --title "✅ Успех" --msgbox "Пресет $$PRESET_NAME отредактирован!" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при редактировании пресета $$PRESET_NAME." 8 50; \ + fi; \ + fi;; \ + "test") \ + PRESET_NAME=$$(whiptail --inputbox "Введите имя пресета для тестирования:" 8 50 "" 3>&1 1>&2 2>&3); \ + if [ $$? -eq 0 ] && [ -n "$$PRESET_NAME" ]; then \ + echo "$(BLUE)🧪 Тестирование пресета: $$PRESET_NAME$(RESET)"; \ + if make preset test NAME="$$PRESET_NAME"; then \ + whiptail --title "✅ Успех" --msgbox "Пресет $$PRESET_NAME протестирован успешно!" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при тестировании пресета $$PRESET_NAME." 8 50; \ + fi; \ + fi;; \ + "copy") \ + SOURCE_NAME=$$(whiptail --inputbox "Введите имя исходного пресета:" 8 50 "" 3>&1 1>&2 2>&3); \ + TARGET_NAME=$$(whiptail --inputbox "Введите имя нового пресета:" 8 50 "" 3>&1 1>&2 2>&3); \ + if [ $$? -eq 0 ] && [ -n "$$SOURCE_NAME" ] && [ -n "$$TARGET_NAME" ]; then \ + echo "$(BLUE)📋 Копирование пресета: $$SOURCE_NAME -> $$TARGET_NAME$(RESET)"; \ + if make preset copy SOURCE="$$SOURCE_NAME" TARGET="$$TARGET_NAME"; then \ + whiptail --title "✅ Успех" --msgbox "Пресет скопирован: $$SOURCE_NAME -> $$TARGET_NAME" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при копировании пресета." 8 50; \ + fi; \ + fi;; \ + "interactive") \ + echo "$(BLUE)🎯 Интерактивное создание пресета...$(RESET)"; \ + if make preset-create-interactive; then \ + whiptail --title "✅ Успех" --msgbox "Пресет создан интерактивно!" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при интерактивном создании пресета." 8 50; \ + fi;; \ esac .PHONY: menu-role @@ -204,14 +345,76 @@ menu-role: check-whiptail ## Меню управления ролями 3>&1 1>&2 2>&3); \ if [ $$? -ne 0 ] || [ "$$CHOICE" = "back" ]; then exit 0; fi; \ case "$$CHOICE" in \ - "list") make role list;; \ - "create") make role create;; \ - "edit") make role edit;; \ - "test") make role test;; \ - "lint") make role lint;; \ - "deploy") make role deploy;; \ - "playbook") make role playbook;; \ - "interactive") make role-create-interactive;; \ + "list") \ + echo "$(BLUE)📋 Получение списка ролей...$(RESET)"; \ + ROLE_LIST=$$(make role list 2>&1); \ + if [ $$? -eq 0 ] && [ -n "$$ROLE_LIST" ]; then \ + echo "$$ROLE_LIST" | whiptail --title "📋 Список ролей" --scrolltext --textbox /dev/stdin 20 70; \ + else \ + whiptail --title "⚠️ Предупреждение" --msgbox "Роли не найдены или недоступны." 8 50; \ + fi;; \ + "create") \ + ROLE_NAME=$$(whiptail --inputbox "Введите имя новой роли:" 8 50 "my-role" 3>&1 1>&2 2>&3); \ + if [ $$? -eq 0 ] && [ -n "$$ROLE_NAME" ]; then \ + echo "$(BLUE)➕ Создание роли: $$ROLE_NAME$(RESET)"; \ + if make role create NAME="$$ROLE_NAME"; then \ + whiptail --title "✅ Успех" --msgbox "Роль $$ROLE_NAME успешно создана!" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при создании роли $$ROLE_NAME." 8 50; \ + fi; \ + fi;; \ + "edit") \ + ROLE_NAME=$$(whiptail --inputbox "Введите имя роли для редактирования:" 8 50 "" 3>&1 1>&2 2>&3); \ + if [ $$? -eq 0 ] && [ -n "$$ROLE_NAME" ]; then \ + echo "$(BLUE)✏️ Редактирование роли: $$ROLE_NAME$(RESET)"; \ + if make role edit NAME="$$ROLE_NAME"; then \ + whiptail --title "✅ Успех" --msgbox "Роль $$ROLE_NAME отредактирована!" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при редактировании роли $$ROLE_NAME." 8 50; \ + fi; \ + fi;; \ + "test") \ + ROLE_NAME=$$(whiptail --inputbox "Введите имя роли для тестирования:" 8 50 "" 3>&1 1>&2 2>&3); \ + if [ $$? -eq 0 ] && [ -n "$$ROLE_NAME" ]; then \ + echo "$(BLUE)🧪 Тестирование роли: $$ROLE_NAME$(RESET)"; \ + if make role test NAME="$$ROLE_NAME"; then \ + whiptail --title "✅ Успех" --msgbox "Роль $$ROLE_NAME протестирована успешно!" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при тестировании роли $$ROLE_NAME." 8 50; \ + fi; \ + fi;; \ + "lint") \ + echo "$(BLUE)🔍 Проверка синтаксиса ролей...$(RESET)"; \ + LINT_OUTPUT=$$(make role lint 2>&1); \ + if [ $$? -eq 0 ]; then \ + whiptail --title "✅ Успех" --msgbox "Проверка синтаксиса ролей прошла успешно!" 8 50; \ + else \ + echo "$$LINT_OUTPUT" | whiptail --title "❌ Ошибки синтаксиса" --scrolltext --textbox /dev/stdin 20 70; \ + fi;; \ + "deploy") \ + echo "$(BLUE)🚀 Развертывание ролей...$(RESET)"; \ + if make role deploy; then \ + whiptail --title "✅ Успех" --msgbox "Роли успешно развернуты!" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при развертывании ролей." 8 50; \ + fi;; \ + "playbook") \ + ROLE_NAME=$$(whiptail --inputbox "Введите имя роли для управления playbooks:" 8 50 "" 3>&1 1>&2 2>&3); \ + if [ $$? -eq 0 ] && [ -n "$$ROLE_NAME" ]; then \ + echo "$(BLUE)📝 Управление playbooks роли: $$ROLE_NAME$(RESET)"; \ + if make role playbook NAME="$$ROLE_NAME"; then \ + whiptail --title "✅ Успех" --msgbox "Playbooks роли $$ROLE_NAME обработаны!" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при обработке playbooks роли $$ROLE_NAME." 8 50; \ + fi; \ + fi;; \ + "interactive") \ + echo "$(BLUE)🎯 Интерактивное создание роли...$(RESET)"; \ + if make role-create-interactive; then \ + whiptail --title "✅ Успех" --msgbox "Роль создана интерактивно!" 8 50; \ + else \ + whiptail --title "❌ Ошибка" --msgbox "Ошибка при интерактивном создании роли." 8 50; \ + fi;; \ esac .PHONY: menu-vault