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