#!/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