| Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 1 | #!/bin/bash | 
|  | 2 | # upload_image.sh - Upload Ubuntu images (create if necessary) in various formats | 
| Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 3 | # Supported formats: qcow (kvm), vmdk (vmserver), vdi (vbox), vhd (vpc) | 
|  | 4 | # Requires sudo to root | 
| Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 5 |  | 
|  | 6 | usage() { | 
| Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 7 | echo "$0 - Upload images to OpenStack" | 
| Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 8 | echo "" | 
|  | 9 | echo "$0 [-h host] [-p port] release format" | 
|  | 10 | exit 1 | 
|  | 11 | } | 
|  | 12 |  | 
| Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 13 | HOST=${HOST:-localhost} | 
|  | 14 | PORT=${PORT:-9292} | 
| Anthony Young | e8fed48 | 2011-09-26 19:50:43 -0700 | [diff] [blame] | 15 | DEST=${DEST:-/opt/stack} | 
| Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 16 |  | 
| Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 17 | while getopts h:p: c; do | 
|  | 18 | case $c in | 
| Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 19 | h)  HOST=$OPTARG | 
|  | 20 | ;; | 
|  | 21 | p)  PORT=$OPTARG | 
|  | 22 | ;; | 
| Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 23 | esac | 
|  | 24 | done | 
|  | 25 | shift `expr $OPTIND - 1` | 
|  | 26 |  | 
|  | 27 | RELEASE=$1 | 
|  | 28 | FORMAT=$2 | 
|  | 29 |  | 
| Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 30 | case $FORMAT in | 
|  | 31 | kvm|qcow2)  FORMAT=qcow2 | 
|  | 32 | TARGET=kvm | 
|  | 33 | ;; | 
|  | 34 | vmserver|vmdk) | 
|  | 35 | FORMAT=vmdk | 
|  | 36 | TARGET=vmserver | 
|  | 37 | ;; | 
|  | 38 | vbox|vdi)   TARGET=kvm | 
|  | 39 | FORMAT=vdi | 
|  | 40 | ;; | 
|  | 41 | vhd|vpc)    TARGET=kvm | 
|  | 42 | FORMAT=vhd | 
|  | 43 | ;; | 
|  | 44 | *)          echo "Unknown format: $FORMAT" | 
|  | 45 | usage | 
| Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 46 | esac | 
|  | 47 |  | 
| Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 48 | case $RELEASE in | 
|  | 49 | natty)      ;; | 
|  | 50 | maverick)   ;; | 
|  | 51 | lucid)      ;; | 
|  | 52 | karmic)     ;; | 
|  | 53 | jaunty)     ;; | 
|  | 54 | *)          if [ ! -r $RELEASE.$FORMAT ]; then | 
|  | 55 | echo "Unknown release: $RELEASE" | 
|  | 56 | usage | 
|  | 57 | fi | 
|  | 58 | ;; | 
| Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 59 | esac | 
|  | 60 |  | 
|  | 61 | GLANCE=`which glance` | 
|  | 62 | if [ -z "$GLANCE" ]; then | 
| Anthony Young | e8fed48 | 2011-09-26 19:50:43 -0700 | [diff] [blame] | 63 | if [ -x "$DEST/glance/bin/glance" ]; then | 
| Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 64 | # Look for stack.sh's install | 
| Anthony Young | e8fed48 | 2011-09-26 19:50:43 -0700 | [diff] [blame] | 65 | GLANCE="$DEST/glance/bin/glance" | 
| Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 66 | else | 
| Anthony Young | e8fed48 | 2011-09-26 19:50:43 -0700 | [diff] [blame] | 67 | # Install Glance client in $DEST | 
| Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 68 | echo "Glance not found, must install client" | 
|  | 69 | OWD=`pwd` | 
| Anthony Young | e8fed48 | 2011-09-26 19:50:43 -0700 | [diff] [blame] | 70 | cd $DEST | 
| Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 71 | sudo apt-get install python-pip python-eventlet python-routes python-greenlet python-argparse python-sqlalchemy python-wsgiref python-pastedeploy python-xattr | 
|  | 72 | sudo pip install kombu | 
|  | 73 | sudo git clone https://github.com/cloudbuilders/glance.git | 
|  | 74 | cd glance | 
|  | 75 | sudo python setup.py develop | 
|  | 76 | cd $OWD | 
|  | 77 | GLANCE=`which glance` | 
|  | 78 | fi | 
| Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 79 | fi | 
|  | 80 |  | 
|  | 81 | # Create image if it doesn't exist | 
|  | 82 | if [ ! -r $RELEASE.$FORMAT ]; then | 
| Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 83 | DIR=`dirname $0` | 
| Dean Troyer | 57794d4 | 2011-09-16 17:22:23 -0500 | [diff] [blame] | 84 | echo "$RELEASE.$FORMAT not found, creating..." | 
| Dean Troyer | 4dd420e | 2011-09-16 16:16:34 -0500 | [diff] [blame] | 85 | $DIR/make_image.sh $RELEASE $FORMAT | 
| Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 86 | fi | 
|  | 87 |  | 
|  | 88 | # Upload the image | 
| Dean Troyer | 57794d4 | 2011-09-16 17:22:23 -0500 | [diff] [blame] | 89 | echo "Uploading image $RELEASE.$FORMAT to $HOST" | 
| Dean Troyer | 65cf608 | 2011-09-16 12:22:21 -0500 | [diff] [blame] | 90 | $GLANCE add name=$RELEASE.$FORMAT is_public=true disk_format=$FORMAT --host $HOST --port $PORT <$RELEASE.$FORMAT |