#!/bin/sh # depends on following packages: # apt-get install virtinst libvirt-bin dosfstools mtools kvm kvm-qemu # apt-get install -t wheezy util-linux # defaults VG='vg01' ETC='/etc/cloudinit' CONFIG="$ETC/cloudinit.cfg" VARDIR='/var/lib/libvirt/cloudinit' SCRIPTDIR='/usr/local/bin/leap_cloudadmin' . $CONFIG fail() { [ $# -eq 0 ] || echo "$@"; exit 1; } bad_usage() { usage 1>&2; [ $# -eq 0 ] || fail "$@"; exit 1; } usage() { cat <~/.mtoolsrc [ -e /var/lib/libvirt/cloudinit ] || ( mkdir /var/lib/libvirt/cloudinit ; chown libvirt-qemu /var/lib/libvirt/cloudinit ) vmname=$1 userdata="$ETC/$vmname-user-data" [ -e /dev/$VG/$vmname ] && fail "/dev/$VG/$vmname exists - please delete it or choose another guest name" [ -e $userdata ] || fail "please provide userdata in $userdata" echo echo "Creating guest VM $vmname with size: $size GB, using $userdata for clound-init" echo virsh dominfo $vmname > /dev/null 2>&1 if [ $? -eq 0 ]; then fail "Domain $vmname is defined in libvirt. Please undefine first."; fi lvcreate -L ${size}g -n $vmname $VG virt-clone --connect $KVM_URI -o leap-baseimage-wheezy -n $vmname -f /dev/$VG/$vmname --force # resize second (root) partition echo ",+," | sfdisk -N2 /dev/$VG/$vmname > /dev/null $SCRIPTDIR/libvirt-make-seed-disk $VARDIR/$vmname-user-data.img $userdata $SCRIPTDIR/libvirt-write-disk-attach-xml $VARDIR/$vmname-user-data.img > $VARDIR/$vmname-disk-attach.xml echo echo "Attached userdata-disk is at $VARDIR/$vmname-user-data.img" echo echo "Finished creating guest $vmname. Enjoy." echo echo Press to start the new guest. read bogus echo echo 'Starting new guest, attaching to console. Exit with Ctrl+]' echo virsh start $vmname sleep 2 virsh attach-device $vmname $VARDIR/$vmname-disk-attach.xml virsh console $vmname #do we really need to detach the cloud-init disk ? #virsh detach-device $vmname $VARDIR/$vmname-disk-attach.xml