Skip to content

Instantly share code, notes, and snippets.

@markus-k
Last active August 29, 2015 14:04
Show Gist options
  • Save markus-k/15ec50863ef14c823900 to your computer and use it in GitHub Desktop.
Save markus-k/15ec50863ef14c823900 to your computer and use it in GitHub Desktop.
Script for cloning libvirt machines
#!/bin/bash
function usage() {
echo "Usage: $0 NEW-NAME"
}
BASEVM_NAME=base-debian7
BASEVM_HDD=${BASEVM_NAME}-sda
NEWVM_NAME=$1
NEWVM_HDD=${NEWVM_NAME}-sda
STORAGEPOOL=default
VIRSH_FLAGS=
if [ "$NEWVM_NAME" == "" ]; then
usage
exit 1
fi
echo "Cloning domain $BASEVM_NAME to $NEWVM_NAME"
virt-clone -o $BASEVM_NAME -n $NEWVM_NAME
echo "Cloning volume $BASEVM_HDD to $NEWVM_HDD"
virsh $VIRSH_FLAGS vol-clone --pool $STORAGEPOOL $BASEVM_HDD $NEWVM_HDD
# edit the new vm's volume name
TEMPFILE=$(mktemp).xml
TEMPFILE2=$(mktemp).xml
virsh $VIRSH_FLAGS dumpxml $NEWVM_NAME > $TEMPFILE
xmlstarlet ed -u "//domain/devices/disk[1]/source/@volume" -v "$NEWVM_HDD" $TEMPFILE > $TEMPFILE2
virsh $VIRSH_FLAGS define $TEMPFILE2
rm $TEMPFILE $TEMPFILE2
echo "Created new domain $NEWVM_NAME."
echo "Now ssh or tty into your new vm (probably $BASEVM_NAME-2.local) and execute:"
echo "echo \"$NEWVM_NAME\" > /etc/hostname"
echo "sed -i \"s/$BASEVM_NAME/$NEWVM_NAME/g\" /etc/hosts"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment