mirror of
https://github.com/GoodOlClint/PSProxmoxVE.git
synced 2026-09-04 03:05:32 +00:00
ci: storage VM setup diagnoses its own network and logs phases
Run 168 burned 13 minutes to report 'unable to locate package tgt' when the real failure was dead egress from the CI VLAN (apt lists never updated). The setup script now probes gateway/internet/DNS from inside the VM and prints the verdicts, fails apt fast with the real error, and marks each phase. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
committed by
GitHub
parent
e219766452
commit
5d0b384508
@@ -38,8 +38,21 @@ done
|
||||
# sshd accepts logins before cloud-init's first-boot work (and its apt/dpkg
|
||||
# locks) is finished; a degraded cloud-init result is fine for our purposes,
|
||||
# and a hung cloud-init must fail fast, not eat the job timeout.
|
||||
echo "Waiting for cloud-init to finish (up to 300s)..."
|
||||
timeout 300 ssh ${SSH_OPTS} "ubuntu@${STORAGE_IP}" \
|
||||
"sudo cloud-init status --wait" || true
|
||||
"sudo cloud-init status --wait" \
|
||||
|| echo "WARNING: cloud-init did not finish cleanly within 300s — continuing"
|
||||
|
||||
echo "Network probe from the storage VM:"
|
||||
ssh ${SSH_OPTS} "ubuntu@${STORAGE_IP}" '
|
||||
ip -4 -brief addr; ip route show default
|
||||
ping -c1 -W2 "$(ip route show default | awk "{print \$3; exit}")" >/dev/null 2>&1 \
|
||||
&& echo "gateway ping: OK" || echo "gateway ping: FAIL"
|
||||
ping -c1 -W2 1.1.1.1 >/dev/null 2>&1 \
|
||||
&& echo "internet ping: OK" || echo "internet ping: FAIL"
|
||||
getent hosts archive.ubuntu.com >/dev/null 2>&1 \
|
||||
&& echo "DNS resolve: OK" || echo "DNS resolve: FAIL (resolv.conf: $(grep ^nameserver /etc/resolv.conf | tr "\n" " "))"
|
||||
' || true
|
||||
|
||||
echo "Copying answer files..."
|
||||
ssh ${SSH_OPTS} "ubuntu@${STORAGE_IP}" \
|
||||
@@ -53,11 +66,23 @@ ssh ${SSH_OPTS} "ubuntu@${STORAGE_IP}" \
|
||||
set -euo pipefail
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# cloud-init's first-boot apt activity can hold the dpkg lock briefly
|
||||
for i in $(seq 1 30); do
|
||||
apt-get update -qq >/dev/null 2>&1 && break
|
||||
# cloud-init's first-boot apt activity can hold the dpkg lock briefly;
|
||||
# a network/DNS failure must fail fast with the real apt error, not fall
|
||||
# through to a misleading "package not found" from empty lists.
|
||||
echo "Updating apt package lists..."
|
||||
for i in $(seq 1 12); do
|
||||
if apt_out=$(apt-get update -qq 2>&1); then
|
||||
break
|
||||
fi
|
||||
echo "apt-get update attempt $i/12 failed"
|
||||
if [ "$i" -eq 12 ]; then
|
||||
echo "$apt_out" >&2
|
||||
echo "ERROR: apt-get update never succeeded — check CI VLAN egress/DNS" >&2
|
||||
exit 1
|
||||
fi
|
||||
sleep 5
|
||||
done
|
||||
echo "Installing nfs-kernel-server, tgt, docker.io..."
|
||||
apt-get install -y -qq nfs-kernel-server tgt docker.io >/dev/null
|
||||
|
||||
# Ubuntu's nfs-kernel-server package does not create /etc/exports.d
|
||||
@@ -80,6 +105,7 @@ systemctl enable --now nfs-kernel-server tgt >/dev/null || {
|
||||
}
|
||||
systemctl restart tgt
|
||||
|
||||
echo "Starting answer server container..."
|
||||
docker rm -f pvetest-answer-server >/dev/null 2>&1 || true
|
||||
docker run -d --name pvetest-answer-server --restart unless-stopped \
|
||||
--network host \
|
||||
|
||||
Reference in New Issue
Block a user