#!/usr/bin/env bash set -euo pipefail # shellcheck source=common.sh source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh" ensure_env_file ensure_paths_defined TMP_DIR_LOCAL="$TMP_DIR" mkdir -p "$TMP_DIR_LOCAL" API_BASE="http://localhost:32300/api/v1/master" log "Waiting for agent nodes to register" extract_node() { local name="$1"; local output="$2"; local json_file="$3" python3 - "$name" "$output" "$json_file" <<'PY' import json, sys, pathlib name = sys.argv[1] out = pathlib.Path(sys.argv[2]) json_file = sys.argv[3] with open(json_file, 'r') as fh: data = json.load(fh) node = next((n for n in data if n.get("name") == name), None) if node: out.write_text(node["id"]) print(node["id"]) PY } ID_A=""; ID_B="" for _ in {1..60}; do sleep 2 resp=$(curl -fsS "$API_BASE/nodes" 2>/dev/null || true) [[ -z "$resp" ]] && continue if ! echo "$resp" | head -c1 | grep -q '\['; then continue fi echo "$resp" > "$TMP_DIR_LOCAL/nodes_list.json" ID_A=$(extract_node "$HOST_A" "$TMP_DIR_LOCAL/node_id_a" "$TMP_DIR_LOCAL/nodes_list.json" 2>/dev/null || true) ID_B=$(extract_node "$HOST_B" "$TMP_DIR_LOCAL/node_id_b" "$TMP_DIR_LOCAL/nodes_list.json" 2>/dev/null || true) if [[ -s "$TMP_DIR_LOCAL/node_id_a" && -s "$TMP_DIR_LOCAL/node_id_b" ]]; then break fi done if [[ ! -s "$TMP_DIR_LOCAL/node_id_a" || ! -s "$TMP_DIR_LOCAL/node_id_b" ]]; then echo "[ERR] Agents did not register in time" >&2 exit 1 fi node_detail() { local id="$1"; local out="$2" curl -fsS "$API_BASE/nodes/$id" -o "$out" } node_detail "$(cat "$TMP_DIR_LOCAL/node_id_a")" "$TMP_DIR_LOCAL/detail_a.json" node_detail "$(cat "$TMP_DIR_LOCAL/node_id_b")" "$TMP_DIR_LOCAL/detail_b.json" python3 - "$TMP_DIR_LOCAL/detail_a.json" "$TMP_DIR_LOCAL/initial_ip_a" <<'PY' import json, sys, pathlib node=json.load(open(sys.argv[1])) ip=node.get("meta_data",{}).get("ip") assert ip, "missing ip" pathlib.Path(sys.argv[2]).write_text(ip) PY python3 - "$TMP_DIR_LOCAL/detail_b.json" "$TMP_DIR_LOCAL/initial_ip_b" <<'PY' import json, sys, pathlib node=json.load(open(sys.argv[1])) ip=node.get("meta_data",{}).get("ip") assert ip, "missing ip" pathlib.Path(sys.argv[2]).write_text(ip) PY NODE_JSON_A="$SYS_DEBUG_PRIVATE_NODEA/argus/agent/$HOST_A/node.json" NODE_JSON_B="$SYS_DEBUG_PRIVATE_NODEB/argus/agent/$HOST_B/node.json" [[ -f "$NODE_JSON_A" ]] || { echo "[ERR] node.json missing for $HOST_A" >&2; exit 1; } [[ -f "$NODE_JSON_B" ]] || { echo "[ERR] node.json missing for $HOST_B" >&2; exit 1; } log "Agents registered: $(cat "$TMP_DIR_LOCAL/node_id_a") , $(cat "$TMP_DIR_LOCAL/node_id_b")"