- 新增 kenaito-conf-bash-client(Bash 4.0+,依赖 curl、jq)及对应 demo - 新增 kenaito-conf-dart-client(Dart 2.12+,空安全)及对应 demo - 新增 Dockerfile.bash(debian:bookworm-slim)和 Dockerfile.dart(dart:3.5) - README 技术栈和项目结构补充 Bash、Dart 客户端 - README_EN.md 同步更新 - README_DOCKERFILE.md 补充 Bash、Dart 构建命令 - 修复 Bash 客户端 curl 2>&1 混入 stderr 导致响应解析失败 - 修复 Dart 客户端 latest.fetch.timestamp 类型转换兼容 string/num
83 lines
2.3 KiB
Bash
83 lines
2.3 KiB
Bash
#!/usr/bin/env bash
|
|
# Kenaito Config Center Bash Client Demo
|
|
|
|
# 引入客户端库
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
source "${SCRIPT_DIR}/../kenaito-conf-bash-client/lib/kenaito_conf.sh"
|
|
|
|
# 配置(可通过环境变量覆盖)
|
|
export KENAITO_BASE_URL="${KENAITO_BASE_URL:-http://localhost:8080}"
|
|
export KENAITO_APP_NAME="${KENAITO_APP_NAME:-kenaito-bash-demo}"
|
|
export KENAITO_ENV="${KENAITO_ENV:-daily}"
|
|
export KENAITO_VERSION="${KENAITO_VERSION:-latest}"
|
|
export KENAITO_TOKEN="${KENAITO_TOKEN:-}"
|
|
export KENAITO_SYNC_INTERVAL="${KENAITO_SYNC_INTERVAL:-10}"
|
|
export KENAITO_CACHE_DIR="${KENAITO_CACHE_DIR:-.}"
|
|
|
|
# 本地默认配置
|
|
declare -A config_values
|
|
config_values=(
|
|
["database.host"]="${DATABASE_HOST:-192.168.1.1}"
|
|
["database.port"]="${DATABASE_PORT:-8888}"
|
|
["database.name"]="${DATABASE_NAME:-xxxx}"
|
|
["database.user"]="${DATABASE_USER:-xxxx}"
|
|
["database.password"]="${DATABASE_PASSWORD:-xxxxxxxx}"
|
|
)
|
|
|
|
# 变更回调函数
|
|
kenaito_on_change() {
|
|
local changed_keys="$1"
|
|
echo "Config changed:"
|
|
IFS=', ' read -ra keys <<< "$changed_keys"
|
|
for key in "${keys[@]}"; do
|
|
local value
|
|
value=$(kenaito_get "$key")
|
|
echo " $key = $value"
|
|
if [ -n "${config_values[$key]+x}" ]; then
|
|
config_values["$key"]="$value"
|
|
echo " [updated] $key = $value"
|
|
fi
|
|
done
|
|
}
|
|
|
|
# 启动客户端
|
|
kenaito_start
|
|
if [ $? -eq 0 ]; then
|
|
# 用远程配置覆盖本地默认值
|
|
for key in "${!config_values[@]}"; do
|
|
remote_value=$(kenaito_get "$key")
|
|
if [ -n "$remote_value" ]; then
|
|
config_values["$key"]="$remote_value"
|
|
fi
|
|
done
|
|
|
|
# 统计配置数量
|
|
count=0
|
|
for key in "${!_KENAITO_CONFIGS[@]}"; do
|
|
count=$((count + 1))
|
|
done
|
|
echo "loaded $count configs from remote"
|
|
echo ""
|
|
else
|
|
echo "Failed to init config client, using local defaults"
|
|
echo ""
|
|
fi
|
|
|
|
# 显示当前配置
|
|
echo "Current configs:"
|
|
for key in $(echo "${!config_values[@]}" | tr ' ' '\n' | sort); do
|
|
echo " $key = ${config_values[$key]}"
|
|
done
|
|
|
|
echo ""
|
|
echo "Listening for config changes... (press Ctrl+C to stop)"
|
|
|
|
# 信号处理
|
|
trap 'echo ""; echo "Shutting down..."; exit 0' INT TERM
|
|
|
|
# 同步循环
|
|
while true; do
|
|
kenaito_sync_once
|
|
sleep "$KENAITO_SYNC_INTERVAL"
|
|
done
|