diff --git a/scripts/vm/zimaos.sh b/scripts/vm/zimaos.sh index 7fe8e22..55b06bf 100644 --- a/scripts/vm/zimaos.sh +++ b/scripts/vm/zimaos.sh @@ -869,7 +869,6 @@ function select_storage_volume() { - # ========================================================== # Create VM # ========================================================== @@ -881,9 +880,9 @@ function create_vm() { -serial0 socket msg_ok "Create a $NAME" + BOOT_ORDER_LIST=() # Array to store boot order for all disks - -# Check if UEFI (OVMF) is being used =================== + # Check if UEFI (OVMF) is being used =================== if [[ "$BIOS_TYPE" == *"ovmf"* ]]; then msg_info "Configuring EFI disk" @@ -933,16 +932,11 @@ function create_vm() { fi fi - fi -# ========================================================== - # Select storage volume for loader ======================= - LOADER_STORAGE=$(select_storage_volume $VMID "loader disk") - #Run the command in the background and capture its PID qm importdisk $VMID ${LOADER_FILE} $LOADER_STORAGE > /tmp/import_log_$VMID.txt 2>&1 & import_pid=$! @@ -967,10 +961,6 @@ function create_vm() { msg_ok "Loader imported successfully to ${CL}${BL}$LOADER_STORAGE${GN}${CL}" fi - - - - STORAGE_TYPE=$(pvesm status -storage "$LOADER_STORAGE" | awk 'NR>1 {print $2}') if [[ "$STORAGE_TYPE" == "btrfs" || "$STORAGE_TYPE" == "dir" || "$STORAGE_TYPE" == "nfs" ]]; then @@ -982,9 +972,8 @@ function create_vm() { if [[ -n "$IMPORTED_REF" && -n "$IMPORTED_ID" ]]; then if qm set "$VMID" -ide0 "$IMPORTED_REF" >/dev/null 2>&1; then msg_ok "Configured loader disk as ide0" - qm set "$VMID" -delete "$IMPORTED_ID" >/dev/null 2>&1 else - msg_error "Failed to assign loader disk to ide0" + msg_error "Failed to assign loader disk" ERROR_FLAG=true fi else @@ -1002,81 +991,68 @@ function create_vm() { fi fi - - - - result=$(qm set "$VMID" -boot order=ide0 2>&1) - if [[ $? -eq 0 ]]; then - msg_ok "Loader configured as boot device." - else - ERROR_FLAG=true - fi - -# ========================================================== - -if [ "$DISK_TYPE" = "virtual" ]; then - if [ ${#VIRTUAL_DISKS[@]} -eq 0 ]; then - msg_error "No virtual disks configured." - exit_script - fi - - DISK_INFO="" - CONSOLE_DISK_INFO="" - - for i in "${!VIRTUAL_DISKS[@]}"; do - IFS=':' read -r STORAGE SIZE <<< "${VIRTUAL_DISKS[$i]}" - - STORAGE_TYPE=$(pvesm status -storage $STORAGE | awk 'NR>1 {print $2}') - case $STORAGE_TYPE in - nfs | dir) - DISK_EXT=".raw" - DISK_REF="$VMID/" - ;; - *) - DISK_EXT="" - DISK_REF="" - ;; - esac - - - DISK_NUM=$((i+1)) - DISK_NAME="vm-${VMID}-disk-${DISK_NUM}${DISK_EXT}" - INTERFACE_ID="${INTERFACE_TYPE}$i" - - - if [[ "$STORAGE_TYPE" == "btrfs" || "$STORAGE_TYPE" == "dir" || "$STORAGE_TYPE" == "nfs" ]]; then - - msg_info "Creating virtual disk (format=raw) for $STORAGE_TYPE..." - if ! qm set "$VMID" -$INTERFACE_ID "$STORAGE:$SIZE,format=raw$DISCARD_OPTS" >/dev/null 2>&1; then - msg_error "Failed to assign disk $DISK_NUM ($INTERFACE_ID) on $STORAGE" - ERROR_FLAG=true - continue - fi - else - - msg_info "Allocating virtual disk for $STORAGE_TYPE..." - if ! pvesm alloc "$STORAGE" "$VMID" "$DISK_NAME" "$SIZE"G >/dev/null 2>&1; then - msg_error "Failed to allocate virtual disk $DISK_NUM" - ERROR_FLAG=true - continue - fi - if ! qm set "$VMID" -$INTERFACE_ID "$STORAGE:${DISK_REF}$DISK_NAME$DISCARD_OPTS" >/dev/null 2>&1; then - msg_error "Failed to configure virtual disk as $INTERFACE_ID" - ERROR_FLAG=true - continue - fi + if [ "$DISK_TYPE" = "virtual" ]; then + if [ ${#VIRTUAL_DISKS[@]} -eq 0 ]; then + msg_error "No virtual disks configured." + exit_script fi - msg_ok "Configured virtual disk as $INTERFACE_ID, ${SIZE}GB on ${CL}${BL}$STORAGE${CL} ${GN}" + DISK_INFO="" + CONSOLE_DISK_INFO="" - + for i in "${!VIRTUAL_DISKS[@]}"; do + IFS=':' read -r STORAGE SIZE <<< "${VIRTUAL_DISKS[$i]}" + + STORAGE_TYPE=$(pvesm status -storage $STORAGE | awk 'NR>1 {print $2}') + case $STORAGE_TYPE in + nfs | dir) + DISK_EXT=".raw" + DISK_REF="$VMID/" + ;; + *) + DISK_EXT="" + DISK_REF="" + ;; + esac + + DISK_NUM=$((i+1)) + DISK_NAME="vm-${VMID}-disk-${DISK_NUM}${DISK_EXT}" + INTERFACE_ID="${INTERFACE_TYPE}$i" + + # Create virtual disk + if [[ "$STORAGE_TYPE" == "btrfs" || "$STORAGE_TYPE" == "dir" || "$STORAGE_TYPE" == "nfs" ]]; then + + msg_info "Creating virtual disk (format=raw) for $STORAGE_TYPE..." + if ! qm set "$VMID" -$INTERFACE_ID "$STORAGE:$SIZE,format=raw$DISCARD_OPTS" >/dev/null 2>&1; then + msg_error "Failed to assign disk $DISK_NUM ($INTERFACE_ID) on $STORAGE" + ERROR_FLAG=true + continue + fi + else + + msg_info "Allocating virtual disk for $STORAGE_TYPE..." + if ! pvesm alloc "$STORAGE" "$VMID" "$DISK_NAME" "$SIZE"G >/dev/null 2>&1; then + msg_error "Failed to allocate virtual disk $DISK_NUM" + ERROR_FLAG=true + continue + fi + if ! qm set "$VMID" -$INTERFACE_ID "$STORAGE:${DISK_REF}$DISK_NAME$DISCARD_OPTS" >/dev/null 2>&1; then + msg_error "Failed to configure virtual disk as $INTERFACE_ID" + ERROR_FLAG=true + continue + fi + fi + + msg_ok "Configured virtual disk as $INTERFACE_ID, ${SIZE}GB on ${CL}${BL}$STORAGE${CL} ${GN}" + + BOOT_ORDER_LIST+=("$INTERFACE_ID") + + # Add information to the description + DISK_INFO="${DISK_INFO}
Virtual Disk $DISK_NUM: ${SIZE}GB on ${STORAGE} (${INTERFACE_TYPE}${i})
" + CONSOLE_DISK_INFO="${CONSOLE_DISK_INFO}- Virtual Disk $DISK_NUM: ${SIZE}GB on ${STORAGE} ($INTERFACE_ID)\n" + done - DISK_INFO="${DISK_INFO}Virtual Disk $DISK_NUM: ${SIZE}GB on ${STORAGE} (${INTERFACE_TYPE}${i})
" - CONSOLE_DISK_INFO="${CONSOLE_DISK_INFO}- Virtual Disk $DISK_NUM: ${SIZE}GB on ${STORAGE} ($INTERFACE_ID)\n" - done - - # HTML description HTML_DESC="