| ... | ... |
@@ -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 |