mirror of
https://github.com/RGBCube/vmware-to-proxmox-migration-script
synced 2025-07-26 07:57:46 +00:00
added option to use local lvm or local zfs with default of local lvm
This commit is contained in:
parent
539a32d427
commit
ce568c831e
1 changed files with 20 additions and 16 deletions
|
@ -1,9 +1,10 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# To-do:
|
# To-do:
|
||||||
# - Add ability to choose between local-lvm and local-zfs - currently defaults to local-lvm
|
# - Add ability to choose between local-lvm and local-zfs
|
||||||
# - Find way to carry over MAC
|
# - Find way to carry over MAC
|
||||||
# - Attempt to find way to fix networking post-migration automatically
|
# - Attempt to find way to fix networking post-migration automatically
|
||||||
# - Get script to pull specs of ESXi VM and use them when creating Proxmox VM
|
# - Get script to pull specs of ESXi VM and use them when creating Proxmox VM
|
||||||
|
# - Add functionality to remove old .ova files from local machine
|
||||||
|
|
||||||
### PREREQUISITES ###
|
### PREREQUISITES ###
|
||||||
# - Install ovftool on the machine you are running the script on
|
# - Install ovftool on the machine you are running the script on
|
||||||
|
@ -39,6 +40,7 @@ PROXMOX_USERNAME="root" # Set your Proxmox server username
|
||||||
VM_NAME=$(get_input "Enter the name of the VM to migrate")
|
VM_NAME=$(get_input "Enter the name of the VM to migrate")
|
||||||
VLAN_TAG=$(get_input "Enter the VLAN tag" "80")
|
VLAN_TAG=$(get_input "Enter the VLAN tag" "80")
|
||||||
VM_ID=$(get_input "Enter the VM ID you would like to use in Proxmox")
|
VM_ID=$(get_input "Enter the VM ID you would like to use in Proxmox")
|
||||||
|
STORAGE_TYPE=$(get_input "Enter the storage type (local-lvm or local-zfs)" "local-lvm")
|
||||||
|
|
||||||
# Export VM from VMware
|
# Export VM from VMware
|
||||||
function export_vmware_vm() {
|
function export_vmware_vm() {
|
||||||
|
@ -68,79 +70,81 @@ function create_proxmox_vm() {
|
||||||
echo "Error: Invalid VM ID '$VM_ID'. Please enter a numeric value."
|
echo "Error: Invalid VM ID '$VM_ID'. Please enter a numeric value."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
# Check for VM that already exists with provided VM ID
|
# Check if a VM with the given ID already exists
|
||||||
if ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "qm status $VM_ID" &> /dev/null; then
|
if ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "qm status $VM_ID" &> /dev/null; then
|
||||||
echo "Error: VM with ID '$VM_ID' already exists. Please enter a different ID."
|
echo "Error: VM with ID '$VM_ID' already exists. Please enter a different ID."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Extract OVF from OVA
|
||||||
echo "Extracting OVF from OVA..."
|
echo "Extracting OVF from OVA..."
|
||||||
ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "tar -xvf /var/vm-migration/$VM_NAME.ova -C /var/vm-migration/"
|
ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "tar -xvf /var/vm-migration/$VM_NAME.ova -C /var/vm-migration/"
|
||||||
|
|
||||||
|
# Find the OVF file
|
||||||
local ovf_file=$(ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "find /var/vm-migration -name '*.ovf'")
|
local ovf_file=$(ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "find /var/vm-migration -name '*.ovf'")
|
||||||
echo "Found OVF file: $ovf_file"
|
echo "Found OVF file: $ovf_file"
|
||||||
|
|
||||||
|
# Find the VMDK file
|
||||||
echo "Finding .vmdk file..."
|
echo "Finding .vmdk file..."
|
||||||
local vmdk_file=$(ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "find /var/vm-migration -name '$VM_NAME-disk*.vmdk'")
|
local vmdk_file=$(ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "find /var/vm-migration -name '$VM_NAME-disk*.vmdk'")
|
||||||
echo "Found .vmdk file: $vmdk_file"
|
echo "Found .vmdk file: $vmdk_file"
|
||||||
|
|
||||||
# Check for ensuring only one .vmdk file is found
|
# Ensure that only one .vmdk file is found
|
||||||
if [[ $(echo "$vmdk_file" | wc -l) -ne 1 ]]; then
|
if [[ $(echo "$vmdk_file" | wc -l) -ne 1 ]]; then
|
||||||
echo "Error: Multiple or no .vmdk files found."
|
echo "Error: Multiple or no .vmdk files found."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Convert .vmdk file to raw format
|
# Convert the VMDK file to raw format
|
||||||
local raw_file="$VM_NAME.raw"
|
local raw_file="$VM_NAME.raw"
|
||||||
local raw_path="/var/tmp/$raw_file"
|
local raw_path="/var/tmp/$raw_file"
|
||||||
echo "Converting .vmdk file to raw format..."
|
echo "Converting .vmdk file to raw format..."
|
||||||
ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "qemu-img convert -f vmdk -O raw '$vmdk_file' '$raw_path'"
|
ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "qemu-img convert -f vmdk -O raw '$vmdk_file' '$raw_path'"
|
||||||
|
|
||||||
# Create the VM
|
# Create the VM with UEFI BIOS, VLAN tag, and specify the SCSI hardware
|
||||||
echo "Creating VM in Proxmox with UEFI, VLAN tag, and SCSI hardware..."
|
echo "Creating VM in Proxmox with UEFI, VLAN tag, and SCSI hardware..."
|
||||||
echo "VM ID is: $VM_ID"
|
echo "VM ID is: $VM_ID"
|
||||||
ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "qm create $VM_ID --name $VM_NAME --memory 2048 --cores 2 --net0 virtio,bridge=vmbr69,tag=$VLAN_TAG --bios ovmf --scsihw virtio-scsi-pci"
|
ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "qm create $VM_ID --name $VM_NAME --memory 2048 --cores 2 --net0 virtio,bridge=vmbr69,tag=$VLAN_TAG --bios ovmf --scsihw virtio-scsi-pci"
|
||||||
|
|
||||||
# Import disk to local-lvm storage
|
# Import the disk to the selected storage
|
||||||
echo "Importing disk to local-lvm storage..."
|
echo "Importing disk to $STORAGE_TYPE storage..."
|
||||||
ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "qm importdisk $VM_ID $raw_path local-lvm"
|
ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "qm importdisk $VM_ID $raw_path $STORAGE_TYPE"
|
||||||
|
|
||||||
# Attach disk to VM and set it as first boot device
|
# Attach the disk to the VM and set it as the first boot device
|
||||||
local disk_name="vm-$VM_ID-disk-0"
|
local disk_name="vm-$VM_ID-disk-0"
|
||||||
echo "Attaching disk to VM and setting it as the first boot device..."
|
echo "Attaching disk to VM and setting it as the first boot device..."
|
||||||
ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "qm set $VM_ID --scsi0 local-lvm:$disk_name --boot c --bootdisk scsi0"
|
ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "qm set $VM_ID --scsi0 local-lvm:$disk_name --boot c --bootdisk scsi0"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Clean up files from /var/vm-migrations on proxmox host
|
# Clear out temp files from /var/vm-migrations
|
||||||
function cleanup_migration_directory() {
|
function cleanup_migration_directory() {
|
||||||
echo "Cleaning up /var/vm-migration directory..."
|
echo "Cleaning up /var/vm-migration directory..."
|
||||||
ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "rm -rf /var/vm-migration/*"
|
ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "rm -rf /var/vm-migration/*"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Clean up .ova files from local
|
|
||||||
function cleanup_local_ova_files() {
|
function cleanup_local_ova_files() {
|
||||||
echo "Removing local .ova files..."
|
echo "Removing local .ova files..."
|
||||||
rm -f "$VM_NAME.ova"
|
rm -f "$VM_NAME.ova"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Add an EFI disk to the VM
|
# Add an EFI disk to the VM after all other operations have concluded
|
||||||
function add_efi_disk_to_vm() {
|
function add_efi_disk_to_vm() {
|
||||||
echo "Adding EFI disk to the VM..."
|
echo "Adding EFI disk to the VM..."
|
||||||
local vg_name="pve" #LVM volume group name - should be this by default
|
local vg_name="pve" # The actual LVM volume group name
|
||||||
local efi_disk_size="4M"
|
local efi_disk_size="4M"
|
||||||
local efi_disk="vm-$VM_ID-disk-1"
|
local efi_disk="vm-$VM_ID-disk-1"
|
||||||
|
|
||||||
# Create EFI disk as a LV
|
# Create the EFI disk as a logical volume
|
||||||
echo "Creating EFI disk as a logical volume..."
|
echo "Creating EFI disk as a logical volume..."
|
||||||
ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "lvcreate -L $efi_disk_size -n $efi_disk $vg_name" || {
|
ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "lvcreate -L $efi_disk_size -n $efi_disk $vg_name" || {
|
||||||
echo "Failed to create EFI disk logical volume."
|
echo "Failed to create EFI disk logical volume."
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Attach EFI disk to VM
|
# Attach the EFI disk to the VM
|
||||||
echo "Attaching EFI disk to VM..."
|
echo "Attaching EFI disk to VM..."
|
||||||
ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "qm set $VM_ID --efidisk0 local-lvm:$efi_disk,size=$efi_disk_size,efitype=4m,pre-enrolled-keys=1" || {
|
ssh $PROXMOX_USERNAME@$PROXMOX_SERVER "qm set $VM_ID --efidisk0 $STORAGE_TYPE:$efi_disk,size=$efi_disk_size,efitype=4m,pre-enrolled-keys=1" || {
|
||||||
echo "Failed to add EFI disk to VM."
|
echo "Failed to add EFI disk to VM."
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue