Created
October 21, 2014 11:48
-
-
Save andersevenrud/8b1a85ebf28d4221972b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# Script for migrating a VHD | |
# | |
# Anders Evenrud <[email protected]> | |
# | |
# http://serverfault.com/questions/508251/migrating-xenserver-vms-from-intel-to-amd-servers | |
# http://wiki.xen.org/wiki/Proposal:_Disk_import/export | |
# http://wiki.xen.org/wiki/XAPI_Command_Line_Interface | |
# http://cristiansan.wordpress.com/2011/09/29/xenserver-create-a-vm-from-cli/ | |
# http://heylinux.com/en/?p=238 | |
# http://docs.vmd.citrix.com/XenServer/4.0.1/reference/ch05s04.html | |
# http://xenserver.org/partners/developing-products-for-xenserver/18-sdk-development/114-import-export-vdi.html | |
# http://zderadicka.eu/migrating-xend-virtual-machines-to-xapi-platform-xcpxenserver/ | |
VM_LABEL="${1}" | |
VM_CPUS="2" | |
VM_MEM="512MiB" | |
VM_DISK_SIZE="20GiB" | |
VM_DISK_IMAGE="/tmp/foo.vhd" | |
VM_TEMPLATE="Other install media" | |
VM_MAX_VCPUS=$VM_CPUS | |
VM_STARTUP_VCPUS=$VM_CPUS | |
VM_MIN_STATIC_MEM=$VM_MEM | |
VM_MAX_STATIC_MEM=$VM_MIN_STATIC_MEM | |
VM_MIN_DYNAMIC_MEM=$VM_MEM | |
VM_MAX_DYNAMIC_MEM=$VM_MIN_DYNAMIC_MEM | |
VM_DISK_IMAGE_FORMAT="${VM_DISK_IMAGE#*.}" | |
if [ -z "$VM_LABEL" ]; then | |
echo "Cannot create a new VM without a name/label" | |
exit 1 | |
fi | |
if [ -z "$VM_DISK_IMAGE" ]; then | |
echo "Cannot create a new VM without disk image" | |
exit 1 | |
fi | |
# | |
# 1: Detect storage and networks | |
# | |
SR_UUID=$(xe sr-list | grep -C 1 "Local" | grep uuid | awk '{print $5}') | |
if [ -z "$SR_UUID" ]; then | |
echo "Failed to discover Storage Record UUID" | |
exit 1 | |
fi | |
echo "Using Storage Record: ${SR_UUID}" | |
NETWORK_UID=$(xe network-list bridge=xenbr0 --minimal) | |
if [ -z "$NETWORK_UUID" ]; then | |
echo "Failed to discover Network UUID" | |
# exit 1 | |
fi | |
echo "Using Network: ${NETWORK_UUID}" | |
# | |
# 2: Create new VM | |
# | |
echo "Creating Virtual Machine '${VM_LABEL}':" | |
echo "Configuring with ${VM_MAX_VCPUS} CPUs, ${VM_MAX_DYNAMIC_MEM} RAM, ${VM_DISK_SIZE} HDD" | |
echo "Importing VDI (${VM_DISK_IMAGE_FORMAT}) ${VM_DISK_IMAGE}" | |
echo "Press any key to continue.... or CTRL+C to cancel" | |
read | |
VM_UUID=$(xe vm-install new-name-label=$VM_LABEL sr-uuid=$SR_UUID template=$VM_TEMPLATE) | |
if [ -z "$VM_UUID" ]; then | |
echo "Failed to create VM" | |
exit 1 | |
fi | |
echo "New VM has UUID: ${VM_UUID}" | |
# Set up hardware parameters | |
xe vm-param-set VCPUs-max=$VM_MAX_VCPUS uuid=$VM_UUID | |
xe vm-param-set VCPUs-at-startup=$VM_STARTUP_VCPUS uuid=$VM_UUID | |
xe vm-param-set memory-static-max=$VM_MAX_STATIC_MEM uuid=$VM_UUID | |
xe vm-param-set memory-dynamic-max=$VM_MAX_DYNAMIC_MEM uuid=$VM_UUID | |
xe vm-param-set memory-dynamic-min=$VM_MIN_DYNAMIC_MEM uuid=$VM_UUID | |
xe vm-param-set memory-static-min=$VM_MIN_STATIC_MEM uuid=$VM_UUID | |
# | |
# 3: Create disk and set bootable. Then import VDI | |
# | |
xe vm-disk-add uuid=$VM_UUID sr-uuid=$SR_UUID device=0 disk-size=$VM_DISK_SIZE | |
DISK_UUID=$(xe vbd-list vm-uuid=$VM_UUID userdevice=0 params=uuid --minimal) | |
if [ -z "$DISK_UUID" ]; | |
echo "Failed to create HDD" | |
exit 1 | |
then | |
xe vbd-param-set bootable=true uuid=$DISK_UUID | |
xe vdi-import uuid=$DISK_UUID filename=$VM_DISK_IMAGE format=$VM_DISK_IMAGE_FORMAT #--progress | |
# | |
# 4: Create network connection | |
# | |
NET_UUID=$(xe vif-create vm-uuid=$VM_UUID network-uuid=$NETWORK_UUID mac=random device=0) | |
if [ -z "$NET_UUID" ]; then | |
echo "Failed to create NET" | |
exit 1 | |
fi | |
echo "New Network Interface has UUID: ${DISK_UUID}" | |
# | |
# 5: Done | |
# | |
#echo "Starting up VM..." | |
#xe vm-start uuid=$VM_UUID | |
echo "Done ... :)" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment