#!/bin/bash set -e if [[ $(/usr/bin/id -u) -ne 0 ]]; then sudo $(realpath $0) exit fi select_base_vm() { mapfile vms < <(virsh list --inactive --name) echo "All inactive VMs" >&2 printf "%s\n" ${vms[@]} | nl >&2 read -p "Index of base VM: " INDEX echo ${vms[$INDEX-1]} } die() { echo $* exit 1 } BASE_IMAGE="$(select_base_vm)" [ -z "$BASE_IMAGE" ] && die "No base image selected." read -p "Enter new image name: " NAME [ -z "$NAME" ] && die "No new image name." echo "Cloning..." virt-clone --quiet --original "$BASE_IMAGE" --auto-clone --name "$NAME" virsh desc --new-desc '' "$NAME" virsh desc --title --new-desc "clone/$NAME" "$NAME" echo "Cloning... Done." echo "Preparing..." virt-sysprep --quiet --domain "$NAME" --hostname "$NAME" echo "Preparing... Done."