From 97261bf491087324efbb6541d5d5de47573201a5 Mon Sep 17 00:00:00 2001 From: MacRimi <123239993+MacRimi@users.noreply.github.com> Date: Sun, 26 Jan 2025 19:40:00 +0100 Subject: [PATCH] Update import-disk-image.sh --- scripts/import-disk-image.sh | 107 ++++++++++++++++++++++++----------- 1 file changed, 75 insertions(+), 32 deletions(-) diff --git a/scripts/import-disk-image.sh b/scripts/import-disk-image.sh index e03d3a6..c362bd5 100644 --- a/scripts/import-disk-image.sh +++ b/scripts/import-disk-image.sh @@ -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