Improve the script logic
Key improvements made: Enhanced find_fedora_iso function: Takes dish_name as parameter to understand which version to select Parses dish names to identify "rawhide" or numeric versions like "43", "44", "45" Matches ISO files containing both "Fedora-Everything" and the version information Falls back gracefully if no exact match is found Backward compatibility: Maintained the original find_fedora_iso_old function for fallback behavior If no matching ISO is found based on dish name, falls back to existing behavior Smart version matching: For virtual-desktop_43 → looks for ISO containing "43" For virtual-desktop_rawhide → looks for ISO containing "Rawhide" Handles edge cases with proper fallbacks Improved robustness: Proper error handling for missing directories Ensures matched files actually exist and are files (not directories) Handles multiple version patterns
This commit is contained in:
@@ -4,8 +4,59 @@
|
|||||||
DEFAULT_MEMORY=4096
|
DEFAULT_MEMORY=4096
|
||||||
DEFAULT_DISK_SIZE=10
|
DEFAULT_DISK_SIZE=10
|
||||||
|
|
||||||
# Function to find Fedora ISO
|
# Function to find Fedora ISO based on dish name
|
||||||
find_fedora_iso() {
|
find_fedora_iso() {
|
||||||
|
local iso_dir="/var/lib/libvirt/isos"
|
||||||
|
local dish_name="$1"
|
||||||
|
local fedora_iso=""
|
||||||
|
|
||||||
|
# Check if directory exists
|
||||||
|
if [ -d "$iso_dir" ]; then
|
||||||
|
# Parse dish name to extract version or "rawhide"
|
||||||
|
local version=""
|
||||||
|
if [[ "$dish_name" == *"rawhide"* ]]; then
|
||||||
|
version="Rawhide"
|
||||||
|
elif [[ "$dish_name" == *"_43"* ]]; then
|
||||||
|
version="43"
|
||||||
|
elif [[ "$dish_name" == *"_44"* ]]; then
|
||||||
|
version="44"
|
||||||
|
elif [[ "$dish_name" == *"_45"* ]]; then
|
||||||
|
version="45"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If we found a version, try to match with that version in ISO name
|
||||||
|
if [ -n "$version" ]; then
|
||||||
|
if [ "$version" = "Rawhide" ]; then
|
||||||
|
# For rawhide, look for ISO with "Rawhide" in the name
|
||||||
|
fedora_iso=$(find "$iso_dir" -maxdepth 1 -name "Fedora-Everything*.iso" -type f | grep -i "rawhide" | head -n 1)
|
||||||
|
else
|
||||||
|
# For regular versions, look for ISO with that version number in the name
|
||||||
|
fedora_iso=$(find "$iso_dir" -maxdepth 1 -name "Fedora-Everything*.iso" -type f | grep -i "$version" | head -n 1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If no specific version match found, fallback to any Fedora-Everything ISO
|
||||||
|
if [ -z "$fedora_iso" ] || [ ! -f "$fedora_iso" ]; then
|
||||||
|
fedora_iso=$(find "$iso_dir" -maxdepth 1 -name "Fedora-Everything*.iso" -type f | head -n 1)
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# No version match found, fallback to any Fedora-Everything ISO
|
||||||
|
fedora_iso=$(find "$iso_dir" -maxdepth 1 -name "Fedora-Everything*.iso" -type f | head -n 1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If found, return the full path
|
||||||
|
if [ -n "$fedora_iso" ] && [ -f "$fedora_iso" ]; then
|
||||||
|
echo "$fedora_iso"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Return empty if no ISO found
|
||||||
|
echo ""
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to find Fedora ISO (backward compatibility)
|
||||||
|
find_fedora_iso_old() {
|
||||||
local iso_dir="/var/lib/libvirt/isos"
|
local iso_dir="/var/lib/libvirt/isos"
|
||||||
local fedora_iso=""
|
local fedora_iso=""
|
||||||
|
|
||||||
@@ -120,8 +171,14 @@ vm_name="${dish_name[$((choice - 1))]}"
|
|||||||
# Output the selected filename
|
# Output the selected filename
|
||||||
echo "You selected: $vm_name"
|
echo "You selected: $vm_name"
|
||||||
|
|
||||||
# Find Fedora ISO or use default location
|
# Find Fedora ISO based on the dish name
|
||||||
fedora_iso=$(find_fedora_iso)
|
fedora_iso=$(find_fedora_iso "$vm_name")
|
||||||
|
if [ -n "$fedora_iso" ]; then
|
||||||
|
location_param="$fedora_iso"
|
||||||
|
echo "Using local ISO: $fedora_iso"
|
||||||
|
else
|
||||||
|
# Fallback to original behavior if no specific ISO found
|
||||||
|
fedora_iso=$(find_fedora_iso_old)
|
||||||
if [ -n "$fedora_iso" ]; then
|
if [ -n "$fedora_iso" ]; then
|
||||||
location_param="$fedora_iso"
|
location_param="$fedora_iso"
|
||||||
echo "Using local ISO: $fedora_iso"
|
echo "Using local ISO: $fedora_iso"
|
||||||
@@ -129,6 +186,7 @@ else
|
|||||||
location_param="https://download.fedoraproject.org/pub/fedora/linux/releases/43/Everything/x86_64/os/"
|
location_param="https://download.fedoraproject.org/pub/fedora/linux/releases/43/Everything/x86_64/os/"
|
||||||
echo "Using default online repository"
|
echo "Using default online repository"
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# virt-install command with user-defined VM name
|
# virt-install command with user-defined VM name
|
||||||
virt-install \
|
virt-install \
|
||||||
|
|||||||
Reference in New Issue
Block a user