Files
resf-testing-repo/scripts/bootstrap_golden.sh
Stephen Simpson bb829c9b63 updates
2025-11-26 08:15:00 -06:00

108 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
# Bootstrap the golden image by booting it, running sparrowdo --bootstrap, then shutting down
# This should be run ONCE after creating the golden image
GOLDEN_IMAGE="$1"
SSH_PRIVATE_KEY="${2:-$HOME/.ssh/id_rsa}"
if [ -z "$GOLDEN_IMAGE" ]; then
echo "Usage: $0 <golden_image_path> [ssh_private_key]"
exit 1
fi
if [ ! -f "$GOLDEN_IMAGE" ]; then
echo "ERROR: Golden image not found: $GOLDEN_IMAGE"
exit 1
fi
BOOTSTRAP_VM="bootstrap-golden-$(date +%s)"
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo "=========================================="
echo "Bootstrapping Golden Image"
echo "=========================================="
echo "Golden Image: $GOLDEN_IMAGE"
echo "Bootstrap VM: $BOOTSTRAP_VM"
echo "SSH Key: $SSH_PRIVATE_KEY"
echo ""
# Provision temporary VM from golden image
echo "[1/4] Provisioning temporary VM..."
VM_IP=$("${SCRIPT_DIR}/provision_vm.sh" "$BOOTSTRAP_VM" "$GOLDEN_IMAGE" 60)
if [ "$VM_IP" = "ERROR" ] || [ -z "$VM_IP" ]; then
echo "ERROR: Failed to provision bootstrap VM"
exit 1
fi
VM_IP=$(echo "$VM_IP" | tail -1)
echo "VM IP: $VM_IP"
# Wait for SSH
echo ""
echo "[2/4] Waiting for SSH to be ready..."
for i in {1..30}; do
if ssh -i "$SSH_PRIVATE_KEY" \
-o StrictHostKeyChecking=no \
-o ConnectTimeout=5 \
-o UserKnownHostsFile=/dev/null \
rocky@${VM_IP} 'echo "SSH ready"' 2>/dev/null; then
echo "SSH connection established"
break
fi
sleep 2
done
# Run sparrowdo bootstrap
echo ""
echo "[3/4] Running Sparrowdo bootstrap..."
if sparrowdo \
--host="${VM_IP}" \
--ssh_user=rocky \
--ssh_private_key="${SSH_PRIVATE_KEY}" \
--ssh_args="-o StrictHostKeyChecking=no -o ConnectTimeout=10 -o UserKnownHostsFile=/dev/null" \
--bootstrap \
--color; then
echo "Bootstrap completed successfully!"
else
echo "WARNING: Bootstrap may have failed"
fi
# Shutdown the VM cleanly to save changes
echo ""
echo "[4/4] Shutting down VM to save changes..."
ssh -i "$SSH_PRIVATE_KEY" \
-o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/dev/null \
rocky@${VM_IP} 'sudo shutdown -h now' 2>/dev/null || true
# Wait for VM to shut down
echo "Waiting for VM to shut down..."
sleep 10
for i in {1..30}; do
if ! sudo virsh -c qemu:///system list --name 2>/dev/null | grep -q "$BOOTSTRAP_VM"; then
echo "VM has shut down"
break
fi
sleep 2
done
# Clean up VM definition (disk contains the bootstrapped state)
echo "Cleaning up VM definition..."
sudo virsh -c qemu:///system undefine "$BOOTSTRAP_VM" 2>/dev/null || true
echo ""
echo "=========================================="
echo "Bootstrap Complete"
echo "=========================================="
echo "Golden image has been bootstrapped with Sparrowdo"
echo "The image now contains:"
echo " - Raku/Rakudo runtime"
echo " - Sparrowdo and dependencies"
echo " - All required testing tools"
echo ""
echo "This image can now be used for testing without"
echo "running bootstrap on each test VM."
echo "=========================================="