[#37] 增加sys/swarm_tests(cpu) ;单独构建的node bundle镜像

This commit is contained in:
2025-11-06 16:43:14 +08:00
parent 94b3e910b3
commit d1fad4a05a
34 changed files with 2494 additions and 32 deletions

View File

@@ -0,0 +1,16 @@
ARG BASE_IMAGE=argus-sys-metric-test-node:latest
FROM ${BASE_IMAGE}
ARG CLIENT_VER
LABEL org.opencontainers.image.title="argus-sys-metric-test-node-bundle" \
org.opencontainers.image.version="${CLIENT_VER}" \
org.opencontainers.image.description="Metric test node with embedded client package"
WORKDIR /
# bundle files are provided at build time into ./bundle in build context
COPY bundle/ /bundle/
COPY node-bootstrap.sh /usr/local/bin/node-bootstrap.sh
RUN chmod +x /usr/local/bin/node-bootstrap.sh
ENTRYPOINT ["/usr/local/bin/node-bootstrap.sh"]

View File

@@ -0,0 +1,2 @@
argus-metric_*.tar.gz

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,99 @@
#!/usr/bin/env bash
set -euo pipefail
echo "[BOOT] node bundle starting"
INSTALL_DIR="/opt/argus-metric"
BUNDLE_DIR="/bundle"
installed_ok=0
# 1) already installed?
if [[ -L "$INSTALL_DIR/current" && -d "$INSTALL_DIR/current" ]]; then
echo "[BOOT] client already installed at $INSTALL_DIR/current"
else
# 2) try local bundle first (replicate setup.sh layout: move to /opt/argus-metric/versions/<ver> and run install.sh)
tarball=$(ls -1 "$BUNDLE_DIR"/argus-metric_*.tar.gz 2>/dev/null | head -1 || true)
if [[ -n "${tarball:-}" ]]; then
echo "[BOOT] installing from local bundle: $(basename "$tarball")"
tmp=$(mktemp -d)
tar -xzf "$tarball" -C "$tmp"
# locate root containing version.json
root="$tmp"
if [[ ! -f "$root/version.json" ]]; then
sub=$(find "$tmp" -mindepth 1 -maxdepth 1 -type d | head -n1 || true)
[[ -n "$sub" && -f "$sub/version.json" ]] && root="$sub"
fi
if [[ ! -f "$root/version.json" ]]; then
echo "[BOOT][WARN] version.json not found in bundle; fallback to FTP"
else
ver=$(sed -n 's/.*"version"\s*:\s*"\([^"]\+\)".*/\1/p' "$root/version.json" | head -n1)
if [[ -z "$ver" ]]; then
echo "[BOOT][WARN] failed to parse version from version.json; fallback to FTP"
else
target_root="/opt/argus-metric"
version_dir="$target_root/versions/$ver"
mkdir -p "$version_dir"
# move contents into version dir
shopt -s dotglob
mv "$root"/* "$version_dir/" 2>/dev/null || true
shopt -u dotglob
# run component installer within version dir
if [[ -f "$version_dir/install.sh" ]]; then
chmod +x "$version_dir/install.sh" 2>/dev/null || true
(cd "$version_dir" && ./install.sh "$version_dir")
echo "$ver" > "$target_root/LATEST_VERSION" 2>/dev/null || true
ln -sfn "$version_dir" "$target_root/current" 2>/dev/null || true
if [[ -L "$target_root/current" && -d "$target_root/current" ]]; then
installed_ok=1
echo "[BOOT] local bundle install OK: version=$ver"
else
echo "[BOOT][WARN] current symlink not present after install; will rely on healthcheck to confirm"
fi
else
echo "[BOOT][WARN] install.sh missing under $version_dir; fallback to FTP"
fi
fi
fi
fi
# 3) fallback: use FTP setup if not installed
if [[ ! -L "$INSTALL_DIR/current" && "$installed_ok" -eq 0 ]]; then
echo "[BOOT] fallback to FTP setup"
if [[ -z "${FTPIP:-}" || -z "${FTP_USER:-}" || -z "${FTP_PASSWORD:-}" ]]; then
echo "[BOOT][ERROR] FTP variables not set (FTPIP/FTP_USER/FTP_PASSWORD)" >&2
exit 1
fi
curl -u "$FTP_USER:$FTP_PASSWORD" -fsSL "ftp://$FTPIP:21/setup.sh" -o /tmp/setup.sh
chmod +x /tmp/setup.sh
/tmp/setup.sh --server "$FTPIP" --user "$FTP_USER" --password "$FTP_PASSWORD" --port 21
fi
fi
# 4) ensure agent is running; start if needed (inherits env: MASTER_ENDPOINT/AGENT_*)
if ! pgrep -x argus-agent >/dev/null 2>&1; then
echo "[BOOT] starting argus-agent (not detected)"
setsid /usr/local/bin/argus-agent >/var/log/argus-agent.log 2>&1 < /dev/null &
fi
# 5) post-install selfcheck (best-effort) and wait for node.json
for i in {1..30}; do
if compgen -G "$INSTALL_DIR/versions/*/check_health.sh" > /dev/null; then
bash "$INSTALL_DIR"/versions/*/check_health.sh || true
break
fi
sleep 2
done
host="$(hostname)"
state_dir="/private/argus/agent/${host}"
mkdir -p "$state_dir" 2>/dev/null || true
for i in {1..60}; do
if [[ -s "$state_dir/node.json" ]]; then
echo "[BOOT] node state present: $state_dir/node.json"
break
fi
sleep 2
done
echo "[BOOT] ready; entering sleep"
exec sleep infinity