Просмотр исходного кода

deploy-remote.sh: интерактивный ввод обязательных и опциональных переменных

- prompt_for_var: запрос обязательных переменных (YANDEX_MAPS_API_KEY) с валидацией непустого ввода
- prompt_optional: запрос опциональных переменных (CLOUDPAYMENTS_*) с возможностью пропуска Enter
- Автоперезагрузка env после ввода
- Экранирование спецсимволов для sed
neyrogovnarik 1 месяц назад
Родитель
Сommit
0aeadb3c10
1 измененных файлов с 71 добавлено и 5 удалено
  1. 71 5
      deploy/deploy-remote.sh

+ 71 - 5
deploy/deploy-remote.sh

@@ -109,7 +109,7 @@ setup_env() {
     generate_secret "JWT_REFRESH_SECRET"
     generate_secret "S3_SECRET_KEY"
 
-    # Проверка обязательных переменных
+    # Проверка обязательных переменных с интерактивным вводом
     local required=("DB_PASSWORD" "REDIS_PASSWORD" "JWT_SECRET" "JWT_REFRESH_SECRET" "S3_SECRET_KEY" "YANDEX_MAPS_API_KEY")
     local missing=()
     for var in "${required[@]}"; do
@@ -119,17 +119,83 @@ setup_env() {
     done
 
     if [ ${#missing[@]} -gt 0 ]; then
-        log_warn "Требуют ручного заполнения в $ENV_FILE:"
+        log_warn "Необходимо заполнить обязательные переменные:"
         for var in "${missing[@]}"; do
-            echo "  - $var"
+            prompt_for_var "$var"
         done
-        log_info "Откройте $ENV_FILE и заполните недостающие значения, затем запустите скрипт снова"
-        exit 1
+        # Перезагружаем env после ввода
+        set -a
+        source "$ENV_FILE"
+        set +a
     fi
 
+    # Опциональные переменные (интерактивно, можно пропустить Enter)
+    prompt_optional "CLOUDPAYMENTS_PUBLIC_ID" "CloudPayments Public ID (для платежей, Enter для пропуска)"
+    prompt_optional "CLOUDPAYMENTS_API_SECRET" "CloudPayments API Secret (для платежей, Enter для пропуска)"
+
     log_ok "Все секреты настроены"
 }
 
+# Интерактивный запрос обязательной переменной
+prompt_for_var() {
+    local var="$1"
+    local current="${!var:-}"
+    while [ -z "${!var:-}" ]; do
+        if [ -n "$current" ]; then
+            echo -ne "${YELLOW}$var${NC} (текущее: $current): "
+        else
+            echo -ne "${YELLOW}$var${NC}: "
+        fi
+        read -r input
+        if [ -n "$input" ]; then
+            # Экранируем спецсимволы для sed
+            local escaped
+            escaped=$(printf '%s\n' "$input" | sed 's/[&/\]/\\&/g')
+            if [[ "$OSTYPE" == "darwin"* ]]; then
+                sed -i '' "s/^${var}=.*/${var}=${escaped}/" "$ENV_FILE"
+            else
+                sed -i "s/^${var}=.*/${var}=${escaped}/" "$ENV_FILE"
+            fi
+            export "$var=$input"
+            log_ok "$var сохранено"
+        elif [ -n "$current" ]; then
+            export "$var=$current"
+            log_ok "$var оставлено как есть"
+        else
+            log_err "Значение не может быть пустым!"
+        fi
+    done
+}
+
+# Интерактивный запрос опциональной переменной
+prompt_optional() {
+    local var="$1"
+    local prompt="$2"
+    local current="${!var:-}"
+    echo -ne "${BLUE}$prompt${NC} "
+    if [ -n "$current" ]; then
+        echo -ne "[$current]: "
+    else
+        echo -n ": "
+    fi
+    read -r input
+    if [ -n "$input" ]; then
+        local escaped
+        escaped=$(printf '%s\n' "$input" | sed 's/[&/\]/\\&/g')
+        if [[ "$OSTYPE" == "darwin"* ]]; then
+            sed -i '' "s/^${var}=.*/${var}=${escaped}/" "$ENV_FILE"
+        else
+            sed -i "s/^${var}=.*/${var}=${escaped}/" "$ENV_FILE"
+        fi
+        export "$var=$input"
+        log_ok "$var сохранено"
+    elif [ -n "$current" ]; then
+        log_ok "$var оставлено как есть"
+    else
+        log_info "$var пропущено"
+    fi
+}
+
 # 4. Создание Docker secrets (если Swarm)
 create_docker_secrets() {
     if docker info --format '{{.Swarm.LocalNodeState}}' 2>/dev/null | grep -q "active"; then