summaryrefslogtreecommitdiff
path: root/vclone
diff options
context:
space:
mode:
Diffstat (limited to 'vclone')
-rwxr-xr-xvclone35
1 files changed, 35 insertions, 0 deletions
diff --git a/vclone b/vclone
new file mode 100755
index 0000000..e2c3194
--- /dev/null
+++ b/vclone
@@ -0,0 +1,35 @@
+#!/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"
+echo "Cloning... Done."
+echo "Preparing..."
+virt-sysprep --quiet --domain "$NAME" --hostname "$NAME"
+echo "Preparing... Done."