51 lines
1.6 KiB
Bash
Executable File
51 lines
1.6 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)"
|
||
|
||
# 直接根据 container_name 获取容器ID,避免 compose project 名称不一致导致查找失败
|
||
cid_by_name() {
|
||
docker ps -aqf "name=^$1$"
|
||
}
|
||
|
||
echo "[INFO] Verifying DNS routing via bind..."
|
||
|
||
pushd "$TEST_ROOT" >/dev/null
|
||
|
||
# Check master IP file exists in shared private
|
||
MASTER_FILE="$TEST_ROOT/private/argus/etc/master.argus.com"
|
||
if [[ ! -f "$MASTER_FILE" ]]; then
|
||
echo "[ERR] master.argus.com file missing at $MASTER_FILE" >&2
|
||
exit 1
|
||
fi
|
||
MASTER_IP_HOST="$(cat "$MASTER_FILE" | tr -d '\r\n' || true)"
|
||
echo "[INFO] master.argus.com file content: ${MASTER_IP_HOST}"
|
||
|
||
# dig inside bind container
|
||
BIN_ID="$(cid_by_name argus-bind-sys)"
|
||
if [[ -n "$BIN_ID" ]]; then
|
||
DIG_IP="$(docker exec "$BIN_ID" dig +short master.argus.com A | tail -n1 || true)"
|
||
echo "[INFO] dig(master.argus.com) from bind container -> $DIG_IP"
|
||
if [[ -z "$DIG_IP" ]]; then
|
||
echo "[ERR] bind did not resolve master.argus.com" >&2; exit 1
|
||
fi
|
||
else
|
||
echo "[WARN] bind container not found; skip dig"
|
||
fi
|
||
|
||
for node in argus-node-a argus-node-b; do
|
||
CID="$(cid_by_name "$node")"
|
||
echo "[INFO] Checking resolution inside $node..."
|
||
if ! docker exec "$CID" getent hosts master.argus.com >/dev/null 2>&1; then
|
||
echo "[ERR] $node cannot resolve master.argus.com" >&2
|
||
exit 1
|
||
fi
|
||
RES="$(docker exec "$CID" getent hosts master.argus.com | awk '{print $1}' | head -n1)"
|
||
echo "[OK] $node resolved master.argus.com -> $RES"
|
||
done
|
||
|
||
popd >/dev/null
|
||
|
||
echo "[OK] DNS routing verified"
|