#!/usr/bin/bash # create 1st level-Clones set -eu # if less than two arguments supplied, display usage if [ $# -ne 2 ] then echo "This script takes as input the name of the VM to clone" echo "Usage: $0 vm_name_orig vm_name_clone" exit 1 fi VM_NAME=$1 VM_CLONE=$2 if [ ! -f "xml/$VM_NAME.xml" -a -f "$VM_NAME.gcow2" ]; then echo "xml or qcow2 File does not exists." exit 1 fi qemu-img create -f qcow2 -F qcow2 -b $VM_NAME.qcow2 $VM_NAME-$VM_CLONE.qcow2 chmod a-w $VM_NAME-$VM_CLONE.qcow2 # virsh --connect=qemu:///system dumpxml $VM_NAME > xml/$VM_NAME_$VM_CLONE.xml cp xml/$VM_NAME.xml xml/$VM_NAME-$VM_CLONE.xml # hardware addresses need to be removed, libvirt will assign # new addresses automatically sed -i /uuid/d xml/$VM_NAME-$VM_CLONE.xml sed -i '/mac address/d' xml/$VM_NAME-$VM_CLONE.xml # and actually rename the vm: (this also updates the storage path) sed -i s/$VM_NAME/$VM_NAME-$VM_CLONE/ xml/$VM_NAME-$VM_CLONE.xml