105 lines
2.9 KiB
Bash
Executable File
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
|