Browse code

Merge pull request #8 from dtroyer/master

More updates to image scripts

Dean Troyer authored on 2011/09/21 00:43:39
Showing 3 changed files
... ...
@@ -18,7 +18,7 @@ Tool to quickly deploy openstack dev environments
18 18
 * move back to using sudo
19 19
 * move nova to mysql
20 20
 * munin
21
-* extract image upload to a seperate script that supports generating images via debootstrap (ubuntu-vm-builder?)
21
+* image upload with a script that supports generating images via debootstrap (ubuntu-vm-builder)
22 22
 
23 23
 # Future
24 24
 
... ...
@@ -3,7 +3,7 @@
3 3
 #
4 4
 # make_image.sh release format
5 5
 #
6
-# Supported formats: qcow (kvm), vmdk (vmserver), vdi (vbox), vhd (vpc)
6
+# Supported formats: qcow (kvm), vmdk (vmserver), vdi (vbox), vhd (vpc), raw
7 7
 #
8 8
 # Requires sudo to root
9 9
 
... ...
@@ -19,14 +19,14 @@ usage() {
19 19
 
20 20
 while getopts hm:r:s: c; do
21 21
     case $c in
22
-        h)	usage
23
-		;;
24
-	m)	MIRROR=$OPTARG
25
-		;;
26
-	r)	ROOTSIZE=$OPTARG
27
-		;;
28
-	s)	SWAPSIZE=$OPTARG
29
-		;;
22
+        h)  usage
23
+            ;;
24
+        m)  MIRROR=$OPTARG
25
+            ;;
26
+        r)  ROOTSIZE=$OPTARG
27
+            ;;
28
+        s)  SWAPSIZE=$OPTARG
29
+            ;;
30 30
     esac
31 31
 done
32 32
 shift `expr $OPTIND - 1`
... ...
@@ -34,55 +34,70 @@ shift `expr $OPTIND - 1`
34 34
 RELEASE=$1
35 35
 FORMAT=$2
36 36
 
37
-case $RELEASE in
38
-    natty)	;;
39
-    maverick)	;;
40
-    lucid)	;;
41
-    karmic)	;;
42
-    jaunty)	;;
43
-    *)		echo "Unknown release: $RELEASE"
44
-		usage
37
+case $FORMAT in
38
+    kvm|qcow2)  FORMAT=qcow2
39
+                QFORMAT=qcow2
40
+                HYPER=kvm
41
+                ;;
42
+    vmserver|vmdk)
43
+                FORMAT=vmdk
44
+                QFORMAT=vmdk
45
+                HYPER=vmserver
46
+                ;;
47
+    vbox|vdi)   FORMAT=vdi
48
+                QFORMAT=vdi
49
+                HYPER=kvm
50
+                ;;
51
+    vhd|vpc)    FORMAT=vhd
52
+                QFORMAT=vpc
53
+                HYPER=kvm
54
+                ;;
55
+    xen)        FORMAT=raw
56
+                QFORMAT=raw
57
+                HYPER=xen
58
+                ;;
59
+    raw)        FORMAT=raw
60
+                QFORMAT=raw
61
+                HYPER=kvm
62
+                ;;
63
+    *)          echo "Unknown format: $FORMAT"
64
+                usage
45 65
 esac
46 66
 
47
-case $FORMAT in
48
-    kvm|qcow2)	FORMAT=qcow2
49
-		TARGET=kvm
50
-		;;
51
-    vmserver|vmdk)	FORMAT=vmdk
52
-		TARGET=vmserver
53
-		;;
54
-    vbox|vdi)	FORMAT=qcow2
55
-		TARGET=kvm
56
-		FINAL_FORMAT=vdi
57
-		;;
58
-    vhd|vpc)	FORMAT=qcow2
59
-		TARGET=kvm
60
-		FINAL_FORMAT=vpc
61
-		;;
62
-    *)		echo "Unknown format: $FORMAT"
63
-		usage
67
+case $RELEASE in
68
+    natty)      ;;
69
+    maverick)   ;;
70
+    lucid)      ;;
71
+    karmic)     ;;
72
+    jaunty)     ;;
73
+    *)          echo "Unknown release: $RELEASE"
74
+                usage
75
+                ;;
64 76
 esac
65 77
 
66 78
 # Install stuff if necessary
67 79
 if [ -z `which vmbuilder` ]; then
68
-	sudo apt-get install ubuntu-vm-builder
80
+    sudo apt-get install ubuntu-vm-builder
69 81
 fi
70 82
 
71 83
 # Build the image
72
-sudo vmbuilder $TARGET ubuntu --suite $RELEASE \
84
+TMPDISK=`mktemp imgXXXXXXXX`
85
+SIZE=$[$ROOTSIZE+$SWAPSIZE+1]
86
+dd if=/dev/null of=$TMPDISK bs=1M seek=$SIZE
87
+sudo vmbuilder $HYPER ubuntu --suite $RELEASE \
73 88
   -o \
74 89
   --rootsize=$ROOTSIZE \
75 90
   --swapsize=$SWAPSIZE \
76 91
   --tmpfs - \
77 92
   --addpkg=openssh-server \
93
+  --raw=$TMPDISK \
78 94
 
79
-#  --mirror=$MIRROR \
80
-
81
-if [ -z "$FINAL_FORMAT" ]; then
95
+if [ "$FORMAT" = "raw" ]; then
82 96
     # Get image
83
-    mv ubuntu-$TARGET/tmp*.$FORMAT $RELEASE.$FORMAT
97
+    mv $TMPDISK $RELEASE.$FORMAT
84 98
 else
85 99
     # Convert image
86
-    qemu-img convert -O $FINAL_FORMAT ubuntu-$TARGET/tmp*.$FORMAT $RELEASE.$FINAL_FORMAT
100
+    qemu-img convert -O $QFORMAT $TMPDISK $RELEASE.$FORMAT
101
+    rm $TMPDISK
87 102
 fi
88
-rm -rf ubuntu-$TARGET
103
+rm -rf ubuntu-$HYPER
... ...
@@ -1,30 +1,24 @@
1 1
 #!/bin/bash
2 2
 # upload_image.sh - Upload Ubuntu images (create if necessary) in various formats
3
-#
4
-# upload_image.sh release format
5
-#
6
-# format   target
7
-# qcow2    kvm,qemu
8
-# vmdk     vmw6
9
-# vbox     vdi
10
-# vhd      vpc
11
-
12
-HOST=${HOST:-demo.rcb.me}
13
-PORT=${PORT:-9292}
3
+# Supported formats: qcow (kvm), vmdk (vmserver), vdi (vbox), vhd (vpc)
4
+# Requires sudo to root
14 5
 
15 6
 usage() {
16
-    echo "$0 - Upload Ubuntu images"
7
+    echo "$0 - Upload images to OpenStack"
17 8
     echo ""
18 9
     echo "$0 [-h host] [-p port] release format"
19 10
     exit 1
20 11
 }
21 12
 
13
+HOST=${HOST:-localhost}
14
+PORT=${PORT:-9292}
15
+
22 16
 while getopts h:p: c; do
23 17
     case $c in
24
-        h)      HOST=$OPTARG
25
-                ;;
26
-	p)	PORT=$OPTARG
27
-		;;
18
+        h)  HOST=$OPTARG
19
+            ;;
20
+        p)  PORT=$OPTARG
21
+            ;;
28 22
     esac
29 23
 done
30 24
 shift `expr $OPTIND - 1`
... ...
@@ -32,51 +26,64 @@ shift `expr $OPTIND - 1`
32 32
 RELEASE=$1
33 33
 FORMAT=$2
34 34
 
35
-case $RELEASE in
36
-    natty)	;;
37
-    maverick)	;;
38
-    lucid)	;;
39
-    karmic)	;;
40
-    jaunty)	;;
41
-    *)		echo "Unknown release: $RELEASE"
42
-		usage
35
+case $FORMAT in
36
+    kvm|qcow2)  FORMAT=qcow2
37
+                TARGET=kvm
38
+                ;;
39
+    vmserver|vmdk)
40
+                FORMAT=vmdk
41
+                TARGET=vmserver
42
+                ;;
43
+    vbox|vdi)   TARGET=kvm
44
+                FORMAT=vdi
45
+                ;;
46
+    vhd|vpc)    TARGET=kvm
47
+                FORMAT=vhd
48
+                ;;
49
+    *)          echo "Unknown format: $FORMAT"
50
+                usage
43 51
 esac
44 52
 
45
-case $FORMAT in
46
-    kvm|qcow2)	FORMAT=qcow2
47
-		TARGET=kvm
48
-		;;
49
-    vmserver|vmdk)	FORMAT=vmdk
50
-		TARGET=vmserver
51
-		;;
52
-    vbox|vdi)	TARGET=kvm
53
-		FORMAT=vdi
54
-		;;
55
-    vhd|vpc)	TARGET=kvm
56
-		FORMAT=vpc
57
-		;;
58
-    *)		echo "Unknown format: $FORMAT"
59
-		usage
53
+case $RELEASE in
54
+    natty)      ;;
55
+    maverick)   ;;
56
+    lucid)      ;;
57
+    karmic)     ;;
58
+    jaunty)     ;;
59
+    *)          if [ ! -r $RELEASE.$FORMAT ]; then
60
+                    echo "Unknown release: $RELEASE"
61
+                    usage
62
+                fi
63
+                ;;
60 64
 esac
61 65
 
62 66
 GLANCE=`which glance`
63 67
 if [ -z "$GLANCE" ]; then
64
-	echo "Glance not found, must install client"
65
-	sudo apt-get install python-pip python-eventlet python-routes python-greenlet python-argparse python-sqlalchemy python-wsgiref python-pastedeploy python-xattr
66
-	sudo pip install kombu
67
-	git clone https://github.com/cloudbuilders/glance.git
68
-	cd glance
69
-	sudo python setup.py develop
70
-	cd ..
71
-	GLANCE=`which glance`
68
+    if [ -x "/opt/glance/bin/glance" ]; then
69
+        # Look for stack.sh's install
70
+        GLANCE="/opt/glance/bin/glance"
71
+    else
72
+        # Install Glance client in /opt
73
+        echo "Glance not found, must install client"
74
+        OWD=`pwd`
75
+        cd /opt
76
+        sudo apt-get install python-pip python-eventlet python-routes python-greenlet python-argparse python-sqlalchemy python-wsgiref python-pastedeploy python-xattr
77
+        sudo pip install kombu
78
+        sudo git clone https://github.com/cloudbuilders/glance.git
79
+        cd glance
80
+        sudo python setup.py develop
81
+        cd $OWD
82
+        GLANCE=`which glance`
83
+    fi
72 84
 fi
73 85
 
74 86
 # Create image if it doesn't exist
75 87
 if [ ! -r $RELEASE.$FORMAT ]; then
76
-	DIR=`dirname $0`
77
-	echo "$RELEASE.$FORMAT not found, creating...must be root to do this:"
78
-	$DIR/make_image.sh $RELEASE $FORMAT
88
+    DIR=`dirname $0`
89
+    echo "$RELEASE.$FORMAT not found, creating..."
90
+    $DIR/make_image.sh $RELEASE $FORMAT
79 91
 fi
80 92
 
81 93
 # Upload the image
94
+echo "Uploading image $RELEASE.$FORMAT to $HOST"
82 95
 $GLANCE add name=$RELEASE.$FORMAT is_public=true disk_format=$FORMAT --host $HOST --port $PORT <$RELEASE.$FORMAT