Merge branch 'master' of github.com:cloudbuilders/devstack
diff --git a/README b/README
index cc20d5c..2047456 100644
--- a/README
+++ b/README
@@ -18,7 +18,7 @@
 * move back to using sudo
 * move nova to mysql
 * munin
-* extract image upload to a seperate script that supports generating images via debootstrap (ubuntu-vm-builder?)
+* image upload with a script that supports generating images via debootstrap (ubuntu-vm-builder)
 
 # Future
 
diff --git a/make_image.sh b/make_image.sh
index 9b5c10c..3bfa683 100755
--- a/make_image.sh
+++ b/make_image.sh
@@ -3,7 +3,7 @@
 #
 # make_image.sh release format
 #
-# Supported formats: qcow (kvm), vmdk (vmserver), vdi (vbox), vhd (vpc)
+# Supported formats: qcow (kvm), vmdk (vmserver), vdi (vbox), vhd (vpc), raw
 #
 # Requires sudo to root
 
@@ -19,14 +19,14 @@
 
 while getopts hm:r:s: c; do
     case $c in
-        h)	usage
-		;;
-	m)	MIRROR=$OPTARG
-		;;
-	r)	ROOTSIZE=$OPTARG
-		;;
-	s)	SWAPSIZE=$OPTARG
-		;;
+        h)  usage
+            ;;
+        m)  MIRROR=$OPTARG
+            ;;
+        r)  ROOTSIZE=$OPTARG
+            ;;
+        s)  SWAPSIZE=$OPTARG
+            ;;
     esac
 done
 shift `expr $OPTIND - 1`
@@ -34,55 +34,70 @@
 RELEASE=$1
 FORMAT=$2
 
-case $RELEASE in
-    natty)	;;
-    maverick)	;;
-    lucid)	;;
-    karmic)	;;
-    jaunty)	;;
-    *)		echo "Unknown release: $RELEASE"
-		usage
+case $FORMAT in
+    kvm|qcow2)  FORMAT=qcow2
+                QFORMAT=qcow2
+                HYPER=kvm
+                ;;
+    vmserver|vmdk)
+                FORMAT=vmdk
+                QFORMAT=vmdk
+                HYPER=vmserver
+                ;;
+    vbox|vdi)   FORMAT=vdi
+                QFORMAT=vdi
+                HYPER=kvm
+                ;;
+    vhd|vpc)    FORMAT=vhd
+                QFORMAT=vpc
+                HYPER=kvm
+                ;;
+    xen)        FORMAT=raw
+                QFORMAT=raw
+                HYPER=xen
+                ;;
+    raw)        FORMAT=raw
+                QFORMAT=raw
+                HYPER=kvm
+                ;;
+    *)          echo "Unknown format: $FORMAT"
+                usage
 esac
 
-case $FORMAT in
-    kvm|qcow2)	FORMAT=qcow2
-		TARGET=kvm
-		;;
-    vmserver|vmdk)	FORMAT=vmdk
-		TARGET=vmserver
-		;;
-    vbox|vdi)	FORMAT=qcow2
-		TARGET=kvm
-		FINAL_FORMAT=vdi
-		;;
-    vhd|vpc)	FORMAT=qcow2
-		TARGET=kvm
-		FINAL_FORMAT=vpc
-		;;
-    *)		echo "Unknown format: $FORMAT"
-		usage
+case $RELEASE in
+    natty)      ;;
+    maverick)   ;;
+    lucid)      ;;
+    karmic)     ;;
+    jaunty)     ;;
+    *)          echo "Unknown release: $RELEASE"
+                usage
+                ;;
 esac
 
 # Install stuff if necessary
 if [ -z `which vmbuilder` ]; then
-	sudo apt-get install ubuntu-vm-builder
+    sudo apt-get install ubuntu-vm-builder
 fi
 
 # Build the image
-sudo vmbuilder $TARGET ubuntu --suite $RELEASE \
+TMPDISK=`mktemp imgXXXXXXXX`
+SIZE=$[$ROOTSIZE+$SWAPSIZE+1]
+dd if=/dev/null of=$TMPDISK bs=1M seek=$SIZE
+sudo vmbuilder $HYPER ubuntu --suite $RELEASE \
   -o \
   --rootsize=$ROOTSIZE \
   --swapsize=$SWAPSIZE \
   --tmpfs - \
   --addpkg=openssh-server \
+  --raw=$TMPDISK \
 
-#  --mirror=$MIRROR \
-
-if [ -z "$FINAL_FORMAT" ]; then
+if [ "$FORMAT" = "raw" ]; then
     # Get image
-    mv ubuntu-$TARGET/tmp*.$FORMAT $RELEASE.$FORMAT
+    mv $TMPDISK $RELEASE.$FORMAT
 else
     # Convert image
-    qemu-img convert -O $FINAL_FORMAT ubuntu-$TARGET/tmp*.$FORMAT $RELEASE.$FINAL_FORMAT
+    qemu-img convert -O $QFORMAT $TMPDISK $RELEASE.$FORMAT
+    rm $TMPDISK
 fi
-rm -rf ubuntu-$TARGET
+rm -rf ubuntu-$HYPER
diff --git a/upload_image.sh b/upload_image.sh
index 8436b76..cf913b8 100755
--- a/upload_image.sh
+++ b/upload_image.sh
@@ -1,30 +1,24 @@
 #!/bin/bash
 # upload_image.sh - Upload Ubuntu images (create if necessary) in various formats
-#
-# upload_image.sh release format
-#
-# format   target
-# qcow2    kvm,qemu
-# vmdk     vmw6
-# vbox     vdi
-# vhd      vpc
-
-HOST=${HOST:-demo.rcb.me}
-PORT=${PORT:-9292}
+# Supported formats: qcow (kvm), vmdk (vmserver), vdi (vbox), vhd (vpc)
+# Requires sudo to root
 
 usage() {
-    echo "$0 - Upload Ubuntu images"
+    echo "$0 - Upload images to OpenStack"
     echo ""
     echo "$0 [-h host] [-p port] release format"
     exit 1
 }
 
+HOST=${HOST:-localhost}
+PORT=${PORT:-9292}
+
 while getopts h:p: c; do
     case $c in
-        h)      HOST=$OPTARG
-                ;;
-	p)	PORT=$OPTARG
-		;;
+        h)  HOST=$OPTARG
+            ;;
+        p)  PORT=$OPTARG
+            ;;
     esac
 done
 shift `expr $OPTIND - 1`
@@ -32,51 +26,64 @@
 RELEASE=$1
 FORMAT=$2
 
-case $RELEASE in
-    natty)	;;
-    maverick)	;;
-    lucid)	;;
-    karmic)	;;
-    jaunty)	;;
-    *)		echo "Unknown release: $RELEASE"
-		usage
+case $FORMAT in
+    kvm|qcow2)  FORMAT=qcow2
+                TARGET=kvm
+                ;;
+    vmserver|vmdk)
+                FORMAT=vmdk
+                TARGET=vmserver
+                ;;
+    vbox|vdi)   TARGET=kvm
+                FORMAT=vdi
+                ;;
+    vhd|vpc)    TARGET=kvm
+                FORMAT=vhd
+                ;;
+    *)          echo "Unknown format: $FORMAT"
+                usage
 esac
 
-case $FORMAT in
-    kvm|qcow2)	FORMAT=qcow2
-		TARGET=kvm
-		;;
-    vmserver|vmdk)	FORMAT=vmdk
-		TARGET=vmserver
-		;;
-    vbox|vdi)	TARGET=kvm
-		FORMAT=vdi
-		;;
-    vhd|vpc)	TARGET=kvm
-		FORMAT=vpc
-		;;
-    *)		echo "Unknown format: $FORMAT"
-		usage
+case $RELEASE in
+    natty)      ;;
+    maverick)   ;;
+    lucid)      ;;
+    karmic)     ;;
+    jaunty)     ;;
+    *)          if [ ! -r $RELEASE.$FORMAT ]; then
+                    echo "Unknown release: $RELEASE"
+                    usage
+                fi
+                ;;
 esac
 
 GLANCE=`which glance`
 if [ -z "$GLANCE" ]; then
-	echo "Glance not found, must install client"
-	sudo apt-get install python-pip python-eventlet python-routes python-greenlet python-argparse python-sqlalchemy python-wsgiref python-pastedeploy python-xattr
-	sudo pip install kombu
-	git clone https://github.com/cloudbuilders/glance.git
-	cd glance
-	sudo python setup.py develop
-	cd ..
-	GLANCE=`which glance`
+    if [ -x "/opt/glance/bin/glance" ]; then
+        # Look for stack.sh's install
+        GLANCE="/opt/glance/bin/glance"
+    else
+        # Install Glance client in /opt
+        echo "Glance not found, must install client"
+        OWD=`pwd`
+        cd /opt
+        sudo apt-get install python-pip python-eventlet python-routes python-greenlet python-argparse python-sqlalchemy python-wsgiref python-pastedeploy python-xattr
+        sudo pip install kombu
+        sudo git clone https://github.com/cloudbuilders/glance.git
+        cd glance
+        sudo python setup.py develop
+        cd $OWD
+        GLANCE=`which glance`
+    fi
 fi
 
 # Create image if it doesn't exist
 if [ ! -r $RELEASE.$FORMAT ]; then
-	DIR=`dirname $0`
-	echo "$RELEASE.$FORMAT not found, creating...must be root to do this:"
-	$DIR/make_image.sh $RELEASE $FORMAT
+    DIR=`dirname $0`
+    echo "$RELEASE.$FORMAT not found, creating..."
+    $DIR/make_image.sh $RELEASE $FORMAT
 fi
 
 # Upload the image
+echo "Uploading image $RELEASE.$FORMAT to $HOST"
 $GLANCE add name=$RELEASE.$FORMAT is_public=true disk_format=$FORMAT --host $HOST --port $PORT <$RELEASE.$FORMAT