Update import-disk-image.sh

This commit is contained in:
MacRimi 2025-01-26 19:40:00 +01:00 committed by GitHub
parent c7cc9f4e94
commit 97261bf491
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,68 +1,111 @@
#!/bin/bash
# Ruta donde están las imágenes de disco
# ProxMenu - A menu-driven script for Proxmox VE administration
# Copyright (c) 2024 ProxMenu
# Author: MacRimi
# License: MIT
# https://raw.githubusercontent.com/MacRimi/ProxMenux/main/LICENSE
# Source utility functions
source "/usr/local/share/proxmenux/utils.sh"
# Path where disk images are stored
IMAGES_DIR="/var/lib/vz/template/images/"
# Mensaje inicial
# Check dependencies
check_dependencies qm whiptail jq
# Initial setup
if ! [ -d "$IMAGES_DIR" ]; then
msg_info "$(translate 'Creating images directory...')"
mkdir -p "$IMAGES_DIR"
msg_ok "$(translate 'Images directory created')"
fi
whiptail --title "Importar Imagen de Disco" --msgbox "Por favor, asegúrate de tener las imágenes de disco que quieres importar en la siguiente ubicación:\n\n$IMAGES_DIR\n\nFormatos soportados: .img, .qcow2, .vmdk." 12 60
# Display initial message
whiptail --title "$(translate 'Import Disk Image')" --msgbox "$(translate 'Please ensure that the disk images you want to import are located in:')\n\n$IMAGES_DIR\n\n$(translate 'Supported formats: .img, .qcow2, .vmdk.')" 12 60
# 1. Seleccionar VM
# 1. Select VM
msg_info "$(translate 'Getting VM list...')"
VM_LIST=$(qm list | awk 'NR>1 {print $1, $2}')
if [ -z "$VM_LIST" ]; then
whiptail --title "Error" --msgbox "No hay VMs disponibles en el sistema." 8 40
msg_error "$(translate 'No VMs available in the system')"
exit 1
fi
msg_ok "$(translate 'VM list retrieved')"
VMID=$(whiptail --title "Seleccionar VM" --menu "Selecciona la VM a la que deseas importar la imagen de disco:" 15 60 8 $VM_LIST 3>&1 1>&2 2>&3)
VMID=$(whiptail --title "$(translate 'Select VM')" --menu "$(translate 'Select the VM where you want to import the disk image:')" 15 60 8 $VM_LIST 3>&1 1>&2 2>&3)
if [ -z "$VMID" ]; then
whiptail --title "Error" --msgbox "No se seleccionó ninguna VM." 8 40
msg_error "$(translate 'No VM selected')"
exit 1
fi
# 2. Seleccionar las imágenes de disco
IMAGENES=$(whiptail --title "Seleccionar Imágenes de Disco" --checklist "Selecciona las imágenes de disco para importar:" 20 60 10 $(ls "$IMAGES_DIR" | grep -E "\.(img|qcow2|vmdk)$" | awk '{print $1, "OFF"}') 3>&1 1>&2 2>&3)
# 2. Select disk images
msg_info "$(translate 'Scanning for disk images...')"
IMAGES=$(ls "$IMAGES_DIR" | grep -E "\.(img|qcow2|vmdk)$")
if [ -z "$IMAGES" ]; then
msg_error "$(translate 'No compatible disk images found in') $IMAGES_DIR"
exit 1
fi
msg_ok "$(translate 'Disk images found')"
if [ -z "$IMAGENES" ]; then
whiptail --title "Error" --msgbox "No se seleccionó ninguna imagen." 8 40
IMAGE_LIST=""
for img in $IMAGES; do
IMAGE_LIST="$IMAGE_LIST $img OFF"
done
SELECTED_IMAGES=$(whiptail --title "$(translate 'Select Disk Images')" --checklist "$(translate 'Select the disk images to import:')" 20 60 10 $IMAGE_LIST 3>&1 1>&2 2>&3)
if [ -z "$SELECTED_IMAGES" ]; then
msg_error "$(translate 'No images selected')"
exit 1
fi
# 3. Importar cada imagen seleccionada
for IMAGEN in $IMAGENES; do
# Quitar comillas de la imagen seleccionada
IMAGEN=$(echo "$IMAGEN" | tr -d '"')
# 3. Import each selected image
for IMAGE in $SELECTED_IMAGES; do
# Remove quotes from selected image
IMAGE=$(echo "$IMAGE" | tr -d '"')
# 4. Seleccionar tipo de disco para cada imagen
INTERFAZ=$(whiptail --title "Tipo de Interfaz" --menu "Selecciona el tipo de disco para la imagen: $IMAGEN" 15 40 4 \
"sata" "Añadir como SATA" \
"scsi" "Añadir como SCSI" \
"virtio" "Añadir como VirtIO" \
"ide" "Añadir como IDE" 3>&1 1>&2 2>&3)
# 4. Select disk type for each image
INTERFACE=$(whiptail --title "$(translate 'Interface Type')" --menu "$(translate 'Select disk type for image:') $IMAGE" 15 40 4 \
"sata" "$(translate 'Add as SATA')" \
"scsi" "$(translate 'Add as SCSI')" \
"virtio" "$(translate 'Add as VirtIO')" \
"ide" "$(translate 'Add as IDE')" 3>&1 1>&2 2>&3)
if [ -z "$INTERFAZ" ]; then
whiptail --title "Error" --msgbox "No se seleccionó un tipo de disco para $IMAGEN." 8 40
exit 1
if [ -z "$INTERFACE" ]; then
msg_error "$(translate 'No disk type selected for') $IMAGE"
continue
fi
FULL_PATH="$IMAGES_DIR/$IMAGEN"
FULL_PATH="$IMAGES_DIR/$IMAGE"
# 5. Añadir la imagen con índice automático
# 5. Add image with automatic index
INDEX=0
# Buscar índice disponible
while qm config "$VMID" | grep -q "${INTERFAZ}${INDEX}"; do
# Find available index
while qm config "$VMID" | grep -q "${INTERFACE}${INDEX}"; do
((INDEX++))
done
whiptail --title "Importando" --infobox "Importando imagen: $IMAGEN como ${INTERFAZ}${INDEX}..." 8 40
qm importdisk "$VMID" "$FULL_PATH" "local-lvm" --format "$INTERFAZ"
qm set "$VMID" -${INTERFAZ}${INDEX} "$FULL_PATH"
msg_info "$(translate 'Importing image:') $IMAGE $(translate 'as') ${INTERFACE}${INDEX}..."
(
if qm importdisk "$VMID" "$FULL_PATH" "local-lvm" --format "$INTERFACE"; then
if qm set "$VMID" -${INTERFACE}${INDEX} "$FULL_PATH"; then
msg_ok "$(translate 'Successfully imported') $IMAGE $(translate 'as') ${INTERFACE}${INDEX}"
else
msg_error "$(translate 'Failed to configure disk') ${INTERFACE}${INDEX} $(translate 'for VM') $VMID"
fi
else
msg_error "$(translate 'Failed to import') $IMAGE"
fi
) &
spinner
wait
done
whiptail --title "Completado" --msgbox "Todas las imágenes se importaron correctamente." 8 40
msg_ok "$(translate 'All selected images have been processed')"
exit 0