#!/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" >&2 echo "Usage: $0 vm_name_orig vm_name_clone" >&2 exit 1 fi VM_NAME=$1 VM_CLONE=$2 VM_DIR="/tmp/${UID}/vm" # Create User-VM-Dir and link system VM-Images [[ -d "${VM_DIR}" ]] || mkdir -p "${VM_DIR}" sudo /usr/local/bin/link-images.sh # change to image-directory cd "${VM_DIR}" if { [[ ! -f "${VM_NAME}.xml" ]] && [[ ! -f "/lmn/vm/${VM_NAME}.xml" ]]; } || [[ ! -f "${VM_NAME}.qcow2" ]]; then echo "xml or qcow2 File does not exists." >&2 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" # copy machine-definition-file if [[ -f "${VM_NAME}.xml" ]]; then cp "${VM_NAME}.xml" "${VM_NAME}-${VM_CLONE}.xml" elif [[ -f "/lmn/vm/${VM_NAME}.xml" ]]; then cp "/lmn/vm/${VM_NAME}.xml" "${VM_NAME}-${VM_CLONE}.xml" else echo "no machine definition file found" >&2 exit 1 fi # hardware addresses need to be removed, libvirt will assign # new addresses automatically sed -i /uuid/d "${VM_NAME}-${VM_CLONE}.xml" sed -i '/mac address/d' "${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}/" "${VM_NAME}-${VM_CLONE}.xml"