环境配置统一以 .env 为单一事实来源,移除 .ctms-env
- 删除 .ctms-env:环境名由 .env 的 COMPOSE_PROJECT_NAME 反推 (ctms_detect_env),健康检查地址改存 .env 的 CTMS_BASE_URL - prepare_env_file 由“已存在则整体跳过”改为逐项探测补全: 身份类缺失补目标值、密钥类缺失/空才生成、已有值一律不动 - resolve_effective_config 放宽为“冲突才致命”:身份类缺失交给 补全,仅 COMPOSE_PROJECT_NAME/ENV 与目标环境冲突时报错停止 (防止覆盖后孤立旧环境容器) - 新增 ctms_env_has_key 区分“键缺失”与“键存在但空值” (dev 的 LOGIN_RSA_PRIVATE_KEY= 是合法空值) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -261,6 +261,17 @@ ctms_key_id() {
|
||||
esac
|
||||
}
|
||||
|
||||
# 从 .env 的 COMPOSE_PROJECT_NAME 反推环境名(dev/main/release)。
|
||||
# .env 是部署环境的唯一事实来源(main/release 均为 production,仅项目名可区分)。
|
||||
# 无 .env 或无法识别时输出空字符串,由调用方决定回退策略。
|
||||
ctms_detect_env() {
|
||||
case "$(ctms_read_env_value COMPOSE_PROJECT_NAME)" in
|
||||
ctms_dev) printf 'dev' ;;
|
||||
ctms_main) printf 'main' ;;
|
||||
ctms_release) printf 'release' ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# 默认健康检查地址;release 无默认值(必须显式提供 HTTPS)
|
||||
ctms_default_base_url() {
|
||||
ctms_require_env "$1"
|
||||
@@ -399,6 +410,14 @@ ctms_read_env_value() {
|
||||
' "$CTMS_ENV_FILE"
|
||||
}
|
||||
|
||||
# 判断 .env 中是否存在某个键(区分“键缺失”与“键存在但值为空”:
|
||||
# dev 的 LOGIN_RSA_PRIVATE_KEY= 是合法空值,不能当作缺失去重新生成)。
|
||||
ctms_env_has_key() {
|
||||
local key="$1"
|
||||
[[ -f "$CTMS_ENV_FILE" ]] || return 1
|
||||
grep -q "^${key}=" "$CTMS_ENV_FILE"
|
||||
}
|
||||
|
||||
ctms_upsert_env_value() {
|
||||
local key="$1" value="$2"
|
||||
local temp_file
|
||||
|
||||
Reference in New Issue
Block a user