From a9fcee13ef591c087258337f69972511a9213461 Mon Sep 17 00:00:00 2001 From: Sergey Antropoff Date: Wed, 22 Oct 2025 15:40:02 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=D1=8B=20?= =?UTF-8?q?emoji=20=D0=B8=D0=B7=20whiptail=20=D0=B8=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D0=BA=D0=B0=20=D0=B8=D0=BD=D0=B8=D1=86=D0=B8=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20=D0=B2=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=83=20=D0=BF=D0=BE=20=D1=83?= =?UTF-8?q?=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Убраны все emoji из whiptail диалогов для лучшей совместимости - Добавлена команда check-init-and-menu как команда по умолчанию - Автоматическая проверка инициализации при запуске make - Сохранены цвета в консольном выводе для лучшей читаемости Изменения в whiptail: - Убраны emoji из заголовков диалогов - Убраны emoji из сообщений - Сохранена функциональность всех диалогов - Улучшена совместимость с разными терминалами Команда по умолчанию: - make без параметров теперь проверяет инициализацию - Автоматический запуск инициализации при первом запуске - Переход к главному меню после инициализации - Нет повторной инициализации после настройки Преимущества: - Лучшая совместимость с терминалами - Автоматическая инициализация при первом запуске - Сохранены цвета в консольном выводе - Упрощенный интерфейс whiptail Автор: Сергей Антропов Сайт: https://devops.org.ru --- Makefile | 155 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 79 insertions(+), 76 deletions(-) diff --git a/Makefile b/Makefile index 1696a9a..380422f 100644 --- a/Makefile +++ b/Makefile @@ -49,7 +49,7 @@ RESET := \033[0m # ============================================================================= # Команда по умолчанию - интерактивное меню -.DEFAULT_GOAL := menu +.DEFAULT_GOAL := check-init-and-menu .PHONY: help help: ## Показать справку по всем командам @@ -80,18 +80,18 @@ menu: check-whiptail check-init ## Интерактивное главное м @while true; do \ CHOICE=$$(whiptail --title "Ansible Template - Универсальная лаборатория" \ --menu "Выберите действие:" 20 60 12 \ - "lab" "🧪 Управление лабораторией" \ - "kube" "☸️ Управление Kubernetes" \ - "preset" "📋 Управление пресетами" \ - "role" "🎭 Управление ролями" \ - "vault" "🔐 Управление vault" \ - "report" "📊 Генерация отчетов" \ - "lint" "🔍 Проверка синтаксиса" \ - "snapshot" "📸 Снимки лаборатории" \ - "cleanup" "🧹 Очистка данных" \ - "docs" "📚 Документация" \ - "help" "❓ Помощь и справка" \ - "exit" "🚪 Выход" \ + "lab" "Управление лабораторией" \ + "kube" "Управление Kubernetes" \ + "preset" "Управление пресетами" \ + "role" "Управление ролями" \ + "vault" "Управление vault" \ + "report" "Генерация отчетов" \ + "lint" "Проверка синтаксиса" \ + "snapshot" "Снимки лаборатории" \ + "cleanup" "Очистка данных" \ + "docs" "Документация" \ + "help" "Помощь и справка" \ + "exit" "Выход" \ 3>&1 1>&2 2>&3); \ if [ $$? -ne 0 ] || [ "$$CHOICE" = "exit" ]; then \ echo "$(YELLOW)👋 До свидания!$(RESET)"; \ @@ -116,6 +116,9 @@ menu: check-whiptail check-init ## Интерактивное главное м # ПРОВЕРКИ ИНИЦИАЛИЗАЦИИ # ============================================================================= +.PHONY: check-init-and-menu +check-init-and-menu: check-init menu ## Проверить инициализацию и запустить меню + .PHONY: check-init check-init: ## Проверить инициализацию проекта @if [ ! -f .env ] || [ ! -f vault/.vault ] || [ ! -d molecule/presets ]; then \ @@ -259,74 +262,74 @@ init-interactive: ## Интерактивная инициализация пр .PHONY: menu-lab menu-lab: check-whiptail ## Меню управления лабораторией - @CHOICE=$$(whiptail --title "🧪 Управление лабораторией" \ + @CHOICE=$$(whiptail --title "Управление лабораторией" \ --menu "Выберите действие:" 15 50 8 \ - "up" "🚀 Запустить лабораторию" \ - "down" "🛑 Остановить лабораторию" \ - "test" "🧪 Тестировать лабораторию" \ - "destroy" "💥 Уничтожить лабораторию" \ - "status" "📊 Статус лаборатории" \ - "logs" "📝 Просмотр логов" \ - "shell" "🐚 Подключиться к контейнеру" \ - "back" "⬅️ Назад" \ + "up" "Запустить лабораторию" \ + "down" "Остановить лабораторию" \ + "test" "Тестировать лабораторию" \ + "destroy" "Уничтожить лабораторию" \ + "status" "Статус лаборатории" \ + "logs" "Просмотр логов" \ + "shell" "Подключиться к контейнеру" \ + "back" "Назад" \ 3>&1 1>&2 2>&3); \ if [ $$? -ne 0 ] || [ "$$CHOICE" = "back" ]; then exit 0; fi; \ case "$$CHOICE" in \ "up") \ echo "$(BLUE)🚀 Запуск лаборатории...$(RESET)"; \ if make lab up; then \ - whiptail --title "✅ Успех" --msgbox "Лаборатория успешно запущена!" 8 50; \ + whiptail --title "Успех" --msgbox "Лаборатория успешно запущена!" 8 50; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Ошибка при запуске лаборатории. Проверьте логи." 8 50; \ + whiptail --title "Ошибка" --msgbox "Ошибка при запуске лаборатории. Проверьте логи." 8 50; \ fi;; \ "down") \ echo "$(BLUE)🛑 Остановка лаборатории...$(RESET)"; \ if make lab down; then \ - whiptail --title "✅ Успех" --msgbox "Лаборатория успешно остановлена!" 8 50; \ + whiptail --title "Успех" --msgbox "Лаборатория успешно остановлена!" 8 50; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Ошибка при остановке лаборатории." 8 50; \ + whiptail --title "Ошибка" --msgbox "Ошибка при остановке лаборатории." 8 50; \ fi;; \ "test") \ echo "$(BLUE)🧪 Тестирование лаборатории...$(RESET)"; \ if make lab test; then \ - whiptail --title "✅ Успех" --msgbox "Тесты лаборатории прошли успешно!" 8 50; \ + whiptail --title "Успех" --msgbox "Тесты лаборатории прошли успешно!" 8 50; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Тесты лаборатории не прошли. Проверьте логи." 8 50; \ + whiptail --title "Ошибка" --msgbox "Тесты лаборатории не прошли. Проверьте логи." 8 50; \ fi;; \ "destroy") \ - if whiptail --title "⚠️ Подтверждение" --yesno "Вы уверены, что хотите уничтожить лабораторию? Это действие необратимо!" 8 50; then \ + if whiptail --title "Подтверждение" --yesno "Вы уверены, что хотите уничтожить лабораторию? Это действие необратимо!" 8 50; then \ echo "$(BLUE)💥 Уничтожение лаборатории...$(RESET)"; \ if make lab destroy; then \ - whiptail --title "✅ Успех" --msgbox "Лаборатория успешно уничтожена!" 8 50; \ + whiptail --title "Успех" --msgbox "Лаборатория успешно уничтожена!" 8 50; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Ошибка при уничтожении лаборатории." 8 50; \ + 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; \ + whiptail --title "Статус лаборатории" --msgbox "$$STATUS_OUTPUT" 15 70; \ else \ - whiptail --title "⚠️ Предупреждение" --msgbox "Лаборатория не запущена или статус недоступен." 8 50; \ + 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; \ + echo "$$LOGS_OUTPUT" | whiptail --title "Логи лаборатории" --scrolltext --textbox /dev/stdin 20 70; \ else \ - whiptail --title "⚠️ Предупреждение" --msgbox "Логи недоступны. Лаборатория может быть не запущена." 8 50; \ + whiptail --title "Предупреждение" --msgbox "Логи недоступны. Лаборатория может быть не запущена." 8 50; \ fi;; \ "shell") \ echo "$(BLUE)🐚 Подключение к контейнеру...$(RESET)"; \ - whiptail --title "🐚 Shell" --msgbox "Подключение к контейнеру. Используйте Ctrl+D для выхода." 8 50; \ + whiptail --title "Shell" --msgbox "Подключение к контейнеру. Используйте Ctrl+D для выхода." 8 50; \ make lab shell;; \ esac .PHONY: menu-kube menu-kube: check-whiptail ## Меню управления Kubernetes - @CHOICE=$$(whiptail --title "☸️ Управление Kubernetes" \ + @CHOICE=$$(whiptail --title "Управление Kubernetes" \ --menu "Выберите действие:" 15 50 8 \ "logs" "📝 Просмотр логов" \ "exec" "🐚 Выполнить команду" \ @@ -343,9 +346,9 @@ menu-kube: check-whiptail ## Меню управления Kubernetes 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; \ + echo "$$KUBE_LOGS" | whiptail --title "Логи Kubernetes" --scrolltext --textbox /dev/stdin 20 70; \ else \ - whiptail --title "⚠️ Предупреждение" --msgbox "Логи Kubernetes недоступны. Кластер может быть не запущен." 8 50; \ + whiptail --title "Предупреждение" --msgbox "Логи Kubernetes недоступны. Кластер может быть не запущен." 8 50; \ fi;; \ "exec") \ COMMAND=$$(whiptail --inputbox "Введите команду для выполнения в кластере:" 8 50 "kubectl get pods" 3>&1 1>&2 2>&3); \ @@ -353,9 +356,9 @@ menu-kube: check-whiptail ## Меню управления Kubernetes 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; \ + echo "$$EXEC_OUTPUT" | whiptail --title "Результат выполнения" --scrolltext --textbox /dev/stdin 20 70; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Ошибка при выполнении команды в кластере." 8 50; \ + whiptail --title "Ошибка" --msgbox "Ошибка при выполнении команды в кластере." 8 50; \ fi; \ fi;; \ "port-forward") \ @@ -369,30 +372,30 @@ menu-kube: check-whiptail ## Меню управления Kubernetes "kiali") \ echo "$(BLUE)🔍 Запуск Kiali Dashboard...$(RESET)"; \ if make kube kiali; then \ - whiptail --title "✅ Успех" --msgbox "Kiali Dashboard доступен по адресу: http://localhost:20001" 8 50; \ + whiptail --title "Успех" --msgbox "Kiali Dashboard доступен по адресу: http://localhost:20001" 8 50; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Ошибка при запуске Kiali Dashboard." 8 50; \ + 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; \ + whiptail --title "Успех" --msgbox "Istio Gateway доступен по адресу: http://localhost:8080" 8 50; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Ошибка при запуске Istio Gateway." 8 50; \ + 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; \ + whiptail --title "Успех" --msgbox "Grafana Dashboard доступен по адресу: http://localhost:3000" 8 50; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Ошибка при запуске Grafana Dashboard." 8 50; \ + 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; \ + whiptail --title "Успех" --msgbox "Prometheus доступен по адресу: http://localhost:9090" 8 50; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Ошибка при запуске Prometheus." 8 50; \ + whiptail --title "Ошибка" --msgbox "Ошибка при запуске Prometheus." 8 50; \ fi;; \ esac @@ -415,7 +418,7 @@ menu-preset: check-whiptail ## Меню управления пресетами if [ $$? -eq 0 ] && [ -n "$$PRESET_LIST" ]; then \ echo "$$PRESET_LIST" | whiptail --title "📋 Список пресетов" --scrolltext --textbox /dev/stdin 20 70; \ else \ - whiptail --title "⚠️ Предупреждение" --msgbox "Пресеты не найдены или недоступны." 8 50; \ + whiptail --title "Предупреждение" --msgbox "Пресеты не найдены или недоступны." 8 50; \ fi;; \ "create") \ echo "$(CYAN)🎯 Создание нового пресета лаборатории$(RESET)"; \ @@ -460,15 +463,15 @@ menu-preset: check-whiptail ## Меню управления пресетами echo " istio: $$(echo $$FEATURES | grep -q istio && echo 'true' || echo 'false')" >> molecule/presets/$$PRESET_NAME.yml; \ echo " monitoring: $$(echo $$FEATURES | grep -q monitoring && echo 'true' || echo 'false')" >> molecule/presets/$$PRESET_NAME.yml; \ echo " chaos: $$(echo $$FEATURES | grep -q chaos && echo 'true' || echo 'false')" >> molecule/presets/$$PRESET_NAME.yml; \ - whiptail --title "✅ Успех" --msgbox "Пресет $$PRESET_NAME создан: molecule/presets/$$PRESET_NAME.yml\n\nИспользование: make lab up PRESET=$$PRESET_NAME" 10 70;; \ + whiptail --title "Успех" --msgbox "Пресет $$PRESET_NAME создан: molecule/presets/$$PRESET_NAME.yml\n\nИспользование: make lab up PRESET=$$PRESET_NAME" 10 70;; \ "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; \ + whiptail --title "Успех" --msgbox "Пресет $$PRESET_NAME отредактирован!" 8 50; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Ошибка при редактировании пресета $$PRESET_NAME." 8 50; \ + whiptail --title "Ошибка" --msgbox "Ошибка при редактировании пресета $$PRESET_NAME." 8 50; \ fi; \ fi;; \ "test") \ @@ -476,9 +479,9 @@ menu-preset: check-whiptail ## Меню управления пресетами 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; \ + whiptail --title "Успех" --msgbox "Пресет $$PRESET_NAME протестирован успешно!" 8 50; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Ошибка при тестировании пресета $$PRESET_NAME." 8 50; \ + whiptail --title "Ошибка" --msgbox "Ошибка при тестировании пресета $$PRESET_NAME." 8 50; \ fi; \ fi;; \ "copy") \ @@ -487,17 +490,17 @@ menu-preset: check-whiptail ## Меню управления пресетами 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; \ + whiptail --title "Успех" --msgbox "Пресет скопирован: $$SOURCE_NAME -> $$TARGET_NAME" 8 50; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Ошибка при копировании пресета." 8 50; \ + whiptail --title "Ошибка" --msgbox "Ошибка при копировании пресета." 8 50; \ fi; \ fi;; \ "interactive") \ echo "$(BLUE)🎯 Интерактивное создание пресета...$(RESET)"; \ if make preset-create-interactive; then \ - whiptail --title "✅ Успех" --msgbox "Пресет создан интерактивно!" 8 50; \ + whiptail --title "Успех" --msgbox "Пресет создан интерактивно!" 8 50; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Ошибка при интерактивном создании пресета." 8 50; \ + whiptail --title "Ошибка" --msgbox "Ошибка при интерактивном создании пресета." 8 50; \ fi;; \ esac @@ -522,7 +525,7 @@ menu-role: check-whiptail ## Меню управления ролями if [ $$? -eq 0 ] && [ -n "$$ROLE_LIST" ]; then \ echo "$$ROLE_LIST" | whiptail --title "📋 Список ролей" --scrolltext --textbox /dev/stdin 20 70; \ else \ - whiptail --title "⚠️ Предупреждение" --msgbox "Роли не найдены или недоступны." 8 50; \ + whiptail --title "Предупреждение" --msgbox "Роли не найдены или недоступны." 8 50; \ fi;; \ "create") \ echo "$(CYAN)🎯 Создание новой Ansible роли$(RESET)"; \ @@ -620,15 +623,15 @@ menu-role: check-whiptail ## Меню управления ролями echo " systemd:" >> roles/$$ROLE_NAME/handlers/main.yml; \ echo " name: \"{{ $$ROLE_NAME_service }}\"" >> roles/$$ROLE_NAME/handlers/main.yml; \ echo " state: restarted" >> roles/$$ROLE_NAME/handlers/main.yml; \ - whiptail --title "✅ Успех" --msgbox "Роль $$ROLE_NAME создана в roles/$$ROLE_NAME/\n\nСтруктура:\n- tasks/ (основные задачи)\n- handlers/ (обработчики)\n- defaults/ (переменные)\n- meta/ (метаданные)\n\nИспользование: make role test NAME=$$ROLE_NAME" 15 70;; \ + whiptail --title "Успех" --msgbox "Роль $$ROLE_NAME создана в roles/$$ROLE_NAME/\n\nСтруктура:\n- tasks/ (основные задачи)\n- handlers/ (обработчики)\n- defaults/ (переменные)\n- meta/ (метаданные)\n\nИспользование: make role test NAME=$$ROLE_NAME" 15 70;; \ "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; \ + whiptail --title "Успех" --msgbox "Роль $$ROLE_NAME отредактирована!" 8 50; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Ошибка при редактировании роли $$ROLE_NAME." 8 50; \ + whiptail --title "Ошибка" --msgbox "Ошибка при редактировании роли $$ROLE_NAME." 8 50; \ fi; \ fi;; \ "test") \ @@ -636,42 +639,42 @@ menu-role: check-whiptail ## Меню управления ролями 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; \ + whiptail --title "Успех" --msgbox "Роль $$ROLE_NAME протестирована успешно!" 8 50; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Ошибка при тестировании роли $$ROLE_NAME." 8 50; \ + 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; \ + 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; \ + whiptail --title "Успех" --msgbox "Роли успешно развернуты!" 8 50; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Ошибка при развертывании ролей." 8 50; \ + 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; \ + whiptail --title "Успех" --msgbox "Playbooks роли $$ROLE_NAME обработаны!" 8 50; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Ошибка при обработке playbooks роли $$ROLE_NAME." 8 50; \ + 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; \ + whiptail --title "Успех" --msgbox "Роль создана интерактивно!" 8 50; \ else \ - whiptail --title "❌ Ошибка" --msgbox "Ошибка при интерактивном создании роли." 8 50; \ + whiptail --title "Ошибка" --msgbox "Ошибка при интерактивном создании роли." 8 50; \ fi;; \ esac @@ -697,7 +700,7 @@ menu-vault: check-whiptail ## Меню управления vault .PHONY: menu-report menu-report: check-whiptail ## Меню генерации отчетов - @CHOICE=$$(whiptail --title "📊 Генерация отчетов" \ + @CHOICE=$$(whiptail --title "Генерация отчетов" \ --menu "Выберите действие:" 15 50 8 \ "html" "📄 HTML отчет" \ "json" "📋 JSON отчет" \ @@ -828,16 +831,16 @@ menu-help: check-whiptail ## Меню помощи и справки whiptail --title "🚀 Быстрый старт" \ --msgbox "Быстрый старт:\n\n1. Инициализация проекта:\n make init\n\n2. Запуск лаборатории:\n make lab up\n\n3. Создание роли:\n make role-create-interactive\n\n4. Создание пресета:\n make preset-create-interactive\n\n5. Генерация отчета:\n make report\n\nВсе команды доступны через интерактивное меню!" 20 70;; \ "commands") \ - whiptail --title "⌨️ Список команд" \ + whiptail --title "Список команд" \ --msgbox "Основные команды:\n\n• make - Главное меню\n• make help - Справка\n• make init - Инициализация\n• make lab up - Запуск лаборатории\n• make lab down - Остановка\n• make lab test - Тестирование\n• make role list - Список ролей\n• make preset list - Список пресетов\n• make vault view - Просмотр секретов\n• make report - Генерация отчета\n• make lint - Проверка синтаксиса\n• make cleanup - Очистка данных" 20 70;; \ "examples") \ whiptail --title "💡 Примеры использования" \ --msgbox "Примеры использования:\n\n1. Создание роли nginx:\n make role-create-interactive\n\n2. Создание пресета для 5 хостов:\n make preset-create-interactive\n\n3. Запуск лаборатории с пресетом:\n make lab up PRESET=my-preset\n\n4. Тестирование роли:\n make role test NAME=nginx\n\n5. Генерация HTML отчета:\n make report" 20 70;; \ "troubleshooting") \ - whiptail --title "🔧 Решение проблем" \ + whiptail --title "Решение проблем" \ --msgbox "Решение проблем:\n\n• whiptail не найден:\n make check-whiptail\n\n• Docker не запускается:\n make lab down && make lab up\n\n• Проблемы с vault:\n make vault view\n\n• Очистка всех данных:\n make cleanup\n\n• Проверка синтаксиса:\n make lint\n\n• Просмотр логов:\n make lab logs" 20 70;; \ "about") \ - whiptail --title "ℹ️ О проекте" \ + whiptail --title "О проекте" \ --msgbox "Ansible Template v$(VERSION)\n\nУниверсальная лаборатория для тестирования Ansible ролей и playbooks с поддержкой Docker, Kubernetes, и множества готовых пресетов.\n\nАвтор: $(AUTHOR)\nСайт: $(SITE)\nЛицензия: MIT\n\nОсобенности:\n• 🎯 Интерактивный интерфейс\n• 🧪 Универсальная лаборатория\n• ☸️ Kubernetes поддержка\n• 📋 21 готовый пресет\n• 🔐 Безопасность vault\n• 📊 Красивые отчеты" 20 70;; \ esac