136 lines
4.3 KiB
Bash
Executable File
136 lines
4.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
TEMPLATE_PATH="${SCRIPT_DIR}/templates/domaincheck-ops-center.env.example"
|
|
|
|
usage() {
|
|
cat <<'EOF'
|
|
usage:
|
|
bash domain-api/deploy/multi-region/init_ops_center_config.sh \
|
|
[config_path] [mainland_api_base_url] [overseas_api_base_url] [control_plane_base_url]
|
|
|
|
examples:
|
|
bash domain-api/deploy/multi-region/init_ops_center_config.sh
|
|
bash domain-api/deploy/multi-region/init_ops_center_config.sh /etc/default/domaincheck-ops-center \
|
|
http://121.204.244.188:8100 \
|
|
http://152.53.37.118:8100 \
|
|
https://api.example.com
|
|
|
|
notes:
|
|
- existing config files are preserved unless FORCE=true
|
|
- advanced fields can be overridden with env vars:
|
|
OPS_ACTIVE_PROFILE
|
|
OPS_PROFILE_NAMES
|
|
OPS_DEFAULT_REQUESTED_BY
|
|
OPS_DEFAULT_ISSUED_BY
|
|
OPS_DEFAULT_EXPIRES_IN_HOURS
|
|
OPS_DEFAULT_ROOT_DIR
|
|
OPS_REPORT_ROOT
|
|
EOF
|
|
}
|
|
|
|
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
|
|
usage
|
|
exit 0
|
|
fi
|
|
|
|
TARGET_PATH="${1:-/etc/default/domaincheck-ops-center}"
|
|
MAINLAND_API_BASE_URL="${2:-${OPS_MAINLAND_API_BASE_URL:-http://127.0.0.1:8100}}"
|
|
OVERSEAS_API_BASE_URL="${3:-${OPS_OVERSEAS_API_BASE_URL:-http://127.0.0.1:8100}}"
|
|
CONTROL_PLANE_BASE_URL="${4:-${OPS_DEFAULT_CONTROL_PLANE_BASE_URL:-}}"
|
|
|
|
ACTIVE_PROFILE="${OPS_ACTIVE_PROFILE:-default}"
|
|
PROFILE_NAMES="${OPS_PROFILE_NAMES:-${ACTIVE_PROFILE}}"
|
|
DEFAULT_REQUESTED_BY="${OPS_DEFAULT_REQUESTED_BY:-cli/ops-center}"
|
|
DEFAULT_ISSUED_BY="${OPS_DEFAULT_ISSUED_BY:-ops-center}"
|
|
DEFAULT_EXPIRES_IN_HOURS="${OPS_DEFAULT_EXPIRES_IN_HOURS:-72}"
|
|
DEFAULT_ROOT_DIR="${OPS_DEFAULT_ROOT_DIR:-/opt/domaincheck}"
|
|
REPORT_ROOT="${OPS_REPORT_ROOT:-}"
|
|
NODE_AGENT_SERVICE_NAME="${OPS_NODE_AGENT_SERVICE_NAME:-domaincheck-node-agent}"
|
|
NODE_AGENT_ENV_FILE="${OPS_NODE_AGENT_ENV_FILE:-/etc/default/domaincheck-node-agent}"
|
|
FORCE_WRITE="${FORCE:-false}"
|
|
|
|
if [[ ! -f "${TEMPLATE_PATH}" ]]; then
|
|
echo "template not found: ${TEMPLATE_PATH}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$(dirname "${TARGET_PATH}")"
|
|
|
|
if [[ ! -f "${TARGET_PATH}" || "${FORCE_WRITE}" == "true" ]]; then
|
|
cp "${TEMPLATE_PATH}" "${TARGET_PATH}"
|
|
fi
|
|
|
|
upsert_key() {
|
|
local key="$1"
|
|
local value="$2"
|
|
if grep -q "^${key}=" "${TARGET_PATH}"; then
|
|
sed -i "s#^${key}=.*#${key}=${value}#" "${TARGET_PATH}"
|
|
else
|
|
printf '%s=%s\n' "${key}" "${value}" >>"${TARGET_PATH}"
|
|
fi
|
|
}
|
|
|
|
upsert_commented_key() {
|
|
local key="$1"
|
|
local value="$2"
|
|
if [[ -z "${value}" ]]; then
|
|
return 0
|
|
fi
|
|
upsert_key "${key}" "${value}"
|
|
}
|
|
|
|
upsert_key "OPS_ACTIVE_PROFILE" "${ACTIVE_PROFILE}"
|
|
upsert_key "OPS_PROFILE_NAMES" "${PROFILE_NAMES}"
|
|
upsert_key "OPS_MAINLAND_API_BASE_URL" "${MAINLAND_API_BASE_URL}"
|
|
upsert_key "OPS_OVERSEAS_API_BASE_URL" "${OVERSEAS_API_BASE_URL}"
|
|
upsert_key "OPS_DEFAULT_CONTROL_PLANE_BASE_URL" "${CONTROL_PLANE_BASE_URL}"
|
|
upsert_key "OPS_DEFAULT_REQUESTED_BY" "${DEFAULT_REQUESTED_BY}"
|
|
upsert_key "OPS_DEFAULT_ISSUED_BY" "${DEFAULT_ISSUED_BY}"
|
|
upsert_key "OPS_DEFAULT_EXPIRES_IN_HOURS" "${DEFAULT_EXPIRES_IN_HOURS}"
|
|
upsert_key "OPS_DEFAULT_ROOT_DIR" "${DEFAULT_ROOT_DIR}"
|
|
upsert_key "OPS_NODE_AGENT_SERVICE_NAME" "${NODE_AGENT_SERVICE_NAME}"
|
|
upsert_key "OPS_NODE_AGENT_ENV_FILE" "${NODE_AGENT_ENV_FILE}"
|
|
upsert_commented_key "OPS_REPORT_ROOT" "${REPORT_ROOT}"
|
|
|
|
python3 - <<'PY' "${TARGET_PATH}"
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
config_path = Path(sys.argv[1])
|
|
keys = [
|
|
"OPS_ACTIVE_PROFILE",
|
|
"OPS_PROFILE_NAMES",
|
|
"OPS_MAINLAND_API_BASE_URL",
|
|
"OPS_OVERSEAS_API_BASE_URL",
|
|
"OPS_DEFAULT_CONTROL_PLANE_BASE_URL",
|
|
"OPS_DEFAULT_REQUESTED_BY",
|
|
"OPS_DEFAULT_ISSUED_BY",
|
|
"OPS_DEFAULT_EXPIRES_IN_HOURS",
|
|
"OPS_DEFAULT_ROOT_DIR",
|
|
"OPS_NODE_AGENT_SERVICE_NAME",
|
|
"OPS_NODE_AGENT_ENV_FILE",
|
|
"OPS_REPORT_ROOT",
|
|
]
|
|
values = {}
|
|
for line in config_path.read_text(encoding="utf-8").splitlines():
|
|
if not line or line.startswith("#") or "=" not in line:
|
|
continue
|
|
key, value = line.split("=", 1)
|
|
if key in keys:
|
|
values[key] = value
|
|
|
|
print(json.dumps({
|
|
"ok": True,
|
|
"config_path": str(config_path),
|
|
"summary": values,
|
|
"next_commands": [
|
|
"bash domain-api/deploy/multi-region/drive_ops_center.sh config",
|
|
"bash domain-api/deploy/multi-region/drive_ops_center.sh doctor-export",
|
|
"bash domain-api/deploy/multi-region/drive_ops_center.sh agent-check",
|
|
],
|
|
}, ensure_ascii=False, indent=2))
|
|
PY
|