feat: Убраны emoji из whiptail и добавлена проверка инициализации в команду по умолчанию

- Убраны все emoji из whiptail диалогов для лучшей совместимости
- Добавлена команда check-init-and-menu как команда по умолчанию
- Автоматическая проверка инициализации при запуске make
- Сохранены цвета в консольном выводе для лучшей читаемости

Изменения в whiptail:
- Убраны emoji из заголовков диалогов
- Убраны emoji из сообщений
- Сохранена функциональность всех диалогов
- Улучшена совместимость с разными терминалами

Команда по умолчанию:
- make без параметров теперь проверяет инициализацию
- Автоматический запуск инициализации при первом запуске
- Переход к главному меню после инициализации
- Нет повторной инициализации после настройки

Преимущества:
- Лучшая совместимость с терминалами
- Автоматическая инициализация при первом запуске
- Сохранены цвета в консольном выводе
- Упрощенный интерфейс whiptail

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
2025-10-22 15:40:02 +03:00
parent 1909746098
commit a9fcee13ef

155
Makefile
View File

@@ -49,7 +49,7 @@ RESET := \033[0m
# ============================================================================= # =============================================================================
# Команда по умолчанию - интерактивное меню # Команда по умолчанию - интерактивное меню
.DEFAULT_GOAL := menu .DEFAULT_GOAL := check-init-and-menu
.PHONY: help .PHONY: help
help: ## Показать справку по всем командам help: ## Показать справку по всем командам
@@ -80,18 +80,18 @@ menu: check-whiptail check-init ## Интерактивное главное м
@while true; do \ @while true; do \
CHOICE=$$(whiptail --title "Ansible Template - Универсальная лаборатория" \ CHOICE=$$(whiptail --title "Ansible Template - Универсальная лаборатория" \
--menu "Выберите действие:" 20 60 12 \ --menu "Выберите действие:" 20 60 12 \
"lab" "🧪 Управление лабораторией" \ "lab" "Управление лабораторией" \
"kube" "☸️ Управление Kubernetes" \ "kube" "Управление Kubernetes" \
"preset" "📋 Управление пресетами" \ "preset" "Управление пресетами" \
"role" "🎭 Управление ролями" \ "role" "Управление ролями" \
"vault" "🔐 Управление vault" \ "vault" "Управление vault" \
"report" "📊 Генерация отчетов" \ "report" "Генерация отчетов" \
"lint" "🔍 Проверка синтаксиса" \ "lint" "Проверка синтаксиса" \
"snapshot" "📸 Снимки лаборатории" \ "snapshot" "Снимки лаборатории" \
"cleanup" "🧹 Очистка данных" \ "cleanup" "Очистка данных" \
"docs" "📚 Документация" \ "docs" "Документация" \
"help" "Помощь и справка" \ "help" "Помощь и справка" \
"exit" "🚪 Выход" \ "exit" "Выход" \
3>&1 1>&2 2>&3); \ 3>&1 1>&2 2>&3); \
if [ $$? -ne 0 ] || [ "$$CHOICE" = "exit" ]; then \ if [ $$? -ne 0 ] || [ "$$CHOICE" = "exit" ]; then \
echo "$(YELLOW)👋 До свидания!$(RESET)"; \ 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 .PHONY: check-init
check-init: ## Проверить инициализацию проекта check-init: ## Проверить инициализацию проекта
@if [ ! -f .env ] || [ ! -f vault/.vault ] || [ ! -d molecule/presets ]; then \ @if [ ! -f .env ] || [ ! -f vault/.vault ] || [ ! -d molecule/presets ]; then \
@@ -259,74 +262,74 @@ init-interactive: ## Интерактивная инициализация пр
.PHONY: menu-lab .PHONY: menu-lab
menu-lab: check-whiptail ## Меню управления лабораторией menu-lab: check-whiptail ## Меню управления лабораторией
@CHOICE=$$(whiptail --title "🧪 Управление лабораторией" \ @CHOICE=$$(whiptail --title "Управление лабораторией" \
--menu "Выберите действие:" 15 50 8 \ --menu "Выберите действие:" 15 50 8 \
"up" "🚀 Запустить лабораторию" \ "up" "Запустить лабораторию" \
"down" "🛑 Остановить лабораторию" \ "down" "Остановить лабораторию" \
"test" "🧪 Тестировать лабораторию" \ "test" "Тестировать лабораторию" \
"destroy" "💥 Уничтожить лабораторию" \ "destroy" "Уничтожить лабораторию" \
"status" "📊 Статус лаборатории" \ "status" "Статус лаборатории" \
"logs" "📝 Просмотр логов" \ "logs" "Просмотр логов" \
"shell" "🐚 Подключиться к контейнеру" \ "shell" "Подключиться к контейнеру" \
"back" "⬅️ Назад" \ "back" "Назад" \
3>&1 1>&2 2>&3); \ 3>&1 1>&2 2>&3); \
if [ $$? -ne 0 ] || [ "$$CHOICE" = "back" ]; then exit 0; fi; \ if [ $$? -ne 0 ] || [ "$$CHOICE" = "back" ]; then exit 0; fi; \
case "$$CHOICE" in \ case "$$CHOICE" in \
"up") \ "up") \
echo "$(BLUE)🚀 Запуск лаборатории...$(RESET)"; \ echo "$(BLUE)🚀 Запуск лаборатории...$(RESET)"; \
if make lab up; then \ if make lab up; then \
whiptail --title "Успех" --msgbox "Лаборатория успешно запущена!" 8 50; \ whiptail --title "Успех" --msgbox "Лаборатория успешно запущена!" 8 50; \
else \ else \
whiptail --title "Ошибка" --msgbox "Ошибка при запуске лаборатории. Проверьте логи." 8 50; \ whiptail --title "Ошибка" --msgbox "Ошибка при запуске лаборатории. Проверьте логи." 8 50; \
fi;; \ fi;; \
"down") \ "down") \
echo "$(BLUE)🛑 Остановка лаборатории...$(RESET)"; \ echo "$(BLUE)🛑 Остановка лаборатории...$(RESET)"; \
if make lab down; then \ if make lab down; then \
whiptail --title "Успех" --msgbox "Лаборатория успешно остановлена!" 8 50; \ whiptail --title "Успех" --msgbox "Лаборатория успешно остановлена!" 8 50; \
else \ else \
whiptail --title "Ошибка" --msgbox "Ошибка при остановке лаборатории." 8 50; \ whiptail --title "Ошибка" --msgbox "Ошибка при остановке лаборатории." 8 50; \
fi;; \ fi;; \
"test") \ "test") \
echo "$(BLUE)🧪 Тестирование лаборатории...$(RESET)"; \ echo "$(BLUE)🧪 Тестирование лаборатории...$(RESET)"; \
if make lab test; then \ if make lab test; then \
whiptail --title "Успех" --msgbox "Тесты лаборатории прошли успешно!" 8 50; \ whiptail --title "Успех" --msgbox "Тесты лаборатории прошли успешно!" 8 50; \
else \ else \
whiptail --title "Ошибка" --msgbox "Тесты лаборатории не прошли. Проверьте логи." 8 50; \ whiptail --title "Ошибка" --msgbox "Тесты лаборатории не прошли. Проверьте логи." 8 50; \
fi;; \ fi;; \
"destroy") \ "destroy") \
if whiptail --title "⚠️ Подтверждение" --yesno "Вы уверены, что хотите уничтожить лабораторию? Это действие необратимо!" 8 50; then \ if whiptail --title "Подтверждение" --yesno "Вы уверены, что хотите уничтожить лабораторию? Это действие необратимо!" 8 50; then \
echo "$(BLUE)💥 Уничтожение лаборатории...$(RESET)"; \ echo "$(BLUE)💥 Уничтожение лаборатории...$(RESET)"; \
if make lab destroy; then \ if make lab destroy; then \
whiptail --title "Успех" --msgbox "Лаборатория успешно уничтожена!" 8 50; \ whiptail --title "Успех" --msgbox "Лаборатория успешно уничтожена!" 8 50; \
else \ else \
whiptail --title "Ошибка" --msgbox "Ошибка при уничтожении лаборатории." 8 50; \ whiptail --title "Ошибка" --msgbox "Ошибка при уничтожении лаборатории." 8 50; \
fi; \ fi; \
fi;; \ fi;; \
"status") \ "status") \
echo "$(BLUE)📊 Проверка статуса лаборатории...$(RESET)"; \ echo "$(BLUE)📊 Проверка статуса лаборатории...$(RESET)"; \
STATUS_OUTPUT=$$(make lab status 2>&1); \ STATUS_OUTPUT=$$(make lab status 2>&1); \
if [ $$? -eq 0 ] && [ -n "$$STATUS_OUTPUT" ]; then \ if [ $$? -eq 0 ] && [ -n "$$STATUS_OUTPUT" ]; then \
whiptail --title "📊 Статус лаборатории" --msgbox "$$STATUS_OUTPUT" 15 70; \ whiptail --title "Статус лаборатории" --msgbox "$$STATUS_OUTPUT" 15 70; \
else \ else \
whiptail --title "⚠️ Предупреждение" --msgbox "Лаборатория не запущена или статус недоступен." 8 50; \ whiptail --title "Предупреждение" --msgbox "Лаборатория не запущена или статус недоступен." 8 50; \
fi;; \ fi;; \
"logs") \ "logs") \
echo "$(BLUE)📝 Получение логов лаборатории...$(RESET)"; \ echo "$(BLUE)📝 Получение логов лаборатории...$(RESET)"; \
LOGS_OUTPUT=$$(make lab logs 2>&1); \ LOGS_OUTPUT=$$(make lab logs 2>&1); \
if [ $$? -eq 0 ] && [ -n "$$LOGS_OUTPUT" ]; then \ 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 \ else \
whiptail --title "⚠️ Предупреждение" --msgbox "Логи недоступны. Лаборатория может быть не запущена." 8 50; \ whiptail --title "Предупреждение" --msgbox "Логи недоступны. Лаборатория может быть не запущена." 8 50; \
fi;; \ fi;; \
"shell") \ "shell") \
echo "$(BLUE)🐚 Подключение к контейнеру...$(RESET)"; \ echo "$(BLUE)🐚 Подключение к контейнеру...$(RESET)"; \
whiptail --title "🐚 Shell" --msgbox "Подключение к контейнеру. Используйте Ctrl+D для выхода." 8 50; \ whiptail --title "Shell" --msgbox "Подключение к контейнеру. Используйте Ctrl+D для выхода." 8 50; \
make lab shell;; \ make lab shell;; \
esac esac
.PHONY: menu-kube .PHONY: menu-kube
menu-kube: check-whiptail ## Меню управления Kubernetes menu-kube: check-whiptail ## Меню управления Kubernetes
@CHOICE=$$(whiptail --title "☸️ Управление Kubernetes" \ @CHOICE=$$(whiptail --title "Управление Kubernetes" \
--menu "Выберите действие:" 15 50 8 \ --menu "Выберите действие:" 15 50 8 \
"logs" "📝 Просмотр логов" \ "logs" "📝 Просмотр логов" \
"exec" "🐚 Выполнить команду" \ "exec" "🐚 Выполнить команду" \
@@ -343,9 +346,9 @@ menu-kube: check-whiptail ## Меню управления Kubernetes
echo "$(BLUE)📝 Получение логов Kubernetes...$(RESET)"; \ echo "$(BLUE)📝 Получение логов Kubernetes...$(RESET)"; \
KUBE_LOGS=$$(make kube logs 2>&1); \ KUBE_LOGS=$$(make kube logs 2>&1); \
if [ $$? -eq 0 ] && [ -n "$$KUBE_LOGS" ]; then \ 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 \ else \
whiptail --title "⚠️ Предупреждение" --msgbox "Логи Kubernetes недоступны. Кластер может быть не запущен." 8 50; \ whiptail --title "Предупреждение" --msgbox "Логи Kubernetes недоступны. Кластер может быть не запущен." 8 50; \
fi;; \ fi;; \
"exec") \ "exec") \
COMMAND=$$(whiptail --inputbox "Введите команду для выполнения в кластере:" 8 50 "kubectl get pods" 3>&1 1>&2 2>&3); \ 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)"; \ echo "$(BLUE)🐚 Выполнение команды: $$COMMAND$(RESET)"; \
EXEC_OUTPUT=$$(make kube exec CMD="$$COMMAND" 2>&1); \ EXEC_OUTPUT=$$(make kube exec CMD="$$COMMAND" 2>&1); \
if [ $$? -eq 0 ] && [ -n "$$EXEC_OUTPUT" ]; then \ 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 \ else \
whiptail --title "Ошибка" --msgbox "Ошибка при выполнении команды в кластере." 8 50; \ whiptail --title "Ошибка" --msgbox "Ошибка при выполнении команды в кластере." 8 50; \
fi; \ fi; \
fi;; \ fi;; \
"port-forward") \ "port-forward") \
@@ -369,30 +372,30 @@ menu-kube: check-whiptail ## Меню управления Kubernetes
"kiali") \ "kiali") \
echo "$(BLUE)🔍 Запуск Kiali Dashboard...$(RESET)"; \ echo "$(BLUE)🔍 Запуск Kiali Dashboard...$(RESET)"; \
if make kube kiali; then \ 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 \ else \
whiptail --title "Ошибка" --msgbox "Ошибка при запуске Kiali Dashboard." 8 50; \ whiptail --title "Ошибка" --msgbox "Ошибка при запуске Kiali Dashboard." 8 50; \
fi;; \ fi;; \
"istio") \ "istio") \
echo "$(BLUE)🌐 Запуск Istio Gateway...$(RESET)"; \ echo "$(BLUE)🌐 Запуск Istio Gateway...$(RESET)"; \
if make kube istio; then \ 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 \ else \
whiptail --title "Ошибка" --msgbox "Ошибка при запуске Istio Gateway." 8 50; \ whiptail --title "Ошибка" --msgbox "Ошибка при запуске Istio Gateway." 8 50; \
fi;; \ fi;; \
"grafana") \ "grafana") \
echo "$(BLUE)📊 Запуск Grafana Dashboard...$(RESET)"; \ echo "$(BLUE)📊 Запуск Grafana Dashboard...$(RESET)"; \
if make kube grafana; then \ 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 \ else \
whiptail --title "Ошибка" --msgbox "Ошибка при запуске Grafana Dashboard." 8 50; \ whiptail --title "Ошибка" --msgbox "Ошибка при запуске Grafana Dashboard." 8 50; \
fi;; \ fi;; \
"prometheus") \ "prometheus") \
echo "$(BLUE)📈 Запуск Prometheus...$(RESET)"; \ echo "$(BLUE)📈 Запуск Prometheus...$(RESET)"; \
if make kube prometheus; then \ if make kube prometheus; then \
whiptail --title "Успех" --msgbox "Prometheus доступен по адресу: http://localhost:9090" 8 50; \ whiptail --title "Успех" --msgbox "Prometheus доступен по адресу: http://localhost:9090" 8 50; \
else \ else \
whiptail --title "Ошибка" --msgbox "Ошибка при запуске Prometheus." 8 50; \ whiptail --title "Ошибка" --msgbox "Ошибка при запуске Prometheus." 8 50; \
fi;; \ fi;; \
esac esac
@@ -415,7 +418,7 @@ menu-preset: check-whiptail ## Меню управления пресетами
if [ $$? -eq 0 ] && [ -n "$$PRESET_LIST" ]; then \ if [ $$? -eq 0 ] && [ -n "$$PRESET_LIST" ]; then \
echo "$$PRESET_LIST" | whiptail --title "📋 Список пресетов" --scrolltext --textbox /dev/stdin 20 70; \ echo "$$PRESET_LIST" | whiptail --title "📋 Список пресетов" --scrolltext --textbox /dev/stdin 20 70; \
else \ else \
whiptail --title "⚠️ Предупреждение" --msgbox "Пресеты не найдены или недоступны." 8 50; \ whiptail --title "Предупреждение" --msgbox "Пресеты не найдены или недоступны." 8 50; \
fi;; \ fi;; \
"create") \ "create") \
echo "$(CYAN)🎯 Создание нового пресета лаборатории$(RESET)"; \ 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 " 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 " 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; \ 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") \ "edit") \
PRESET_NAME=$$(whiptail --inputbox "Введите имя пресета для редактирования:" 8 50 "" 3>&1 1>&2 2>&3); \ PRESET_NAME=$$(whiptail --inputbox "Введите имя пресета для редактирования:" 8 50 "" 3>&1 1>&2 2>&3); \
if [ $$? -eq 0 ] && [ -n "$$PRESET_NAME" ]; then \ if [ $$? -eq 0 ] && [ -n "$$PRESET_NAME" ]; then \
echo "$(BLUE)✏️ Редактирование пресета: $$PRESET_NAME$(RESET)"; \ echo "$(BLUE)✏️ Редактирование пресета: $$PRESET_NAME$(RESET)"; \
if make preset edit NAME="$$PRESET_NAME"; then \ if make preset edit NAME="$$PRESET_NAME"; then \
whiptail --title "Успех" --msgbox "Пресет $$PRESET_NAME отредактирован!" 8 50; \ whiptail --title "Успех" --msgbox "Пресет $$PRESET_NAME отредактирован!" 8 50; \
else \ else \
whiptail --title "Ошибка" --msgbox "Ошибка при редактировании пресета $$PRESET_NAME." 8 50; \ whiptail --title "Ошибка" --msgbox "Ошибка при редактировании пресета $$PRESET_NAME." 8 50; \
fi; \ fi; \
fi;; \ fi;; \
"test") \ "test") \
@@ -476,9 +479,9 @@ menu-preset: check-whiptail ## Меню управления пресетами
if [ $$? -eq 0 ] && [ -n "$$PRESET_NAME" ]; then \ if [ $$? -eq 0 ] && [ -n "$$PRESET_NAME" ]; then \
echo "$(BLUE)🧪 Тестирование пресета: $$PRESET_NAME$(RESET)"; \ echo "$(BLUE)🧪 Тестирование пресета: $$PRESET_NAME$(RESET)"; \
if make preset test NAME="$$PRESET_NAME"; then \ if make preset test NAME="$$PRESET_NAME"; then \
whiptail --title "Успех" --msgbox "Пресет $$PRESET_NAME протестирован успешно!" 8 50; \ whiptail --title "Успех" --msgbox "Пресет $$PRESET_NAME протестирован успешно!" 8 50; \
else \ else \
whiptail --title "Ошибка" --msgbox "Ошибка при тестировании пресета $$PRESET_NAME." 8 50; \ whiptail --title "Ошибка" --msgbox "Ошибка при тестировании пресета $$PRESET_NAME." 8 50; \
fi; \ fi; \
fi;; \ fi;; \
"copy") \ "copy") \
@@ -487,17 +490,17 @@ menu-preset: check-whiptail ## Меню управления пресетами
if [ $$? -eq 0 ] && [ -n "$$SOURCE_NAME" ] && [ -n "$$TARGET_NAME" ]; then \ if [ $$? -eq 0 ] && [ -n "$$SOURCE_NAME" ] && [ -n "$$TARGET_NAME" ]; then \
echo "$(BLUE)📋 Копирование пресета: $$SOURCE_NAME -> $$TARGET_NAME$(RESET)"; \ echo "$(BLUE)📋 Копирование пресета: $$SOURCE_NAME -> $$TARGET_NAME$(RESET)"; \
if make preset copy SOURCE="$$SOURCE_NAME" TARGET="$$TARGET_NAME"; then \ 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 \ else \
whiptail --title "Ошибка" --msgbox "Ошибка при копировании пресета." 8 50; \ whiptail --title "Ошибка" --msgbox "Ошибка при копировании пресета." 8 50; \
fi; \ fi; \
fi;; \ fi;; \
"interactive") \ "interactive") \
echo "$(BLUE)🎯 Интерактивное создание пресета...$(RESET)"; \ echo "$(BLUE)🎯 Интерактивное создание пресета...$(RESET)"; \
if make preset-create-interactive; then \ if make preset-create-interactive; then \
whiptail --title "Успех" --msgbox "Пресет создан интерактивно!" 8 50; \ whiptail --title "Успех" --msgbox "Пресет создан интерактивно!" 8 50; \
else \ else \
whiptail --title "Ошибка" --msgbox "Ошибка при интерактивном создании пресета." 8 50; \ whiptail --title "Ошибка" --msgbox "Ошибка при интерактивном создании пресета." 8 50; \
fi;; \ fi;; \
esac esac
@@ -522,7 +525,7 @@ menu-role: check-whiptail ## Меню управления ролями
if [ $$? -eq 0 ] && [ -n "$$ROLE_LIST" ]; then \ if [ $$? -eq 0 ] && [ -n "$$ROLE_LIST" ]; then \
echo "$$ROLE_LIST" | whiptail --title "📋 Список ролей" --scrolltext --textbox /dev/stdin 20 70; \ echo "$$ROLE_LIST" | whiptail --title "📋 Список ролей" --scrolltext --textbox /dev/stdin 20 70; \
else \ else \
whiptail --title "⚠️ Предупреждение" --msgbox "Роли не найдены или недоступны." 8 50; \ whiptail --title "Предупреждение" --msgbox "Роли не найдены или недоступны." 8 50; \
fi;; \ fi;; \
"create") \ "create") \
echo "$(CYAN)🎯 Создание новой Ansible роли$(RESET)"; \ echo "$(CYAN)🎯 Создание новой Ansible роли$(RESET)"; \
@@ -620,15 +623,15 @@ menu-role: check-whiptail ## Меню управления ролями
echo " systemd:" >> roles/$$ROLE_NAME/handlers/main.yml; \ echo " systemd:" >> roles/$$ROLE_NAME/handlers/main.yml; \
echo " name: \"{{ $$ROLE_NAME_service }}\"" >> 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; \ 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") \ "edit") \
ROLE_NAME=$$(whiptail --inputbox "Введите имя роли для редактирования:" 8 50 "" 3>&1 1>&2 2>&3); \ ROLE_NAME=$$(whiptail --inputbox "Введите имя роли для редактирования:" 8 50 "" 3>&1 1>&2 2>&3); \
if [ $$? -eq 0 ] && [ -n "$$ROLE_NAME" ]; then \ if [ $$? -eq 0 ] && [ -n "$$ROLE_NAME" ]; then \
echo "$(BLUE)✏️ Редактирование роли: $$ROLE_NAME$(RESET)"; \ echo "$(BLUE)✏️ Редактирование роли: $$ROLE_NAME$(RESET)"; \
if make role edit NAME="$$ROLE_NAME"; then \ if make role edit NAME="$$ROLE_NAME"; then \
whiptail --title "Успех" --msgbox "Роль $$ROLE_NAME отредактирована!" 8 50; \ whiptail --title "Успех" --msgbox "Роль $$ROLE_NAME отредактирована!" 8 50; \
else \ else \
whiptail --title "Ошибка" --msgbox "Ошибка при редактировании роли $$ROLE_NAME." 8 50; \ whiptail --title "Ошибка" --msgbox "Ошибка при редактировании роли $$ROLE_NAME." 8 50; \
fi; \ fi; \
fi;; \ fi;; \
"test") \ "test") \
@@ -636,42 +639,42 @@ menu-role: check-whiptail ## Меню управления ролями
if [ $$? -eq 0 ] && [ -n "$$ROLE_NAME" ]; then \ if [ $$? -eq 0 ] && [ -n "$$ROLE_NAME" ]; then \
echo "$(BLUE)🧪 Тестирование роли: $$ROLE_NAME$(RESET)"; \ echo "$(BLUE)🧪 Тестирование роли: $$ROLE_NAME$(RESET)"; \
if make role test NAME="$$ROLE_NAME"; then \ if make role test NAME="$$ROLE_NAME"; then \
whiptail --title "Успех" --msgbox "Роль $$ROLE_NAME протестирована успешно!" 8 50; \ whiptail --title "Успех" --msgbox "Роль $$ROLE_NAME протестирована успешно!" 8 50; \
else \ else \
whiptail --title "Ошибка" --msgbox "Ошибка при тестировании роли $$ROLE_NAME." 8 50; \ whiptail --title "Ошибка" --msgbox "Ошибка при тестировании роли $$ROLE_NAME." 8 50; \
fi; \ fi; \
fi;; \ fi;; \
"lint") \ "lint") \
echo "$(BLUE)🔍 Проверка синтаксиса ролей...$(RESET)"; \ echo "$(BLUE)🔍 Проверка синтаксиса ролей...$(RESET)"; \
LINT_OUTPUT=$$(make role lint 2>&1); \ LINT_OUTPUT=$$(make role lint 2>&1); \
if [ $$? -eq 0 ]; then \ if [ $$? -eq 0 ]; then \
whiptail --title "Успех" --msgbox "Проверка синтаксиса ролей прошла успешно!" 8 50; \ whiptail --title "Успех" --msgbox "Проверка синтаксиса ролей прошла успешно!" 8 50; \
else \ else \
echo "$$LINT_OUTPUT" | whiptail --title "❌ Ошибки синтаксиса" --scrolltext --textbox /dev/stdin 20 70; \ echo "$$LINT_OUTPUT" | whiptail --title "❌ Ошибки синтаксиса" --scrolltext --textbox /dev/stdin 20 70; \
fi;; \ fi;; \
"deploy") \ "deploy") \
echo "$(BLUE)🚀 Развертывание ролей...$(RESET)"; \ echo "$(BLUE)🚀 Развертывание ролей...$(RESET)"; \
if make role deploy; then \ if make role deploy; then \
whiptail --title "Успех" --msgbox "Роли успешно развернуты!" 8 50; \ whiptail --title "Успех" --msgbox "Роли успешно развернуты!" 8 50; \
else \ else \
whiptail --title "Ошибка" --msgbox "Ошибка при развертывании ролей." 8 50; \ whiptail --title "Ошибка" --msgbox "Ошибка при развертывании ролей." 8 50; \
fi;; \ fi;; \
"playbook") \ "playbook") \
ROLE_NAME=$$(whiptail --inputbox "Введите имя роли для управления playbooks:" 8 50 "" 3>&1 1>&2 2>&3); \ ROLE_NAME=$$(whiptail --inputbox "Введите имя роли для управления playbooks:" 8 50 "" 3>&1 1>&2 2>&3); \
if [ $$? -eq 0 ] && [ -n "$$ROLE_NAME" ]; then \ if [ $$? -eq 0 ] && [ -n "$$ROLE_NAME" ]; then \
echo "$(BLUE)📝 Управление playbooks роли: $$ROLE_NAME$(RESET)"; \ echo "$(BLUE)📝 Управление playbooks роли: $$ROLE_NAME$(RESET)"; \
if make role playbook NAME="$$ROLE_NAME"; then \ 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 \ else \
whiptail --title "Ошибка" --msgbox "Ошибка при обработке playbooks роли $$ROLE_NAME." 8 50; \ whiptail --title "Ошибка" --msgbox "Ошибка при обработке playbooks роли $$ROLE_NAME." 8 50; \
fi; \ fi; \
fi;; \ fi;; \
"interactive") \ "interactive") \
echo "$(BLUE)🎯 Интерактивное создание роли...$(RESET)"; \ echo "$(BLUE)🎯 Интерактивное создание роли...$(RESET)"; \
if make role-create-interactive; then \ if make role-create-interactive; then \
whiptail --title "Успех" --msgbox "Роль создана интерактивно!" 8 50; \ whiptail --title "Успех" --msgbox "Роль создана интерактивно!" 8 50; \
else \ else \
whiptail --title "Ошибка" --msgbox "Ошибка при интерактивном создании роли." 8 50; \ whiptail --title "Ошибка" --msgbox "Ошибка при интерактивном создании роли." 8 50; \
fi;; \ fi;; \
esac esac
@@ -697,7 +700,7 @@ menu-vault: check-whiptail ## Меню управления vault
.PHONY: menu-report .PHONY: menu-report
menu-report: check-whiptail ## Меню генерации отчетов menu-report: check-whiptail ## Меню генерации отчетов
@CHOICE=$$(whiptail --title "📊 Генерация отчетов" \ @CHOICE=$$(whiptail --title "Генерация отчетов" \
--menu "Выберите действие:" 15 50 8 \ --menu "Выберите действие:" 15 50 8 \
"html" "📄 HTML отчет" \ "html" "📄 HTML отчет" \
"json" "📋 JSON отчет" \ "json" "📋 JSON отчет" \
@@ -828,16 +831,16 @@ menu-help: check-whiptail ## Меню помощи и справки
whiptail --title "🚀 Быстрый старт" \ 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;; \ --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") \ "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;; \ --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") \ "examples") \
whiptail --title "💡 Примеры использования" \ 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;; \ --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") \ "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;; \ --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") \ "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;; \ --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 esac