Merge "Remove prettytable pin to 0.5"
diff --git a/files/apts/nova b/files/apts/nova
index 8a3ca4c..3ebf57c 100644
--- a/files/apts/nova
+++ b/files/apts/nova
@@ -19,6 +19,7 @@
 vlan
 curl
 rabbitmq-server # NOPRIME
+qpidd # NOPRIME
 socat # used by ajaxterm
 python-mox
 python-paste
@@ -42,3 +43,4 @@
 python-kombu
 python-feedparser
 python-iso8601
+python-qpid # dist:precise
diff --git a/files/keystone_data.sh b/files/keystone_data.sh
index a49eb42..2cdc2fa 100755
--- a/files/keystone_data.sh
+++ b/files/keystone_data.sh
@@ -12,6 +12,8 @@
 # demo                 admin     admin
 # demo                 demo      Member, anotherrole
 # invisible_to_admin   demo      Member
+# Tempest Only:
+# alt_demo             alt_demo  Member
 #
 # Variables set before calling this script:
 # SERVICE_TOKEN - aka admin_token in keystone.conf
@@ -56,19 +58,19 @@
 
 
 # Add Roles to Users in Tenants
-keystone user-role-add --user $ADMIN_USER --role $ADMIN_ROLE --tenant_id $ADMIN_TENANT
-keystone user-role-add --user $ADMIN_USER --role $ADMIN_ROLE --tenant_id $DEMO_TENANT
-keystone user-role-add --user $DEMO_USER --role $ANOTHER_ROLE --tenant_id $DEMO_TENANT
+keystone user-role-add --user_id $ADMIN_USER --role_id $ADMIN_ROLE --tenant_id $ADMIN_TENANT
+keystone user-role-add --user_id $ADMIN_USER --role_id $ADMIN_ROLE --tenant_id $DEMO_TENANT
+keystone user-role-add --user_id $DEMO_USER --role_id $ANOTHER_ROLE --tenant_id $DEMO_TENANT
 
 # TODO(termie): these two might be dubious
-keystone user-role-add --user $ADMIN_USER --role $KEYSTONEADMIN_ROLE --tenant_id $ADMIN_TENANT
-keystone user-role-add --user $ADMIN_USER --role $KEYSTONESERVICE_ROLE --tenant_id $ADMIN_TENANT
+keystone user-role-add --user_id $ADMIN_USER --role_id $KEYSTONEADMIN_ROLE --tenant_id $ADMIN_TENANT
+keystone user-role-add --user_id $ADMIN_USER --role_id $KEYSTONESERVICE_ROLE --tenant_id $ADMIN_TENANT
 
 
 # The Member role is used by Horizon and Swift so we need to keep it:
 MEMBER_ROLE=$(get_id keystone role-create --name=Member)
-keystone user-role-add --user $DEMO_USER --role $MEMBER_ROLE --tenant_id $DEMO_TENANT
-keystone user-role-add --user $DEMO_USER --role $MEMBER_ROLE --tenant_id $INVIS_TENANT
+keystone user-role-add --user_id $DEMO_USER --role_id $MEMBER_ROLE --tenant_id $DEMO_TENANT
+keystone user-role-add --user_id $DEMO_USER --role_id $MEMBER_ROLE --tenant_id $INVIS_TENANT
 
 
 # Configure service users/roles
@@ -77,16 +79,16 @@
                                         --tenant_id $SERVICE_TENANT \
                                         --email=nova@example.com)
 keystone user-role-add --tenant_id $SERVICE_TENANT \
-                       --user $NOVA_USER \
-                       --role $ADMIN_ROLE
+                       --user_id $NOVA_USER \
+                       --role_id $ADMIN_ROLE
 
 GLANCE_USER=$(get_id keystone user-create --name=glance \
                                           --pass="$SERVICE_PASSWORD" \
                                           --tenant_id $SERVICE_TENANT \
                                           --email=glance@example.com)
 keystone user-role-add --tenant_id $SERVICE_TENANT \
-                       --user $GLANCE_USER \
-                       --role $ADMIN_ROLE
+                       --user_id $GLANCE_USER \
+                       --role_id $ADMIN_ROLE
 
 if [[ "$ENABLED_SERVICES" =~ "swift" ]]; then
     SWIFT_USER=$(get_id keystone user-create --name=swift \
@@ -94,8 +96,8 @@
                                              --tenant_id $SERVICE_TENANT \
                                              --email=swift@example.com)
     keystone user-role-add --tenant_id $SERVICE_TENANT \
-                           --user $SWIFT_USER \
-                           --role $ADMIN_ROLE
+                           --user_id $SWIFT_USER \
+                           --role_id $ADMIN_ROLE
     # Nova needs ResellerAdmin role to download images when accessing
     # swift through the s3 api. The admin role in swift allows a user
     # to act as an admin for their tenant, but ResellerAdmin is needed
@@ -103,8 +105,8 @@
     # configurable in swift-proxy.conf
     RESELLER_ROLE=$(get_id keystone role-create --name=ResellerAdmin)
     keystone user-role-add --tenant_id $SERVICE_TENANT \
-                           --user $NOVA_USER \
-                           --role $RESELLER_ROLE
+                           --user_id $NOVA_USER \
+                           --role_id $RESELLER_ROLE
 fi
 
 if [[ "$ENABLED_SERVICES" =~ "quantum" ]]; then
@@ -113,6 +115,16 @@
                                                --tenant_id $SERVICE_TENANT \
                                                --email=quantum@example.com)
     keystone user-role-add --tenant_id $SERVICE_TENANT \
-                           --user $QUANTUM_USER \
-                           --role $ADMIN_ROLE
+                           --user_id $QUANTUM_USER \
+                           --role_id $ADMIN_ROLE
+fi
+
+if [[ "$ENABLED_SERVICES" =~ "tempest" ]]; then
+    # Tempest has some tests that validate various authorization checks
+    # between two regular users in separate tenants
+    ALT_DEMO_TENANT=$(get_id keystone tenant-create --name=alt_demo)
+    ALT_DEMO_USER=$(get_id keystone user-create --name=alt_demo \
+                                        --pass="$ADMIN_PASSWORD" \
+                                        --email=alt_demo@example.com)
+    keystone user-role-add --user $ALT_DEMO_USER --role $MEMBER_ROLE --tenant_id $ALT_DEMO_TENANT
 fi
diff --git a/files/rpms/nova b/files/rpms/nova
index 1b1d47f..bb92026 100644
--- a/files/rpms/nova
+++ b/files/rpms/nova
@@ -29,11 +29,13 @@
 python-paramiko
 python-paste
 python-paste-deploy
+python-qpid
 python-routes
 python-sqlalchemy
 python-suds
 python-tempita
 rabbitmq-server # NOPRIME
+qpid-cpp-server # NOPRIME
 sqlite
 sudo
 vconfig
diff --git a/stack.sh b/stack.sh
index 0ee2ab8..df26027 100755
--- a/stack.sh
+++ b/stack.sh
@@ -94,6 +94,12 @@
     fi
 fi
 
+if [ "${DISTRO}" = "oneiric" ] && is_service_enabled qpid ; then
+    # Qpid was introduced in precise
+    echo "You must use Ubuntu Precise or newer for Qpid support."
+    exit 1
+fi
+
 # Set the paths of certain binaries
 if [[ "$os_PACKAGE" = "deb" ]]; then
     NOVA_ROOTWRAP=/usr/local/bin/nova-rootwrap
@@ -381,8 +387,8 @@
 # host.
 
 
-# MySQL & RabbitMQ
-# ----------------
+# MySQL & (RabbitMQ or Qpid)
+# --------------------------
 
 # We configure Nova, Horizon, Glance and Keystone to use MySQL as their
 # database server.  While they share a single server, each has their own
@@ -400,8 +406,10 @@
 BASE_SQL_CONN=${BASE_SQL_CONN:-mysql://$MYSQL_USER:$MYSQL_PASSWORD@$MYSQL_HOST}
 
 # Rabbit connection info
-RABBIT_HOST=${RABBIT_HOST:-localhost}
-read_password RABBIT_PASSWORD "ENTER A PASSWORD TO USE FOR RABBIT."
+if is_service_enabled rabbit; then
+    RABBIT_HOST=${RABBIT_HOST:-localhost}
+    read_password RABBIT_PASSWORD "ENTER A PASSWORD TO USE FOR RABBIT."
+fi
 
 # Glance connection info.  Note the port must be specified.
 GLANCE_HOSTPORT=${GLANCE_HOSTPORT:-$SERVICE_HOST:9292}
@@ -756,8 +764,8 @@
 fi
 
 
-# Rabbit
-# ------
+# Rabbit or Qpid
+# --------------
 
 if is_service_enabled rabbit; then
     # Install and start rabbitmq-server
@@ -772,6 +780,13 @@
     fi
     # change the rabbit password since the default is "guest"
     sudo rabbitmqctl change_password guest $RABBIT_PASSWORD
+elif is_service_enabled qpid; then
+    if [[ "$os_PACKAGE" = "rpm" ]]; then
+        install_package qpid-cpp-server
+        restart_service qpidd
+    else
+        install_package qpidd
+    fi
 fi
 
 
@@ -1653,8 +1668,12 @@
 add_nova_opt "api_paste_config=$NOVA_CONF_DIR/api-paste.ini"
 add_nova_opt "image_service=nova.image.glance.GlanceImageService"
 add_nova_opt "ec2_dmz_host=$EC2_DMZ_HOST"
-add_nova_opt "rabbit_host=$RABBIT_HOST"
-add_nova_opt "rabbit_password=$RABBIT_PASSWORD"
+if is_service_enabled rabbit ; then
+    add_nova_opt "rabbit_host=$RABBIT_HOST"
+    add_nova_opt "rabbit_password=$RABBIT_PASSWORD"
+elif is_service_enabled qpid ; then
+    add_nova_opt "rpc_backend=nova.rpc.impl_qpid"
+fi
 add_nova_opt "glance_api_servers=$GLANCE_HOSTPORT"
 add_nova_opt "force_dhcp_release=True"
 if [ -n "$INSTANCES_PATH" ]; then
diff --git a/stackrc b/stackrc
index 092ba9e..41a399a 100644
--- a/stackrc
+++ b/stackrc
@@ -30,7 +30,7 @@
 KEYSTONE_BRANCH=master
 
 # a websockets/html5 or flash powered VNC console for vm instances
-NOVNC_REPO=https://github.com/cloudbuilders/noVNC.git
+NOVNC_REPO=https://github.com/kanaka/noVNC.git
 NOVNC_BRANCH=master
 
 # django powered web control panel for openstack
diff --git a/tools/configure_tempest.sh b/tools/configure_tempest.sh
index a84c42b..2c06934 100755
--- a/tools/configure_tempest.sh
+++ b/tools/configure_tempest.sh
@@ -93,6 +93,10 @@
 # copy every time, because the image UUIDS are going to change
 cp $TEMPEST_CONF.tpl $TEMPEST_CONF
 
+ADMIN_USERNAME=${ADMIN_USERNAME:-admin}
+ADMIN_PASSWORD=${ADMIN_PASSWORD:-secrete}
+ADMIN_TENANT_NAME=${ADMIN_TENANT:-admin}
+
 IDENTITY_USE_SSL=${IDENTITY_USE_SSL:-False}
 IDENTITY_HOST=${IDENTITY_HOST:-127.0.0.1}
 IDENTITY_PORT=${IDENTITY_PORT:-5000}
@@ -107,22 +111,18 @@
 # OS_USERNAME et all should be defined in openrc.
 OS_USERNAME=${OS_USERNAME:-demo}
 OS_TENANT_NAME=${OS_TENANT_NAME:-demo}
-OS_PASSWORD=${OS_PASSWORD:-secrete}
+OS_PASSWORD=${OS_PASSWORD:$ADMIN_PASSWORD}
 
-# TODO(jaypipes): Support multiple regular user accounts instead
-# of using the same regular user account for the alternate user...
-ALT_USERNAME=$OS_USERNAME
+# See files/keystone_data.sh where alt_demo user
+# and tenant are set up...
+ALT_USERNAME=${ALT_USERNAME:-alt_demo}
+ALT_TENANT_NAME=${ALT_TENANT_NAME:-alt_demo}
 ALT_PASSWORD=$OS_PASSWORD
-ALT_TENANT_NAME=$OS_TENANT_NAME
 
 # TODO(jaypipes): Support configurable flavor refs here...
 FLAVOR_REF=1
 FLAVOR_REF_ALT=2
 
-ADMIN_USERNAME=${ADMIN_USERNAME:-admin}
-ADMIN_PASSWORD=${ADMIN_PASSWORD:-secrete}
-ADMIN_TENANT_NAME=${ADMIN_TENANT:-admin}
-
 # Do any of the following need to be configurable?
 COMPUTE_CATALOG_TYPE=compute
 COMPUTE_CREATE_IMAGE_ENABLED=True
diff --git a/tools/xen/install_os_domU.sh b/tools/xen/install_os_domU.sh
index 3c25d4a..088748f 100755
--- a/tools/xen/install_os_domU.sh
+++ b/tools/xen/install_os_domU.sh
@@ -174,13 +174,16 @@
 templateuuid=$(xe template-list name-label="$TNAME")
 if [ -n "$templateuuid" ]
 then
-        vm_uuid=$(xe vm-install template="$TNAME" new-name-label="$GUEST_NAME")
+    vm_uuid=$(xe vm-install template="$TNAME" new-name-label="$GUEST_NAME")
 else
     template=$(xe_min template-list name-label="Ubuntu 11.10 (64-bit)")
     if [ -z "$template" ]
     then
         cp $TOP_DIR/devstackubuntupreseed.cfg /opt/xensource/www/
         $TOP_DIR/scripts/xenoneirictemplate.sh "${HOST_IP}/devstackubuntupreseed.cfg"
+        MIRROR=${MIRROR:-archive.ubuntu.com}
+        sed -e "s,d-i mirror/http/hostname string .*,d-i mirror/http/hostname string $MIRROR," \
+            -i /opt/xensource/www/devstackubuntupreseed.cfg
     fi
     $TOP_DIR/scripts/install-os-vpx.sh -t "Ubuntu 11.10 (64-bit)" -v $VM_BR -m $MGT_BR -p $PUB_BR -l $GUEST_NAME -r $OSDOMU_MEM_MB -k "flat_network_bridge=${VM_BR}"
 
diff --git a/tools/xen/prepare_dom0.sh b/tools/xen/prepare_dom0.sh
deleted file mode 100755
index 71e9d6d..0000000
--- a/tools/xen/prepare_dom0.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#i!/bin/sh
-set -o xtrace
-set -o errexit
-
-# Install basics for vi and git
-yum -y  --enablerepo=base install gcc make vim-enhanced zlib-devel openssl-devel curl-devel.i386
-
-# Simple but usable vimrc
-if [ ! -e /root/.vimrc ]; then
-    cat > /root/.vimrc <<EOF
-syntax on
-se ts=4
-se expandtab
-se shiftwidth=4
-EOF
-fi
-
-# Use the pretty vim
-if [ -e /usr/bin/vim ]; then
-    rm /bin/vi
-    ln -s /usr/bin/vim /bin/vi
-fi
-
-# Install git
-if ! which git; then
-    DEST=/tmp/
-    GITDIR=$DEST/git-1.7.7
-    cd $DEST
-    rm -rf $GITDIR*
-    wget http://git-core.googlecode.com/files/git-1.7.7.tar.gz
-    tar xfv git-1.7.7.tar.gz
-    cd $GITDIR
-    ./configure --with-curl --with-expat
-    make install
-fi
-
-# Clone devstack
-DEVSTACK=${DEVSTACKROOT:-"/root/devstack"}
-if [ ! -d $DEVSTACK ]; then
-    git clone git://github.com/openstack-dev/devstack.git $DEVSTACK
-fi
diff --git a/tools/xen/prepare_guest.sh b/tools/xen/prepare_guest.sh
index 5d39ac6..74efaff 100755
--- a/tools/xen/prepare_guest.sh
+++ b/tools/xen/prepare_guest.sh
@@ -7,18 +7,6 @@
 STAGING_DIR=${STAGING_DIR:-stage}
 DO_TGZ=${DO_TGZ:-1}
 
-# Sources.list
-cat <<EOF >$STAGING_DIR/etc/apt/sources.list
-deb http://us.archive.ubuntu.com/ubuntu/ oneiric main restricted
-deb-src http://us.archive.ubuntu.com/ubuntu/ oneiric main restricted
-deb http://us.archive.ubuntu.com/ubuntu/ oneiric-updates main restricted
-deb-src http://us.archive.ubuntu.com/ubuntu/ oneiric-updates main restricted
-deb http://us.archive.ubuntu.com/ubuntu/ oneiric universe
-deb http://us.archive.ubuntu.com/ubuntu/ oneiric-updates universe
-deb http://us.archive.ubuntu.com/ubuntu/ oneiric multiverse
-deb http://us.archive.ubuntu.com/ubuntu/ oneiric-updates multiverse
-EOF
-
 # Install basics
 chroot $STAGING_DIR apt-get update
 chroot $STAGING_DIR apt-get install -y cracklib-runtime curl wget ssh openssh-server tcpdump ethtool
diff --git a/tools/xen/scripts/templatedelete.sh b/tools/xen/scripts/templatedelete.sh
new file mode 100755
index 0000000..66765b2
--- /dev/null
+++ b/tools/xen/scripts/templatedelete.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+#Usage: ./templatedelete.sh <template-uuid>
+
+templateuuid="$1"
+
+xe template-param-set other-config:default_template=false uuid="$templateuuid"
+xe template-param-set is-a-template=false uuid="$templateuuid"
+xe vm-destroy uuid="$templateuuid"