85 lines
3.1 KiB
Bash
85 lines
3.1 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# Import cloud image directly to RBD pool using rbd import
|
||
|
|
# This is the correct method for copying images to ceph-rbd storage
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
SOURCE_IMAGE="/var/lib/vz/template/iso/ubuntu-22.04-cloud.img"
|
||
|
|
RBD_POOL="rbd"
|
||
|
|
RBD_IMAGE_NAME="template_cache_ubuntu_22_04_cloud"
|
||
|
|
|
||
|
|
echo "═══════════════════════════════════════════════════════════════════════════════"
|
||
|
|
echo " IMPORT IMAGE TO RBD POOL"
|
||
|
|
echo "═══════════════════════════════════════════════════════════════════════════════"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Check if running on r630-01
|
||
|
|
HOSTNAME=$(hostname)
|
||
|
|
if [ "$HOSTNAME" != "r630-01" ]; then
|
||
|
|
echo "⚠️ WARNING: This script should be run on r630-01"
|
||
|
|
echo " Current hostname: $HOSTNAME"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "Step 1: Checking if source image exists..."
|
||
|
|
if [ ! -f "$SOURCE_IMAGE" ]; then
|
||
|
|
echo "❌ Source image not found: $SOURCE_IMAGE"
|
||
|
|
echo " Available images in /var/lib/vz/template/iso/:"
|
||
|
|
ls -lh /var/lib/vz/template/iso/*.img 2>/dev/null | head -5 || echo " (no .img files found)"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
IMAGE_SIZE=$(du -h "$SOURCE_IMAGE" | cut -f1)
|
||
|
|
echo "✅ Source image found: $SOURCE_IMAGE ($IMAGE_SIZE)"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo "Step 2: Checking RBD pool..."
|
||
|
|
if ! ceph osd pool ls 2>/dev/null | grep -q "^${RBD_POOL}$"; then
|
||
|
|
echo "❌ RBD pool '$RBD_POOL' does not exist"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
echo "✅ RBD pool '$RBD_POOL' exists"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo "Step 3: Checking if image already exists in RBD pool..."
|
||
|
|
if rbd ls -p "$RBD_POOL" 2>/dev/null | grep -q "^${RBD_IMAGE_NAME}$"; then
|
||
|
|
echo "⚠️ Image '$RBD_IMAGE_NAME' already exists in RBD pool"
|
||
|
|
echo " Removing existing image to overwrite..."
|
||
|
|
rbd rm -p "$RBD_POOL" "$RBD_IMAGE_NAME" 2>/dev/null || true
|
||
|
|
echo " ✅ Existing image removed"
|
||
|
|
fi
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
echo "Step 4: Importing image to RBD pool..."
|
||
|
|
echo " This may take a few minutes for large images..."
|
||
|
|
echo " Source: $SOURCE_IMAGE"
|
||
|
|
echo " Target: rbd/$RBD_IMAGE_NAME"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
if rbd import "$SOURCE_IMAGE" "${RBD_POOL}/${RBD_IMAGE_NAME}" --image-format 2 2>&1; then
|
||
|
|
echo "✅ Image imported successfully to RBD pool"
|
||
|
|
else
|
||
|
|
echo "❌ RBD import failed"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "Step 5: Verifying imported image..."
|
||
|
|
if rbd ls -p "$RBD_POOL" 2>/dev/null | grep -q "^${RBD_IMAGE_NAME}$"; then
|
||
|
|
RBD_SIZE=$(rbd info -p "$RBD_POOL" "$RBD_IMAGE_NAME" 2>/dev/null | grep "size" | awk '{print $2, $3}' || echo "unknown")
|
||
|
|
echo "✅ Image verified in RBD pool"
|
||
|
|
echo " Image: ${RBD_POOL}/${RBD_IMAGE_NAME}"
|
||
|
|
echo " Size: $RBD_SIZE"
|
||
|
|
echo ""
|
||
|
|
echo "⚠️ Note: Proxmox may need to refresh to see this image."
|
||
|
|
echo " The image is now available in the RBD pool and can be used by VMs."
|
||
|
|
echo " The provider will search for images in ceph-rbd storage."
|
||
|
|
else
|
||
|
|
echo "⚠️ Image not found in RBD pool after import"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "✅ Import complete!"
|
||
|
|
|