argus/src/sys/tests/scripts/11_restart_agent_reregister.sh

105 lines
2.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TEST_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
TMP_DIR="$TEST_ROOT/tmp"
REPO_ROOT="$(cd "$TEST_ROOT/../../.." && pwd)"
API_BASE="http://localhost:32300/api/v1/master"
if [[ -f "$TEST_ROOT/.env" ]]; then
set -a
# shellcheck disable=SC1090
source "$TEST_ROOT/.env"
set +a
else
source "$REPO_ROOT/scripts/common/build_user.sh"
load_build_user
fi
ID_B="$(cat "$TMP_DIR/node_id_b")"
IP0_B="$(cat "$TMP_DIR/initial_ip_b")"
detail_before="$TMP_DIR/node_b_before.json"
curl -fsS "$API_BASE/nodes/$ID_B" -o "$detail_before"
LAST0=$(python3 - "$detail_before" <<'PY'
import json,sys
node=json.load(open(sys.argv[1]))
print(node.get("last_updated",""))
PY
)
IP_BEFORE=$(python3 - "$detail_before" <<'PY'
import json,sys
node=json.load(open(sys.argv[1]))
print(node.get("meta_data",{}).get("ip",""))
PY
)
if [[ "$IP_BEFORE" != "$IP0_B" ]]; then
echo "[ERR] Expected initial IP $IP0_B for node-b, got $IP_BEFORE" >&2
exit 1
fi
compose() {
if docker compose version >/dev/null 2>&1; then
docker compose "$@"
else
docker-compose "$@"
fi
}
echo "[INFO] Recreating node-b with static IP 172.29.0.200..."
pushd "$TEST_ROOT" >/dev/null
compose -p argus-sys rm -sf node-b || true
popd >/dev/null
docker rm -f argus-node-b >/dev/null 2>&1 || true
AGENT_BIN_PATH="$(cat "$TMP_DIR/agent_binary_path")"
docker run -d \
--name argus-node-b \
--hostname dev-yyrshare-uuuu10-ep2f-pod-0 \
--network argus-sys-net \
--ip 172.29.0.200 \
--dns 172.29.0.2 \
-e MASTER_ENDPOINT=http://master.argus.com:3000 \
-e REPORT_INTERVAL_SECONDS=2 \
-e ARGUS_BUILD_UID=${ARGUS_BUILD_UID:-2133} \
-e ARGUS_BUILD_GID=${ARGUS_BUILD_GID:-2015} \
-e ES_HOST=es \
-e ES_PORT=9200 \
-p 2021:2020 \
-v "$TEST_ROOT/private-nodeb/argus/agent/dev-yyrshare-uuuu10-ep2f-pod-0:/private/argus/agent/dev-yyrshare-uuuu10-ep2f-pod-0" \
-v "$AGENT_BIN_PATH:/usr/local/bin/argus-agent:ro" \
-v "$SCRIPT_DIR/node_entrypoint.sh:/usr/local/bin/node-entrypoint.sh:ro" \
-v "$REPO_ROOT/src/log/fluent-bit/build/start-fluent-bit.sh:/assets/start-fluent-bit.sh:ro" \
-v "$REPO_ROOT/src/log/fluent-bit/build/etc:/assets/fluent-bit/etc:ro" \
-v "$REPO_ROOT/src/log/fluent-bit/build/packages:/assets/fluent-bit/packages:ro" \
--entrypoint /usr/local/bin/node-entrypoint.sh \
ubuntu:22.04 >/dev/null
echo "[INFO] Waiting for node-b to re-register with new IP..."
for _ in {1..40}; do
sleep 3
if curl -fsS "$API_BASE/nodes/$ID_B" -o "$TMP_DIR/node_b_after.json"; then
if python3 - "$TMP_DIR/node_b_after.json" "$LAST0" <<'PY'
import json,sys
node=json.load(open(sys.argv[1]))
last0=sys.argv[2]
ip=node.get("meta_data",{}).get("ip")
lu=node.get("last_updated")
assert ip=="172.29.0.200"
assert lu and lu!=last0
PY
then
echo "[OK] node-b re-registered with new IP 172.29.0.200"
exit 0
fi
fi
done
echo "[ERR] node-b did not update to IP 172.29.0.200 in time" >&2
exit 1