mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2025-08-26 06:11:15 +00:00
Update menu create VM
This commit is contained in:
229
scripts/vm/vm_configurator.sh
Normal file
229
scripts/vm/vm_configurator.sh
Normal file
@@ -0,0 +1,229 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# ================================================
|
||||
# VM Configuration Module - ProxMenux
|
||||
# ================================================
|
||||
|
||||
|
||||
|
||||
BASE_DIR="/usr/local/share/proxmenux"
|
||||
UTILS_FILE="$BASE_DIR/utils.sh"
|
||||
VENV_PATH="/opt/googletrans-env"
|
||||
|
||||
if [[ -f "$UTILS_FILE" ]]; then
|
||||
source "$UTILS_FILE"
|
||||
fi
|
||||
|
||||
load_language
|
||||
initialize_cache
|
||||
|
||||
|
||||
function confirm_vm_creation() {
|
||||
clear
|
||||
local CONFIRM_TITLE="${HN:-$(translate "New Virtual Machine")}"
|
||||
local CONFIRM_MSG="$(translate "This will create a new VM") $CONFIRM_TITLE. $(translate "Proceed?")"
|
||||
|
||||
if ! whiptail --backtitle "ProxMenux" --title "$CONFIRM_TITLE" --yesno "$CONFIRM_MSG" 10 60; then
|
||||
header_info
|
||||
msg_warn "$(translate "VM creation cancelled by user.")"
|
||||
sleep 1
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
function generate_mac() {
|
||||
local GEN_MAC="02"
|
||||
for i in {1..5}; do
|
||||
BYTE=$(printf "%02X" $((RANDOM % 256)))
|
||||
GEN_MAC="${GEN_MAC}:${BYTE}"
|
||||
done
|
||||
echo "$GEN_MAC"
|
||||
}
|
||||
|
||||
function load_default_vm_config() {
|
||||
local os_type="$1"
|
||||
|
||||
VMID=$(pvesh get /cluster/nextid 2>/dev/null || echo "100")
|
||||
MAC=$(generate_mac)
|
||||
|
||||
case "$os_type" in
|
||||
"1")
|
||||
|
||||
CORE_COUNT="2"
|
||||
RAM_SIZE="8192"
|
||||
MACHINE=" -machine q35"
|
||||
BIOS_TYPE=" -bios ovmf"
|
||||
START_VM="no"
|
||||
;;
|
||||
"2")
|
||||
|
||||
CORE_COUNT="4"
|
||||
RAM_SIZE="8192"
|
||||
MACHINE=" -machine q35"
|
||||
BIOS_TYPE=" -bios ovmf"
|
||||
START_VM="no"
|
||||
;;
|
||||
"3")
|
||||
|
||||
CORE_COUNT="2"
|
||||
RAM_SIZE="4096"
|
||||
MACHINE=" -machine q35"
|
||||
BIOS_TYPE=" -bios ovmf"
|
||||
START_VM="no"
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
[[ -z "$CORE_COUNT" ]] && CORE_COUNT="2"
|
||||
[[ -z "$RAM_SIZE" ]] && RAM_SIZE="4096"
|
||||
|
||||
CPU_TYPE=" -cpu host"
|
||||
BRG="vmbr0"
|
||||
VLAN=""
|
||||
MTU=""
|
||||
SERIAL_PORT="socket"
|
||||
FORMAT=""
|
||||
DISK_CACHE=""
|
||||
|
||||
}
|
||||
|
||||
function apply_default_vm_config() {
|
||||
echo -e "${DEF}$(translate "Applying default VM configuration")${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "Virtual Machine ID")${CL}: ${BGN}$VMID${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "Hostname")${CL}: ${BGN}$HN${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "CPU Cores")${CL}: ${BGN}$CORE_COUNT${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "RAM Size")${CL}: ${BGN}$RAM_SIZE MiB${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "Machine Type")${CL}: ${BGN}${MACHINE/ -machine /}${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "BIOS Type")${CL}: ${BGN}${BIOS_TYPE/ -bios /}${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "CPU Model")${CL}: ${BGN}${CPU_TYPE/ -cpu /}${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "Network Bridge")${CL}: ${BGN}$BRG${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "MAC Address")${CL}: ${BGN}$MAC${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "Start VM after creation")${CL}: ${BGN}$START_VM${CL}"
|
||||
echo -e
|
||||
echo -e "${DEF}$(translate "Creating VM with the above configuration")${CL}"
|
||||
}
|
||||
|
||||
|
||||
|
||||
function configure_vm_advanced() {
|
||||
header_info
|
||||
|
||||
# Obtener el siguiente ID libre
|
||||
NEXTID=$(pvesh get /cluster/nextid 2>/dev/null || echo "100")
|
||||
[[ -z "$MAC" ]] && MAC=$(generate_mac)
|
||||
|
||||
# VMID
|
||||
while true; do
|
||||
VMID=$(whiptail --backtitle "ProxMenux" \
|
||||
--inputbox "$(translate "Set Virtual Machine ID")" 8 60 "$NEXTID" \
|
||||
--title "VM ID" --cancel-button Exit 3>&1 1>&2 2>&3) || return 1
|
||||
|
||||
if [[ -z "$VMID" ]]; then
|
||||
VMID="$NEXTID"
|
||||
fi
|
||||
|
||||
if qm status "$VMID" &>/dev/null || pct status "$VMID" &>/dev/null; then
|
||||
msg_error "$(translate "ID already in use. Please choose another.")"
|
||||
sleep 1
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# Hostname
|
||||
HN=$(whiptail --backtitle "ProxMenux" \
|
||||
--inputbox "$(translate "Set Hostname")" 8 60 "$HN" \
|
||||
--title "Hostname" 3>&1 1>&2 2>&3) || return 1
|
||||
[[ -z "$HN" ]] && HN="vm-proxmenux"
|
||||
|
||||
# Machine Type
|
||||
MACHINE_TYPE=$(whiptail --backtitle "ProxMenux" --title "$(translate "Machine Type")" \
|
||||
--radiolist "$(translate "Select machine type")" 10 60 2 \
|
||||
"q35" "QEMU q35" ON \
|
||||
"i440fx" "Legacy i440fx" OFF 3>&1 1>&2 2>&3) || return 1
|
||||
[[ "$MACHINE_TYPE" == "q35" ]] && MACHINE=" -machine q35" && FORMAT="" || MACHINE="" && FORMAT=",efitype=4m"
|
||||
|
||||
# BIOS
|
||||
BIOS=$(whiptail --backtitle "ProxMenux" --title "$(translate "BIOS Type")" \
|
||||
--radiolist "$(translate "Choose BIOS type")" 10 60 2 \
|
||||
"ovmf" "UEFI (OVMF)" ON \
|
||||
"seabios" "Legacy BIOS (SeaBIOS)" OFF 3>&1 1>&2 2>&3) || return 1
|
||||
BIOS_TYPE=" -bios $BIOS"
|
||||
|
||||
# CPU Type
|
||||
CPU_CHOICE=$(whiptail --backtitle "ProxMenux" --title "$(translate "CPU Model")" \
|
||||
--radiolist "$(translate "Select CPU model")" 10 60 2 \
|
||||
"host" "Host (recommended)" ON \
|
||||
"kvm64" "Generic KVM64" OFF 3>&1 1>&2 2>&3) || return 1
|
||||
[[ "$CPU_CHOICE" == "host" ]] && CPU_TYPE=" -cpu host" || CPU_TYPE=" -cpu kvm64"
|
||||
|
||||
# Core Count
|
||||
CORE_COUNT=$(whiptail --backtitle "ProxMenux" --inputbox "$(translate "Number of CPU cores (default: 2)")" \
|
||||
8 60 "${CORE_COUNT:-2}" --title "CPU Cores" 3>&1 1>&2 2>&3) || return 1
|
||||
[[ -z "$CORE_COUNT" ]] && CORE_COUNT="2"
|
||||
|
||||
# RAM
|
||||
RAM_SIZE=$(whiptail --backtitle "ProxMenux" --inputbox "$(translate "Amount of RAM in MiB (default: 4096)")" \
|
||||
8 60 "${RAM_SIZE:-4096}" --title "RAM" 3>&1 1>&2 2>&3) || return 1
|
||||
[[ -z "$RAM_SIZE" ]] && RAM_SIZE="4096"
|
||||
|
||||
# Bridge
|
||||
BRG=$(whiptail --backtitle "ProxMenux" --inputbox "$(translate "Set network bridge (default: vmbr0)")" \
|
||||
8 60 "${BRG:-vmbr0}" --title "Bridge" 3>&1 1>&2 2>&3) || return 1
|
||||
|
||||
# MAC
|
||||
MAC_INPUT=$(whiptail --backtitle "ProxMenux" --inputbox "$(translate "Set MAC Address (leave empty for automatic)")" \
|
||||
8 60 "$MAC" --title "MAC Address" 3>&1 1>&2 2>&3) || return 1
|
||||
[[ -z "$MAC_INPUT" ]] && MAC=$(generate_mac) || MAC="$MAC_INPUT"
|
||||
|
||||
# VLAN
|
||||
VLAN_INPUT=$(whiptail --backtitle "ProxMenux" --inputbox "$(translate "Set VLAN (leave empty for none)")" \
|
||||
8 60 "" --title "VLAN" 3>&1 1>&2 2>&3) || return 1
|
||||
VLAN=""
|
||||
[[ -n "$VLAN_INPUT" ]] && VLAN=",tag=$VLAN_INPUT"
|
||||
|
||||
# MTU
|
||||
MTU_INPUT=$(whiptail --backtitle "ProxMenux" --inputbox "$(translate "Set MTU (leave empty for default)")" \
|
||||
8 60 "" --title "MTU" 3>&1 1>&2 2>&3) || return 1
|
||||
MTU=""
|
||||
[[ -n "$MTU_INPUT" ]] && MTU=",mtu=$MTU_INPUT"
|
||||
|
||||
# Serial Port
|
||||
if (whiptail --backtitle "ProxMenux" --title "Serial Port" \
|
||||
--yesno "$(translate "Do you want to enable the serial port") (socket)?" 10 60); then
|
||||
SERIAL_PORT="socket"
|
||||
else
|
||||
SERIAL_PORT=""
|
||||
fi
|
||||
|
||||
# Start VM
|
||||
if (whiptail --backtitle "ProxMenux" --title "$(translate "Start VM")" \
|
||||
--yesno "$(translate "Start VM after creation?")" 10 60); then
|
||||
START_VM="yes"
|
||||
else
|
||||
START_VM="no"
|
||||
fi
|
||||
|
||||
echo -e "${CUS}$(translate "Using advanced configuration")${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "Virtual Machine ID")${CL}: ${BGN}$VMID${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "Hostname")${CL}: ${BGN}$HN${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "CPU Cores")${CL}: ${BGN}$CORE_COUNT${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "RAM Size")${CL}: ${BGN}$RAM_SIZE MiB${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "Machine Type")${CL}: ${BGN}${MACHINE/ -machine /}${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "BIOS Type")${CL}: ${BGN}${BIOS_TYPE/ -bios /}${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "CPU Model")${CL}: ${BGN}${CPU_TYPE/ -cpu /}${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "Network Bridge")${CL}: ${BGN}$BRG${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "MAC Address")${CL}: ${BGN}$MAC${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "VLAN")${CL}: ${BGN}${VLAN:-None}${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "Interface MTU")${CL}: ${BGN}${MTU:-Default}${CL}"
|
||||
echo -e " ${TAB}${DGN}$(translate "Start VM")${CL}: ${BGN}$START_VM${CL}"
|
||||
echo -e
|
||||
echo -e "${CUS}$(translate "Creating VM with the above configuration")${CL}"
|
||||
sleep 1
|
||||
|
||||
|
||||
|
||||
return 0
|
||||
}
|
Reference in New Issue
Block a user