added config file, possible to clone from remote kvm instance
[leap_cloudadmin.git] / create-guest-with-cloudinit
1 #!/bin/sh 
2
3 # depends on following packages:
4 # apt-get install virtinst libvirt-bin dosfstools mtools kvm kvm-qemu
5 # apt-get install -t wheezy util-linux
6
7 # defaults
8 VG='vg01'
9 ETC='/etc/cloudinit'
10 CONFIG="$ETC/cloudinit.cfg"
11 VARDIR='/var/lib/libvirt/cloudinit'
12 SCRIPTDIR='/usr/local/bin/leap_cloudadmin'
13
14 . $CONFIG
15
16
17 fail() { [ $# -eq 0 ] || echo "$@"; exit 1; }
18 bad_usage() { usage 1>&2; [ $# -eq 0 ] || fail "$@"; exit 1; }
19
20 usage() {
21        cat <<EOF
22
23 Usage: ${0##*/} [ $options ] guest_name
24
25   Creates a new guest VM using cloud-init to utilize nocloud.
26
27   options:
28     -h             show usage
29     -s size        disk size in GB
30
31 EOF
32 }
33
34
35 short_opts="hs:"
36 getopt_out=$(getopt --name "${0##*/}" \
37        --options "${short_opts}" -- "$@") &&
38        eval set -- "${getopt_out}" ||
39        fail "Error !" 
40
41
42 while [ $# -ne 0 ]; do
43        cur=${1}; next=${2};
44        case "$cur" in
45                -h) Usage ; exit 0;;
46                -s) size=$next; shift;;
47                --) shift; break;;
48        esac
49        shift;
50 done
51
52
53 [ $# -lt 1 ] && bad_usage "must provide guest name"
54 [ $# -gt 1 ] && bad_usage "too many arguments"
55
56 # requirements
57 echo "mtools_skip_check=1">~/.mtoolsrc
58 [ -e /var/lib/libvirt/cloudinit ] || ( mkdir /var/lib/libvirt/cloudinit ; chown libvirt-qemu /var/lib/libvirt/cloudinit )
59
60
61 vmname=$1
62 userdata="$ETC/$vmname-user-data"
63
64
65 [ -e /dev/$VG/$vmname ] && fail "/dev/$VG/$vmname exists - please delete it or choose another guest name"
66
67 [ -e $userdata ] ||  fail "please provide userdata in $userdata"
68
69 echo
70 echo "Creating guest VM $vmname with size: $size GB, using $userdata for clound-init"
71 echo
72
73
74 virsh dominfo $vmname > /dev/null 2>&1
75 if [ $? -eq 0 ]; then fail "Domain $vmname is defined in libvirt. Please undefine first."; fi
76
77
78 lvcreate -L ${size}g -n $vmname $VG
79 virt-clone --connect $KVM_URI -o leap-baseimage-wheezy -n $vmname -f /dev/$VG/$vmname  --force
80
81 # resize second (root) partition
82 echo ",+," | sfdisk  -N2  /dev/$VG/$vmname > /dev/null
83
84 $SCRIPTDIR/libvirt-make-seed-disk $VARDIR/$vmname-user-data.img $userdata
85 $SCRIPTDIR/libvirt-write-disk-attach-xml $VARDIR/$vmname-user-data.img > $VARDIR/$vmname-disk-attach.xml
86
87 echo
88 echo "Attached userdata-disk is at $VARDIR/$vmname-user-data.img"
89 echo
90 echo "Finished creating guest $vmname. Enjoy."
91 echo
92 echo Press <return> to start the new guest.
93 read bogus
94
95 echo
96 echo 'Starting new guest, attaching to console. Exit with Ctrl+]'
97 echo
98
99 virsh start $vmname 
100 sleep 2 
101 virsh attach-device $vmname $VARDIR/$vmname-disk-attach.xml
102 virsh console $vmname 
103
104 #do we really need to detach the cloud-init disk ?
105 #virsh detach-device $vmname $VARDIR/$vmname-disk-attach.xml
106
107