NODEDC_PLATFORM/infra/synology/prepare-ai-workspace-env.sh

99 lines
2.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
NAS_ROOT="${NAS_ROOT:-/Volumes/docker/nodedc-platform}"
PLATFORM_ENV="${PLATFORM_ENV:-${NAS_ROOT}/platform/.env.synology}"
GATEWAY_ENV="${GATEWAY_ENV:-${NAS_ROOT}/ops-agents/.env}"
BACKUP_ROOT="${BACKUP_ROOT:-${NAS_ROOT}/backups/env-prep}"
TIMESTAMP="${TIMESTAMP:-$(date +%Y%m%d-%H%M%S)}"
BACKUP_DIR="${BACKUP_DIR:-${BACKUP_ROOT}/${TIMESTAMP}}"
mkdir -p "${BACKUP_DIR}"
read_env() {
local file="$1"
local key="$2"
[[ -f "${file}" ]] || return 0
awk -F= -v key="${key}" '
$0 ~ "^[[:space:]]*#" { next }
$1 == key {
value = substr($0, index($0, "=") + 1)
gsub(/^[[:space:]]+|[[:space:]]+$/, "", value)
gsub(/^"|"$/, "", value)
print value
exit
}
' "${file}"
}
backup_file() {
local file="$1"
local label="$2"
if [[ ! -f "${file}" ]]; then
echo "missing ${label}: ${file}" >&2
exit 1
fi
local backup_path="${BACKUP_DIR}/$(basename "${file}").${label}.bak"
if ! COPYFILE_DISABLE=1 cp -X "${file}" "${backup_path}" 2>/dev/null; then
cat "${file}" > "${backup_path}"
fi
chmod 600 "${backup_path}"
}
set_env_value() {
local file="$1"
local key="$2"
local value="$3"
local tmp
tmp="$(mktemp)"
if grep -qE "^${key}=" "${file}"; then
awk -v key="${key}" -v value="${value}" '
BEGIN { replaced = 0 }
$0 ~ "^[[:space:]]*#" { print; next }
index($0, key "=") == 1 {
print key "=" value
replaced = 1
next
}
{ print }
END {
if (!replaced) {
print key "=" value
}
}
' "${file}" > "${tmp}"
else
cat "${file}" > "${tmp}"
printf '\n%s=%s\n' "${key}" "${value}" >> "${tmp}"
fi
cat "${tmp}" > "${file}"
rm -f "${tmp}"
chmod 600 "${file}"
}
gateway_internal_token="$(read_env "${GATEWAY_ENV}" NODEDC_AGENT_GATEWAY_INTERNAL_TOKEN || true)"
if [[ -z "${gateway_internal_token}" || "${gateway_internal_token}" == replace-with-* || "${gateway_internal_token}" == change-me-* ]]; then
echo "Gateway NODEDC_AGENT_GATEWAY_INTERNAL_TOKEN is missing or placeholder in ${GATEWAY_ENV}" >&2
exit 1
fi
backup_file "${PLATFORM_ENV}" platform
backup_file "${GATEWAY_ENV}" ops-agents
set_env_value "${PLATFORM_ENV}" AI_WORKSPACE_HUB_PUBLIC_URL "wss://ai-hub.nodedc.ru/api/ai-workspace/hub"
set_env_value "${PLATFORM_ENV}" AI_WORKSPACE_HUB_INTERNAL_URL "https://ai-hub.nodedc.ru"
set_env_value "${PLATFORM_ENV}" AI_WORKSPACE_HUB_FALLBACK_URLS ""
set_env_value "${PLATFORM_ENV}" AI_WORKSPACE_OPS_ENTITLEMENT_URL "http://172.22.0.222:18190/api/internal/v1/ai-workspace/entitlements"
set_env_value "${PLATFORM_ENV}" AI_WORKSPACE_OPS_ENTITLEMENT_TOKEN "${gateway_internal_token}"
set_env_value "${PLATFORM_ENV}" AI_WORKSPACE_OPS_ENTITLEMENT_REQUIRED "false"
set_env_value "${GATEWAY_ENV}" NODEDC_AI_WORKSPACE_RUN_TOKEN_TTL_SECONDS "43200"
cat <<EOF
ai-workspace-env-prep-ok
backup_dir=${BACKUP_DIR}
updated_platform_env=${PLATFORM_ENV}
updated_gateway_env=${GATEWAY_ENV}
secrets_printed=false
EOF