feat: Интерактивная инициализация проекта через make init

- Добавлена интерактивная команда setup-env-interactive
- make init теперь запрашивает настройки проекта в диалоговом режиме
- Обновлена документация в README.md
- Убрано упоминание о создании vault-password.txt вручную

Интерактивная настройка включает:
- Основные настройки: название, версия, автор, сайт
- Настройки Docker: образ, сеть
- Настройки лаборатории: сценарий, пресет
- Настройки Kubernetes: контекст, версии Istio/Kind
- Пути к папкам и файлам

Преимущества:
- Удобная настройка проекта при первом запуске
- Все необходимые файлы создаются автоматически
- Пользователь может настроить проект под свои нужды
- Сохранение настроек в .env файле

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
2025-10-22 15:07:13 +03:00
parent a88c85d164
commit eb61afb35a
2 changed files with 85 additions and 6 deletions

View File

@@ -73,13 +73,88 @@ help: ## Показать справку по всем командам
# =============================================================================
.PHONY: init
init: setup-env setup-vault setup-roles setup-precommit ## Полная инициализация проекта
init: setup-env-interactive setup-vault setup-roles setup-precommit ## Полная инициализация проекта
@echo "$(GREEN)✅ Проект успешно инициализирован!$(RESET)"
@echo "$(YELLOW)📖 Документация: $(SITE)$(RESET)"
@echo "$(YELLOW)🚀 Быстрый старт: make lab up$(RESET)"
.PHONY: setup-env-interactive
setup-env-interactive: ## Интерактивное создание .env файла
@if [ ! -f $(ENV_FILE) ]; then \
echo "$(CYAN)🔧 Настройка проекта Ansible Template$(RESET)"; \
echo "$(YELLOW)📝 Заполните параметры проекта (можно оставить пустыми для значений по умолчанию):$(RESET)"; \
echo ""; \
read -p "$(YELLOW)📦 Название проекта [$(PROJECT_NAME)]: $(RESET)" USER_PROJECT_NAME; \
USER_PROJECT_NAME=$${USER_PROJECT_NAME:-$(PROJECT_NAME)}; \
read -p "$(YELLOW)📋 Версия проекта [$(VERSION)]: $(RESET)" USER_VERSION; \
USER_VERSION=$${USER_VERSION:-$(VERSION)}; \
read -p "$(YELLOW)👤 Автор проекта [Сергей Антропов]: $(RESET)" USER_AUTHOR; \
USER_AUTHOR=$${USER_AUTHOR:-Сергей Антропов}; \
read -p "$(YELLOW)🌐 Сайт проекта [https://devops.org.ru]: $(RESET)" USER_SITE; \
USER_SITE=$${USER_SITE:-https://devops.org.ru}; \
echo ""; \
echo "$(BLUE)🐳 Настройки Docker:$(RESET)"; \
read -p "$(YELLOW)🐳 Docker образ [$(DOCKER_IMAGE)]: $(RESET)" USER_DOCKER_IMAGE; \
USER_DOCKER_IMAGE=$${USER_DOCKER_IMAGE:-$(DOCKER_IMAGE)}; \
read -p "$(YELLOW)🌐 Docker сеть [$(DOCKER_NETWORK)]: $(RESET)" USER_DOCKER_NETWORK; \
USER_DOCKER_NETWORK=$${USER_DOCKER_NETWORK:-$(DOCKER_NETWORK)}; \
echo ""; \
echo "$(BLUE)🧪 Настройки лаборатории:$(RESET)"; \
read -p "$(YELLOW)📋 Сценарий Molecule [$(SCENARIO)]: $(RESET)" USER_SCENARIO; \
USER_SCENARIO=$${USER_SCENARIO:-$(SCENARIO)}; \
read -p "$(YELLOW)📄 Пресет лаборатории [$(LAB_SPEC)]: $(RESET)" USER_LAB_SPEC; \
USER_LAB_SPEC=$${USER_LAB_SPEC:-$(LAB_SPEC)}; \
echo ""; \
echo "$(BLUE)☸️ Настройки Kubernetes:$(RESET)"; \
read -p "$(YELLOW)☸️ Kubernetes контекст [$(KUBE_CONTEXT)]: $(RESET)" USER_KUBE_CONTEXT; \
USER_KUBE_CONTEXT=$${USER_KUBE_CONTEXT:-$(KUBE_CONTEXT)}; \
read -p "$(YELLOW)🔗 Версия Istio [$(ISTIO_VERSION)]: $(RESET)" USER_ISTIO_VERSION; \
USER_ISTIO_VERSION=$${USER_ISTIO_VERSION:-$(ISTIO_VERSION)}; \
read -p "$(YELLOW)☸️ Версия Kind [$(KIND_VERSION)]: $(RESET)" USER_KIND_VERSION; \
USER_KIND_VERSION=$${USER_KIND_VERSION:-$(KIND_VERSION)}; \
echo ""; \
echo "$(BLUE)📁 Настройки путей:$(RESET)"; \
read -p "$(YELLOW)📁 Папка ролей [$(ROLES_DIR)]: $(RESET)" USER_ROLES_DIR; \
USER_ROLES_DIR=$${USER_ROLES_DIR:-$(ROLES_DIR)}; \
read -p "$(YELLOW)🔐 Файл пароля vault [$(VAULT_PASSWORD_FILE)]: $(RESET)" USER_VAULT_PASSWORD_FILE; \
USER_VAULT_PASSWORD_FILE=$${USER_VAULT_PASSWORD_FILE:-$(VAULT_PASSWORD_FILE)}; \
echo ""; \
echo "$(BLUE)📝 Создание .env файла...$(RESET)"; \
echo "# Ansible Template Environment" > $(ENV_FILE); \
echo "# Автор: $(AUTHOR)" >> $(ENV_FILE); \
echo "# Сайт: $(SITE)" >> $(ENV_FILE); \
echo "" >> $(ENV_FILE); \
echo "# Основные настройки" >> $(ENV_FILE); \
echo "PROJECT_NAME=$$USER_PROJECT_NAME" >> $(ENV_FILE); \
echo "VERSION=$$USER_VERSION" >> $(ENV_FILE); \
echo "AUTHOR=$$USER_AUTHOR" >> $(ENV_FILE); \
echo "SITE=$$USER_SITE" >> $(ENV_FILE); \
echo "" >> $(ENV_FILE); \
echo "# Docker settings" >> $(ENV_FILE); \
echo "DOCKER_IMAGE=$$USER_DOCKER_IMAGE" >> $(ENV_FILE); \
echo "DOCKER_NETWORK=$$USER_DOCKER_NETWORK" >> $(ENV_FILE); \
echo "" >> $(ENV_FILE); \
echo "# Molecule settings" >> $(ENV_FILE); \
echo "SCENARIO=$$USER_SCENARIO" >> $(ENV_FILE); \
echo "LAB_SPEC=$$USER_LAB_SPEC" >> $(ENV_FILE); \
echo "" >> $(ENV_FILE); \
echo "# Kubernetes settings" >> $(ENV_FILE); \
echo "KUBE_CONTEXT=$$USER_KUBE_CONTEXT" >> $(ENV_FILE); \
echo "ISTIO_VERSION=$$USER_ISTIO_VERSION" >> $(ENV_FILE); \
echo "KIND_VERSION=$$USER_KIND_VERSION" >> $(ENV_FILE); \
echo "" >> $(ENV_FILE); \
echo "# Paths" >> $(ENV_FILE); \
echo "ROLES_DIR=$$USER_ROLES_DIR" >> $(ENV_FILE); \
echo "VAULT_PASSWORD_FILE=$$USER_VAULT_PASSWORD_FILE" >> $(ENV_FILE); \
echo "$(GREEN)✅ .env файл создан с вашими настройками$(RESET)"; \
else \
echo "$(YELLOW)⚠️ .env файл уже существует$(RESET)"; \
echo "$(BLUE)📝 Текущие настройки:$(RESET)"; \
grep -v "^#" $(ENV_FILE) | grep -v "^$$" | head -10; \
fi
.PHONY: setup-env
setup-env: ## Создать .env файл с настройками
setup-env: ## Создать .env файл с настройками по умолчанию
@if [ ! -f $(ENV_FILE) ]; then \
echo "$(YELLOW)Создание .env файла...$(RESET)"; \
echo "# Ansible Template Environment" > $(ENV_FILE); \

View File

@@ -38,10 +38,14 @@
git clone https://github.com/your-username/ansible-template.git
cd ansible-template
# Создать необходимые файлы
echo "your-vault-password" > vault-password.txt
mkdir -p roles
mkdir -p files/playbooks
# Инициализировать проект (интерактивная настройка)
make init
# Команда запросит настройки проекта в интерактивном режиме:
# - Название проекта, версия, автор, сайт
# - Настройки Docker (образ, сеть)
# - Настройки лаборатории (сценарий, пресет)
# - Настройки Kubernetes (контекст, версии Istio/Kind)
# - Пути к папкам и файлам
# Установить pre-commit хуки (опционально)
make pre-commit-install