hy-app-monitor/localbox/publish_local_nacos_configs.sh
2026-05-09 10:40:17 +08:00

71 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
# shellcheck disable=SC1091
source "$SCRIPT_DIR/common.sh"
load_local_env
NACOS_SOURCE_DIR="${LIKEI_NACOS_CONFIG_ROOT:-$JAVA_REPO_DIR/nacos_config}"
NACOS_CONFIG_HOST="${NACOS_CONFIG_HOST:?missing NACOS_CONFIG_HOST}"
NACOS_CONFIG_PORT="${NACOS_CONFIG_PORT:?missing NACOS_CONFIG_PORT}"
NAMESPACE_ID="${NAMESPACE_ID:-${LIKEI_NACOS_NAMESPACE:?missing LIKEI_NACOS_NAMESPACE}}"
NAMESPACE_NAME="${NAMESPACE_NAME:-${LIKEI_NACOS_NAMESPACE_NAME:?missing LIKEI_NACOS_NAMESPACE_NAME}}"
NACOS_CONFIG_BASE_URL="http://${NACOS_CONFIG_HOST}:${NACOS_CONFIG_PORT}/nacos"
TMP_DIR="$(mktemp -d)"
cleanup() {
rm -rf "$TMP_DIR"
}
trap cleanup EXIT
cp -R "$NACOS_SOURCE_DIR/." "$TMP_DIR/"
if [ -f "$TMP_DIR/common/external.yml" ]; then
cp "$TMP_DIR/common/external.yml" "$TMP_DIR/common/external-config.yml"
fi
if [ "$NAMESPACE_ID" != "public" ]; then
for _ in $(seq 1 60); do
if curl -fsS "${NACOS_CONFIG_BASE_URL}/" >/dev/null; then
break
fi
sleep 1
done
curl -fsS -X POST "$NACOS_CONFIG_BASE_URL/v1/console/namespaces" \
--data-urlencode "customNamespaceId=${NAMESPACE_ID}" \
--data-urlencode "namespaceName=${NAMESPACE_NAME}" \
--data-urlencode "namespaceDesc=${NAMESPACE_NAME}" >/dev/null || true
fi
publish_file() {
local file_path="$1"
local group="$2"
local data_id="$3"
if [ "$NAMESPACE_ID" = "public" ]; then
curl -fsS -X POST "$NACOS_CONFIG_BASE_URL/v1/cs/configs" \
--data-urlencode "group=${group}" \
--data-urlencode "dataId=${data_id}" \
--data-urlencode "type=yaml" \
--data-urlencode "content@${file_path}" >/dev/null
else
curl -fsS -X POST "$NACOS_CONFIG_BASE_URL/v1/cs/configs" \
--data-urlencode "tenant=${NAMESPACE_ID}" \
--data-urlencode "group=${group}" \
--data-urlencode "dataId=${data_id}" \
--data-urlencode "type=yaml" \
--data-urlencode "content@${file_path}" >/dev/null
fi
printf 'published %s/%s\n' "$group" "$data_id"
}
while IFS= read -r file_path; do
[ -f "$file_path" ] || continue
group_name="$(basename "$(dirname "$file_path")")"
data_id="$(basename "$file_path")"
publish_file "$file_path" "$group_name" "$data_id"
done < <(find "$TMP_DIR" -type f -name '*.yml' | sort)