Merge "Disable nova calls from tempest when heat is enabled"
diff --git a/data/devstack-plugins-registry.footer b/data/devstack-plugins-registry.footer
deleted file mode 100644
index 669cb8d..0000000
--- a/data/devstack-plugins-registry.footer
+++ /dev/null
@@ -1,28 +0,0 @@
-
-Drivers
-=======
-
-+--------------------+-------------------------------------------------+------------------+
-|Plugin Name         |URL                                              |Comments          |
-+--------------------+-------------------------------------------------+------------------+
-|dragonflow          |git://git.openstack.org/openstack/dragonflow     |[d1]_             |
-+--------------------+-------------------------------------------------+------------------+
-|odl                 |git://git.openstack.org/openstack/networking-odl |[d2]_             |
-+--------------------+-------------------------------------------------+------------------+
-
-.. [d1] demonstrates example of installing 3rd party SDN controller
-.. [d2] demonstrates a pretty advanced set of modes that that allow
-        one to run OpenDayLight either from a pre-existing install, or
-        also from source
-
-Alternate Configs
-=================
-
-+-------------+------------------------------------------------------------+------------+
-| Plugin Name | URL                                                        | Comments   |
-|             |                                                            |            |
-+-------------+------------------------------------------------------------+------------+
-|glusterfs    |git://git.openstack.org/openstack/devstack-plugin-glusterfs |            |
-+-------------+------------------------------------------------------------+------------+
-|             |                                                            |            |
-+-------------+------------------------------------------------------------+------------+
diff --git a/data/devstack-plugins-registry.header b/data/devstack-plugins-registry.header
index 9f8a994..46d5e60 100644
--- a/data/devstack-plugins-registry.header
+++ b/data/devstack-plugins-registry.header
@@ -1,3 +1,8 @@
+..
+  Note to patch submitters: this file is covered by a periodic proposal
+  job.  You should edit the files data/devstack-plugins-registry.footer
+  data/devstack-plugins-registry.header instead of this one.
+
 ==========================
  DevStack Plugin Registry
 ==========================
@@ -14,6 +19,6 @@
 namespace, which includes but is not limited to official OpenStack
 projects.
 
-+------------------+------------------------------------------------------------+------------+
-|Plugin Name       |URL                                                         |Date        |
-+------------------+------------------------------------------------------------+------------+
++----------------------------+-------------------------------------------------------------------------+
+|Plugin Name                 |URL                                                                      |
++----------------------------+-------------------------------------------------------------------------+
diff --git a/doc/source/plugin-registry.rst b/doc/source/plugin-registry.rst
index b96883a..29b743f 100644
--- a/doc/source/plugin-registry.rst
+++ b/doc/source/plugin-registry.rst
@@ -1,7 +1,7 @@
 ..
-  Note to reviewers: the intent of this file is to be easy for
-  community members to update. As such fast approving (single core +2)
-  is fine as long as you've identified that the plugin listed actually exists.
+  Note to patch submitters: this file is covered by a periodic proposal
+  job.  You should edit the files data/devstack-plugins-registry.footer
+  data/devstack-plugins-registry.header instead of this one.
 
 ==========================
  DevStack Plugin Registry
@@ -12,44 +12,186 @@
 exist. Any project that wishes to list their plugin here is welcomed
 to.
 
-Official OpenStack Projects
-===========================
+Detected Plugins
+================
 
-The following are plugins that exist for official OpenStack projects.
+The following are plugins that a script has found in the openstack/
+namespace, which includes but is not limited to official OpenStack
+projects.
 
-+------------------+---------------------------------------------+--------------------+
-|Plugin Name       |URL                                          |Comments            |
-+------------------+---------------------------------------------+--------------------+
-|aodh              |git://git.openstack.org/openstack/aodh       | alarming           |
-+------------------+---------------------------------------------+--------------------+
-|barbican          |git://git.openstack.org/openstack/barbican   | key management     |
-+------------------+---------------------------------------------+--------------------+
-|ceilometer        |git://git.openstack.org/openstack/ceilometer | metering           |
-+------------------+---------------------------------------------+--------------------+
-|congress          |git://git.openstack.org/openstack/congress   | governance         |
-+------------------+---------------------------------------------+--------------------+
-|cue               |git://git.openstack.org/openstack/cue        | message-broker     |
-+------------------+---------------------------------------------+--------------------+
-|gnocchi           |git://git.openstack.org/openstack/gnocchi    | metric             |
-+------------------+---------------------------------------------+--------------------+
-|ironic            |git://git.openstack.org/openstack/ironic     | baremetal          |
-+------------------+---------------------------------------------+--------------------+
-|magnum            |git://git.openstack.org/openstack/magnum     |                    |
-+------------------+---------------------------------------------+--------------------+
-|manila            |git://git.openstack.org/openstack/manila     | file shares        |
-+------------------+---------------------------------------------+--------------------+
-|mistral           |git://git.openstack.org/openstack/mistral    |                    |
-+------------------+---------------------------------------------+--------------------+
-|rally             |git://git.openstack.org/openstack/rally      |                    |
-+------------------+---------------------------------------------+--------------------+
-|sahara            |git://git.openstack.org/openstack/sahara     |                    |
-+------------------+---------------------------------------------+--------------------+
-|trove             |git://git.openstack.org/openstack/trove      |                    |
-+------------------+---------------------------------------------+--------------------+
-|zaqar             |git://git.openstack.org/openstack/zaqar      |                    |
-+------------------+---------------------------------------------+--------------------+
-
-
++----------------------------+-------------------------------------------------------------------------+
+|Plugin Name                 |URL                                                                      |
++----------------------------+-------------------------------------------------------------------------+
+|aodh                        |git://git.openstack.org/openstack/aodh                                   |
++----------------------------+-------------------------------------------------------------------------+
+|app-catalog-ui              |git://git.openstack.org/openstack/app-catalog-ui                         |
++----------------------------+-------------------------------------------------------------------------+
+|astara                      |git://git.openstack.org/openstack/astara                                 |
++----------------------------+-------------------------------------------------------------------------+
+|barbican                    |git://git.openstack.org/openstack/barbican                               |
++----------------------------+-------------------------------------------------------------------------+
+|blazar                      |git://git.openstack.org/openstack/blazar                                 |
++----------------------------+-------------------------------------------------------------------------+
+|ceilometer                  |git://git.openstack.org/openstack/ceilometer                             |
++----------------------------+-------------------------------------------------------------------------+
+|ceilometer-powervm          |git://git.openstack.org/openstack/ceilometer-powervm                     |
++----------------------------+-------------------------------------------------------------------------+
+|cerberus                    |git://git.openstack.org/openstack/cerberus                               |
++----------------------------+-------------------------------------------------------------------------+
+|cloudkitty                  |git://git.openstack.org/openstack/cloudkitty                             |
++----------------------------+-------------------------------------------------------------------------+
+|collectd-ceilometer-plugin  |git://git.openstack.org/openstack/collectd-ceilometer-plugin             |
++----------------------------+-------------------------------------------------------------------------+
+|congress                    |git://git.openstack.org/openstack/congress                               |
++----------------------------+-------------------------------------------------------------------------+
+|cue                         |git://git.openstack.org/openstack/cue                                    |
++----------------------------+-------------------------------------------------------------------------+
+|designate                   |git://git.openstack.org/openstack/designate                              |
++----------------------------+-------------------------------------------------------------------------+
+|devstack-plugin-amqp1       |git://git.openstack.org/openstack/devstack-plugin-amqp1                  |
++----------------------------+-------------------------------------------------------------------------+
+|devstack-plugin-bdd         |git://git.openstack.org/openstack/devstack-plugin-bdd                    |
++----------------------------+-------------------------------------------------------------------------+
+|devstack-plugin-ceph        |git://git.openstack.org/openstack/devstack-plugin-ceph                   |
++----------------------------+-------------------------------------------------------------------------+
+|devstack-plugin-glusterfs   |git://git.openstack.org/openstack/devstack-plugin-glusterfs              |
++----------------------------+-------------------------------------------------------------------------+
+|devstack-plugin-hdfs        |git://git.openstack.org/openstack/devstack-plugin-hdfs                   |
++----------------------------+-------------------------------------------------------------------------+
+|devstack-plugin-pika        |git://git.openstack.org/openstack/devstack-plugin-pika                   |
++----------------------------+-------------------------------------------------------------------------+
+|devstack-plugin-sheepdog    |git://git.openstack.org/openstack/devstack-plugin-sheepdog               |
++----------------------------+-------------------------------------------------------------------------+
+|devstack-plugin-zmq         |git://git.openstack.org/openstack/devstack-plugin-zmq                    |
++----------------------------+-------------------------------------------------------------------------+
+|dragonflow                  |git://git.openstack.org/openstack/dragonflow                             |
++----------------------------+-------------------------------------------------------------------------+
+|drbd-devstack               |git://git.openstack.org/openstack/drbd-devstack                          |
++----------------------------+-------------------------------------------------------------------------+
+|ec2-api                     |git://git.openstack.org/openstack/ec2-api                                |
++----------------------------+-------------------------------------------------------------------------+
+|freezer                     |git://git.openstack.org/openstack/freezer                                |
++----------------------------+-------------------------------------------------------------------------+
+|freezer-api                 |git://git.openstack.org/openstack/freezer-api                            |
++----------------------------+-------------------------------------------------------------------------+
+|freezer-web-ui              |git://git.openstack.org/openstack/freezer-web-ui                         |
++----------------------------+-------------------------------------------------------------------------+
+|gce-api                     |git://git.openstack.org/openstack/gce-api                                |
++----------------------------+-------------------------------------------------------------------------+
+|gnocchi                     |git://git.openstack.org/openstack/gnocchi                                |
++----------------------------+-------------------------------------------------------------------------+
+|ironic                      |git://git.openstack.org/openstack/ironic                                 |
++----------------------------+-------------------------------------------------------------------------+
+|ironic-inspector            |git://git.openstack.org/openstack/ironic-inspector                       |
++----------------------------+-------------------------------------------------------------------------+
+|kingbird                    |git://git.openstack.org/openstack/kingbird                               |
++----------------------------+-------------------------------------------------------------------------+
+|kuryr                       |git://git.openstack.org/openstack/kuryr                                  |
++----------------------------+-------------------------------------------------------------------------+
+|magnum                      |git://git.openstack.org/openstack/magnum                                 |
++----------------------------+-------------------------------------------------------------------------+
+|manila                      |git://git.openstack.org/openstack/manila                                 |
++----------------------------+-------------------------------------------------------------------------+
+|mistral                     |git://git.openstack.org/openstack/mistral                                |
++----------------------------+-------------------------------------------------------------------------+
+|monasca-api                 |git://git.openstack.org/openstack/monasca-api                            |
++----------------------------+-------------------------------------------------------------------------+
+|murano                      |git://git.openstack.org/openstack/murano                                 |
++----------------------------+-------------------------------------------------------------------------+
+|networking-6wind            |git://git.openstack.org/openstack/networking-6wind                       |
++----------------------------+-------------------------------------------------------------------------+
+|networking-bagpipe          |git://git.openstack.org/openstack/networking-bagpipe                     |
++----------------------------+-------------------------------------------------------------------------+
+|networking-bgpvpn           |git://git.openstack.org/openstack/networking-bgpvpn                      |
++----------------------------+-------------------------------------------------------------------------+
+|networking-calico           |git://git.openstack.org/openstack/networking-calico                      |
++----------------------------+-------------------------------------------------------------------------+
+|networking-cisco            |git://git.openstack.org/openstack/networking-cisco                       |
++----------------------------+-------------------------------------------------------------------------+
+|networking-fortinet         |git://git.openstack.org/openstack/networking-fortinet                    |
++----------------------------+-------------------------------------------------------------------------+
+|networking-generic-switch   |git://git.openstack.org/openstack/networking-generic-switch              |
++----------------------------+-------------------------------------------------------------------------+
+|networking-infoblox         |git://git.openstack.org/openstack/networking-infoblox                    |
++----------------------------+-------------------------------------------------------------------------+
+|networking-l2gw             |git://git.openstack.org/openstack/networking-l2gw                        |
++----------------------------+-------------------------------------------------------------------------+
+|networking-midonet          |git://git.openstack.org/openstack/networking-midonet                     |
++----------------------------+-------------------------------------------------------------------------+
+|networking-mlnx             |git://git.openstack.org/openstack/networking-mlnx                        |
++----------------------------+-------------------------------------------------------------------------+
+|networking-nec              |git://git.openstack.org/openstack/networking-nec                         |
++----------------------------+-------------------------------------------------------------------------+
+|networking-odl              |git://git.openstack.org/openstack/networking-odl                         |
++----------------------------+-------------------------------------------------------------------------+
+|networking-ofagent          |git://git.openstack.org/openstack/networking-ofagent                     |
++----------------------------+-------------------------------------------------------------------------+
+|networking-ovn              |git://git.openstack.org/openstack/networking-ovn                         |
++----------------------------+-------------------------------------------------------------------------+
+|networking-ovs-dpdk         |git://git.openstack.org/openstack/networking-ovs-dpdk                    |
++----------------------------+-------------------------------------------------------------------------+
+|networking-plumgrid         |git://git.openstack.org/openstack/networking-plumgrid                    |
++----------------------------+-------------------------------------------------------------------------+
+|networking-powervm          |git://git.openstack.org/openstack/networking-powervm                     |
++----------------------------+-------------------------------------------------------------------------+
+|networking-sfc              |git://git.openstack.org/openstack/networking-sfc                         |
++----------------------------+-------------------------------------------------------------------------+
+|networking-vsphere          |git://git.openstack.org/openstack/networking-vsphere                     |
++----------------------------+-------------------------------------------------------------------------+
+|neutron                     |git://git.openstack.org/openstack/neutron                                |
++----------------------------+-------------------------------------------------------------------------+
+|neutron-lbaas               |git://git.openstack.org/openstack/neutron-lbaas                          |
++----------------------------+-------------------------------------------------------------------------+
+|neutron-lbaas-dashboard     |git://git.openstack.org/openstack/neutron-lbaas-dashboard                |
++----------------------------+-------------------------------------------------------------------------+
+|neutron-vpnaas              |git://git.openstack.org/openstack/neutron-vpnaas                         |
++----------------------------+-------------------------------------------------------------------------+
+|nova-docker                 |git://git.openstack.org/openstack/nova-docker                            |
++----------------------------+-------------------------------------------------------------------------+
+|nova-powervm                |git://git.openstack.org/openstack/nova-powervm                           |
++----------------------------+-------------------------------------------------------------------------+
+|octavia                     |git://git.openstack.org/openstack/octavia                                |
++----------------------------+-------------------------------------------------------------------------+
+|osprofiler                  |git://git.openstack.org/openstack/osprofiler                             |
++----------------------------+-------------------------------------------------------------------------+
+|rally                       |git://git.openstack.org/openstack/rally                                  |
++----------------------------+-------------------------------------------------------------------------+
+|sahara                      |git://git.openstack.org/openstack/sahara                                 |
++----------------------------+-------------------------------------------------------------------------+
+|sahara-dashboard            |git://git.openstack.org/openstack/sahara-dashboard                       |
++----------------------------+-------------------------------------------------------------------------+
+|scalpels                    |git://git.openstack.org/openstack/scalpels                               |
++----------------------------+-------------------------------------------------------------------------+
+|searchlight                 |git://git.openstack.org/openstack/searchlight                            |
++----------------------------+-------------------------------------------------------------------------+
+|senlin                      |git://git.openstack.org/openstack/senlin                                 |
++----------------------------+-------------------------------------------------------------------------+
+|smaug                       |git://git.openstack.org/openstack/smaug                                  |
++----------------------------+-------------------------------------------------------------------------+
+|solum                       |git://git.openstack.org/openstack/solum                                  |
++----------------------------+-------------------------------------------------------------------------+
+|tacker                      |git://git.openstack.org/openstack/tacker                                 |
++----------------------------+-------------------------------------------------------------------------+
+|tap-as-a-service            |git://git.openstack.org/openstack/tap-as-a-service                       |
++----------------------------+-------------------------------------------------------------------------+
+|tricircle                   |git://git.openstack.org/openstack/tricircle                              |
++----------------------------+-------------------------------------------------------------------------+
+|trove                       |git://git.openstack.org/openstack/trove                                  |
++----------------------------+-------------------------------------------------------------------------+
+|trove-dashboard             |git://git.openstack.org/openstack/trove-dashboard                        |
++----------------------------+-------------------------------------------------------------------------+
+|vitrage                     |git://git.openstack.org/openstack/vitrage                                |
++----------------------------+-------------------------------------------------------------------------+
+|vitrage-dashboard           |git://git.openstack.org/openstack/vitrage-dashboard                      |
++----------------------------+-------------------------------------------------------------------------+
+|vmware-nsx                  |git://git.openstack.org/openstack/vmware-nsx                             |
++----------------------------+-------------------------------------------------------------------------+
+|watcher                     |git://git.openstack.org/openstack/watcher                                |
++----------------------------+-------------------------------------------------------------------------+
+|watcher-dashboard           |git://git.openstack.org/openstack/watcher-dashboard                      |
++----------------------------+-------------------------------------------------------------------------+
+|zaqar                       |git://git.openstack.org/openstack/zaqar                                  |
++----------------------------+-------------------------------------------------------------------------+
 
 Drivers
 =======
@@ -78,34 +220,3 @@
 +-------------+------------------------------------------------------------+------------+
 |             |                                                            |            |
 +-------------+------------------------------------------------------------+------------+
-
-Additional Services
-===================
-
-+-----------------+------------------------------------------------------------+------------+
-| Plugin Name     | URL                                                        | Comments   |
-|                 |                                                            |            |
-+-----------------+------------------------------------------------------------+------------+
-|amqp1            |git://git.openstack.org/openstack/devstack-plugin-amqp1     |            |
-+-----------------+------------------------------------------------------------+------------+
-|bdd              |git://git.openstack.org/openstack/devstack-plugin-bdd       |            |
-+-----------------+------------------------------------------------------------+------------+
-|ec2-api          |git://git.openstack.org/openstack/ec2-api                   |[as1]_      |
-+-----------------+------------------------------------------------------------+------------+
-|glusterfs        |git://git.openstack.org/openstack/devstack-plugin-glusterfs |            |
-+-----------------+------------------------------------------------------------+------------+
-|hdfs             |git://git.openstack.org/openstack/devstack-plugin-hdfs      |            |
-+-----------------+------------------------------------------------------------+------------+
-|ironic-inspector |git://git.openstack.org/openstack/ironic-inspector          |            |
-+-----------------+------------------------------------------------------------+------------+
-|pika             |git://git.openstack.org/openstack/devstack-plugin-pika      |            |
-+-----------------+------------------------------------------------------------+------------+
-|sheepdog         |git://git.openstack.org/openstack/devstack-plugin-sheepdog  |            |
-+-----------------+------------------------------------------------------------+------------+
-|zmq              |git://git.openstack.org/openstack/devstack-plugin-zmq       |            |
-+-----------------+------------------------------------------------------------+------------+
-|                 |                                                            |            |
-+-----------------+------------------------------------------------------------+------------+
-
-.. [as1] first functional devstack plugin, hence why used in most of
-         the examples.
diff --git a/exercises/euca.sh b/exercises/euca.sh
index c2957e2..60e7d8c 100755
--- a/exercises/euca.sh
+++ b/exercises/euca.sh
@@ -17,7 +17,6 @@
 # an error.  It is also useful for following allowing as the install occurs.
 set -o xtrace
 
-
 # Settings
 # ========
 
@@ -89,7 +88,8 @@
     VOLUME_ZONE=`euca-describe-availability-zones | head -n1 | cut -f2`
     die_if_not_set $LINENO VOLUME_ZONE "Failure to find zone for volume"
 
-    VOLUME=`euca-create-volume -s 1 -z $VOLUME_ZONE | cut -f2`
+    VOLUME=`euca-create-volume -s 1 -z $VOLUME_ZONE` || die $LINENO "Failure to create volume"
+    VOLUME=`echo "$VOLUME" | cut -f2`
     die_if_not_set $LINENO VOLUME "Failure to create volume"
 
     # Test that volume has been created
diff --git a/functions-common b/functions-common
index a26cc50..0b690da 100644
--- a/functions-common
+++ b/functions-common
@@ -322,7 +322,7 @@
         # XXX: old code paths seem to have assumed SUSE platforms also
         # had "yum".  Keep this ordered above yum so we don't try to
         # install the rh package.  suse calls it just "lsb"
-        sudo zypper -y install lsb
+        sudo zypper -n install lsb
     elif [[ -x $(which dnf 2>/dev/null) ]]; then
         sudo dnf install -y redhat-lsb-core
     elif [[ -x $(which yum 2>/dev/null) ]]; then
@@ -380,7 +380,8 @@
         DISTRO="sle${os_RELEASE%.*}"
     elif [[ "$os_VENDOR" =~ (Red.*Hat) || \
         "$os_VENDOR" =~ (CentOS) || \
-        "$os_VENDOR" =~ (OracleLinux) ]]; then
+        "$os_VENDOR" =~ (OracleLinux) || \
+        "$os_VENDOR" =~ (Virtuozzo) ]]; then
         # Drop the . release as we assume it's compatible
         # XXX re-evaluate when we get RHEL10
         DISTRO="rhel${os_RELEASE::1}"
@@ -421,7 +422,7 @@
 
     [ "$os_VENDOR" = "Fedora" ] || [ "$os_VENDOR" = "Red Hat" ] || \
         [ "$os_VENDOR" = "CentOS" ] || [ "$os_VENDOR" = "OracleLinux" ] || \
-        [ "$os_VENDOR" = "CloudLinux" ] || [ "$os_VENDOR" = "kvmibm" ]
+        [ "$os_VENDOR" = "Virtuozzo" ] || [ "$os_VENDOR" = "kvmibm" ]
 }
 
 
@@ -433,7 +434,7 @@
         GetOSVersion
     fi
 
-    [ "$os_VENDOR" = "openSUSE" ] || [ "$os_VENDOR" = "SUSE LINUX" ]
+    [[ "$os_VENDOR" =~ (openSUSE) || "$os_VENDOR" == "SUSE LINUX" ]]
 }
 
 
diff --git a/lib/cinder_backends/solidfire b/lib/cinder_backends/solidfire
deleted file mode 100644
index 16bc527..0000000
--- a/lib/cinder_backends/solidfire
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/bash
-#
-# lib/cinder_backends/solidfire
-# Configure the solidfire driver
-
-# Enable with:
-#
-#   CINDER_ENABLED_BACKENDS+=,solidfire:<volume-type-name>
-
-# Dependencies:
-#
-# - ``functions`` file
-# - ``cinder`` configurations
-
-# CINDER_CONF
-
-# configure_cinder_driver - make configuration changes, including those to other services
-
-# Save trace setting
-_XTRACE_CINDER_SOLIDFIRE=$(set +o | grep xtrace)
-set +o xtrace
-
-
-# Entry Points
-# ------------
-
-# configure_cinder_backend_solidfire - Set config files, create data dirs, etc
-function configure_cinder_backend_solidfire {
-    # To use SolidFire, set the following in local.conf:
-    # CINDER_ENABLED_BACKENDS+=,solidfire:<volume-type-name>
-    # SAN_IP=<mvip>
-    # SAN_LOGIN=<cluster-admin-account>
-    # SAN_PASSWORD=<cluster-admin-password>
-
-    local be_name=$1
-    iniset $CINDER_CONF $be_name volume_backend_name $be_name
-    iniset $CINDER_CONF $be_name volume_driver "cinder.volume.drivers.solidfire.SolidFireDriver"
-    iniset $CINDER_CONF $be_name san_ip $SAN_IP
-    iniset $CINDER_CONF $be_name san_login $SAN_LOGIN
-    iniset $CINDER_CONF $be_name san_password $SAN_PASSWORD
-}
-
-
-# Restore xtrace
-$_XTRACE_CINDER_SOLIDFIRE
-
-# Local variables:
-# mode: shell-script
-# End:
diff --git a/lib/databases/postgresql b/lib/databases/postgresql
index 852bac4..14425a5 100644
--- a/lib/databases/postgresql
+++ b/lib/databases/postgresql
@@ -47,7 +47,7 @@
 }
 
 function configure_database_postgresql {
-    local pg_conf pg_dir pg_hba root_roles
+    local pg_conf pg_dir pg_hba root_roles version
     echo_summary "Configuring and starting PostgreSQL"
     if is_fedora; then
         pg_hba=/var/lib/pgsql/data/pg_hba.conf
@@ -56,6 +56,13 @@
             sudo postgresql-setup initdb
         fi
     elif is_ubuntu; then
+        version=`psql --version | cut -d ' ' -f3 | cut -d. -f1-2`
+        if vercmp $version '>=' 9.3; then
+            if [ -z "`pg_lsclusters -h`" ]; then
+                echo 'No PostgreSQL clusters exist; will create one'
+                sudo pg_createcluster $version main --start
+            fi
+        fi
         pg_dir=`find /etc/postgresql -name pg_hba.conf|xargs dirname`
         pg_hba=$pg_dir/pg_hba.conf
         pg_conf=$pg_dir/postgresql.conf
diff --git a/lib/glance b/lib/glance
index 4df2310..3743e16 100644
--- a/lib/glance
+++ b/lib/glance
@@ -55,6 +55,8 @@
 GLANCE_POLICY_JSON=$GLANCE_CONF_DIR/policy.json
 GLANCE_SCHEMA_JSON=$GLANCE_CONF_DIR/schema-image.json
 GLANCE_SWIFT_STORE_CONF=$GLANCE_CONF_DIR/glance-swift-store.conf
+GLANCE_GLARE_CONF=$GLANCE_CONF_DIR/glance-glare.conf
+GLANCE_GLARE_PASTE_INI=$GLANCE_CONF_DIR/glance-glare-paste.ini
 
 if is_ssl_enabled_service "glance" || is_service_enabled tls-proxy; then
     GLANCE_SERVICE_PROTOCOL="https"
@@ -69,6 +71,8 @@
 GLANCE_SERVICE_PROTOCOL=${GLANCE_SERVICE_PROTOCOL:-$SERVICE_PROTOCOL}
 GLANCE_REGISTRY_PORT=${GLANCE_REGISTRY_PORT:-9191}
 GLANCE_REGISTRY_PORT_INT=${GLANCE_REGISTRY_PORT_INT:-19191}
+GLANCE_GLARE_PORT=${GLANCE_GLARE_PORT:-9494}
+GLANCE_GLARE_HOSTPORT=${GLANCE_GLARE_HOSTPORT:-$GLANCE_SERVICE_HOST:$GLANCE_GLARE_PORT}
 
 # Functions
 # ---------
@@ -93,6 +97,9 @@
     sudo install -d -o $STACK_USER $GLANCE_CONF_DIR $GLANCE_METADEF_DIR
 
     # Copy over our glance configurations and update them
+    if is_service_enabled g-glare; then
+        cp $GLANCE_DIR/etc/glance-glare.conf $GLANCE_GLARE_CONF
+    fi
     cp $GLANCE_DIR/etc/glance-registry.conf $GLANCE_REGISTRY_CONF
     iniset $GLANCE_REGISTRY_CONF DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL
     iniset $GLANCE_REGISTRY_CONF DEFAULT bind_host $GLANCE_SERVICE_LISTEN_ADDRESS
@@ -129,6 +136,9 @@
 
     # Store specific configs
     iniset $GLANCE_API_CONF glance_store filesystem_store_datadir $GLANCE_IMAGE_DIR/
+    if is_service_enabled g-glare; then
+        iniset $GLANCE_GLARE_CONF glance_store filesystem_store_datadir $GLANCE_IMAGE_DIR/
+    fi
     iniset $GLANCE_API_CONF DEFAULT registry_host $GLANCE_SERVICE_HOST
 
     iniset $GLANCE_API_CONF DEFAULT workers "$API_WORKERS"
@@ -144,6 +154,23 @@
         iniset $GLANCE_API_CONF DEFAULT graceful_shutdown_timeout "$SERVICE_GRACEFUL_SHUTDOWN_TIMEOUT"
 
         iniset $GLANCE_SWIFT_STORE_CONF ref1 user $SERVICE_PROJECT_NAME:glance-swift
+
+        # Store the glare in swift if enabled.
+        if is_service_enabled g-glare; then
+            iniset $GLANCE_GLARE_CONF glance_store default_store swift
+            iniset $GLANCE_GLARE_CONF glance_store swift_store_create_container_on_put True
+
+            iniset $GLANCE_GLARE_CONF glance_store swift_store_config_file $GLANCE_SWIFT_STORE_CONF
+            iniset $GLANCE_GLARE_CONF glance_store default_swift_reference ref1
+            iniset $GLANCE_GLARE_CONF glance_store stores "file, http, swift"
+            iniset $GLANCE_GLARE_CONF DEFAULT graceful_shutdown_timeout "$SERVICE_GRACEFUL_SHUTDOWN_TIMEOUT"
+
+            # commenting is not strictly necessary but it's confusing to have bad values in conf
+            inicomment $GLANCE_GLARE_CONF glance_store swift_store_user
+            inicomment $GLANCE_GLARE_CONF glance_store swift_store_key
+            inicomment $GLANCE_GLARE_CONF glance_store swift_store_auth_address
+        fi
+
         iniset $GLANCE_SWIFT_STORE_CONF ref1 key $SERVICE_PASSWORD
         iniset $GLANCE_SWIFT_STORE_CONF ref1 auth_address $KEYSTONE_SERVICE_URI/v3
         iniset $GLANCE_SWIFT_STORE_CONF ref1 user_domain_id default
@@ -220,6 +247,29 @@
         iniset $GLANCE_API_CONF DEFAULT cinder_endpoint_template "https://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/%(project_id)s"
         iniset $GLANCE_CACHE_CONF DEFAULT cinder_endpoint_template "https://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/%(project_id)s"
     fi
+
+    # Configure GLANCE_GLARE (Glance Glare)
+    if is_service_enabled g-glare; then
+        local dburl
+        dburl=`database_connection_url glance`
+        setup_colorized_logging $GLANCE_GLARE_CONF DEFAULT tenant user
+        iniset $GLANCE_GLARE_CONF DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL
+        iniset $GLANCE_GLARE_CONF DEFAULT bind_host $GLANCE_SERVICE_LISTEN_ADDRESS
+        iniset $GLANCE_GLARE_CONF DEFAULT bind_port $GLANCE_GLARE_PORT
+        inicomment $GLANCE_GLARE_CONF DEFAULT log_file
+        iniset $GLANCE_GLARE_CONF DEFAULT workers "$API_WORKERS"
+
+        iniset $GLANCE_GLARE_CONF database connection $dburl
+        iniset $GLANCE_GLARE_CONF paste_deploy flavor keystone
+        configure_auth_token_middleware $GLANCE_GLARE_CONF glare $GLANCE_AUTH_CACHE_DIR/artifact
+        # Register SSL certificates if provided
+        if is_ssl_enabled_service glance; then
+            ensure_certificates GLANCE
+            iniset $GLANCE_GLARE_CONF DEFAULT cert_file "$GLANCE_SSL_CERT"
+            iniset $GLANCE_GLARE_CONF DEFAULT key_file "$GLANCE_SSL_KEY"
+        fi
+        cp $GLANCE_DIR/etc/glance-glare-paste.ini $GLANCE_GLARE_PASTE_INI
+    fi
 }
 
 # create_glance_accounts() - Set up common required glance accounts
@@ -229,6 +279,7 @@
 # SERVICE_PROJECT_NAME  glance          service
 # SERVICE_PROJECT_NAME  glance-swift    ResellerAdmin (if Swift is enabled)
 # SERVICE_PROJECT_NAME  glance-search   search (if Search is enabled)
+# SERVICE_PROJECT_NAME  glare           service (if enabled)
 
 function create_glance_accounts {
     if is_service_enabled g-api; then
@@ -252,13 +303,25 @@
             "$GLANCE_SERVICE_PROTOCOL://$GLANCE_HOSTPORT" \
             "$GLANCE_SERVICE_PROTOCOL://$GLANCE_HOSTPORT"
     fi
+
+    # Add glance-glare service and endpoints
+    if is_service_enabled g-glare; then
+        create_service_user "glare"
+        get_or_create_service "glare" "artifact" "Glance Artifact Service"
+
+        get_or_create_endpoint "artifact" \
+            "$REGION_NAME" \
+            "$GLANCE_SERVICE_PROTOCOL://$GLANCE_GLARE_HOSTPORT" \
+            "$GLANCE_SERVICE_PROTOCOL://$GLANCE_GLARE_HOSTPORT" \
+            "$GLANCE_SERVICE_PROTOCOL://$GLANCE_GLARE_HOSTPORT"
+    fi
 }
 
 # create_glance_cache_dir() - Part of the init_glance() process
 function create_glance_cache_dir {
     # Create cache dir
-    sudo install -d -o $STACK_USER $GLANCE_AUTH_CACHE_DIR/api $GLANCE_AUTH_CACHE_DIR/registry $GLANCE_AUTH_CACHE_DIR/search
-    rm -f $GLANCE_AUTH_CACHE_DIR/api/* $GLANCE_AUTH_CACHE_DIR/registry/* $GLANCE_AUTH_CACHE_DIR/search/*
+    sudo install -d -o $STACK_USER $GLANCE_AUTH_CACHE_DIR/api $GLANCE_AUTH_CACHE_DIR/registry $GLANCE_AUTH_CACHE_DIR/search $GLANCE_AUTH_CACHE_DIR/artifact
+    rm -f $GLANCE_AUTH_CACHE_DIR/api/* $GLANCE_AUTH_CACHE_DIR/registry/* $GLANCE_AUTH_CACHE_DIR/search/* $GLANCE_AUTH_CACHE_DIR/artifact/*
 }
 
 # init_glance() - Initialize databases, etc.
@@ -326,6 +389,15 @@
     if ! wait_for_service $SERVICE_TIMEOUT $GLANCE_SERVICE_PROTOCOL://$GLANCE_HOSTPORT; then
         die $LINENO "g-api did not start"
     fi
+
+    #Start g-glare after g-reg/g-api/g-search
+    if is_service_enabled g-glare; then
+        run_process g-glare "$GLANCE_BIN_DIR/glance-glare --config-file=$GLANCE_CONF_DIR/glance-glare.conf"
+        echo "Waiting for Glare [g-glare] ($GLANCE_GLARE_HOSTPORT) to start..."
+        if ! wait_for_service $SERVICE_TIMEOUT $GLANCE_SERVICE_PROTOCOL://$GLANCE_GLARE_HOSTPORT; then
+            die $LINENO " Glare [g-glare] did not start"
+        fi
+    fi
 }
 
 # stop_glance() - Stop running processes
@@ -333,6 +405,10 @@
     # Kill the Glance screen windows
     stop_process g-api
     stop_process g-reg
+
+    if is_service_enabled g-glare; then
+        stop_process g-glare
+    fi
 }
 
 # Restore xtrace
diff --git a/lib/tempest b/lib/tempest
index 4cd94cd..3b8a888 100644
--- a/lib/tempest
+++ b/lib/tempest
@@ -322,7 +322,9 @@
     local tmp_cfg_file
     tmp_cfg_file=$(mktemp)
     cd $TEMPEST_DIR
-    tox -revenv --notest
+    if [[ "$OFFLINE" != "True" ]]; then
+        tox -revenv --notest
+    fi
     # NOTE(mtreinish): Respect constraints on tempest verify-config venv
     tox -evenv -- pip install -c $REQUIREMENTS_DIR/upper-constraints.txt -r requirements.txt
     tox -evenv -- tempest verify-config -uro $tmp_cfg_file
@@ -555,9 +557,9 @@
     iniset $TEMPEST_CONFIG auth tempest_roles "Member"
     if [[ $TEMPEST_USE_TEST_ACCOUNTS == "True" ]]; then
         if [[ $TEMPEST_HAS_ADMIN == "True" ]]; then
-            tempest-account-generator -c $TEMPEST_CONFIG --os-username $admin_username --os-password $admin_password --os-tenant-name $admin_tenant_name -r $TEMPEST_CONCURRENCY --with-admin etc/accounts.yaml
+            tempest-account-generator -c $TEMPEST_CONFIG --os-username $admin_username --os-password "$password" --os-tenant-name $admin_tenant_name -r $TEMPEST_CONCURRENCY --with-admin etc/accounts.yaml
         else
-            tempest-account-generator -c $TEMPEST_CONFIG --os-username $admin_username --os-password $admin_password --os-tenant-name $admin_tenant_name -r $TEMPEST_CONCURRENCY etc/accounts.yaml
+            tempest-account-generator -c $TEMPEST_CONFIG --os-username $admin_username --os-password "$password" --os-tenant-name $admin_tenant_name -r $TEMPEST_CONCURRENCY etc/accounts.yaml
         fi
         iniset $TEMPEST_CONFIG auth use_dynamic_credentials False
         iniset $TEMPEST_CONFIG auth test_accounts_file "etc/accounts.yaml"
diff --git a/rejoin-stack.sh b/rejoin-stack.sh
index 30b7bab..7048865 100755
--- a/rejoin-stack.sh
+++ b/rejoin-stack.sh
@@ -11,14 +11,15 @@
 
 source $TOP_DIR/stackrc
 
+SCREENRC=$TOP_DIR/$SCREEN_NAME-screenrc
 # if screenrc exists, run screen
-if [[ -e $TOP_DIR/stack-screenrc ]]; then
-    if screen -ls | egrep -q "[0-9].stack"; then
+if [[ -e $SCREENRC ]]; then
+    if screen -ls | egrep -q "[0-9]+.${SCREEN_NAME}"; then
         echo "Attaching to already started screen session.."
-        exec screen -r stack
+        exec screen -r $SCREEN_NAME
     fi
-    exec screen -c $TOP_DIR/stack-screenrc
+    exec screen -c $SCREENRC
 fi
 
-echo "Couldn't find $TOP_DIR/stack-screenrc file; have you run stack.sh yet?"
+echo "Couldn't find $SCREENRC file; have you run stack.sh yet?"
 exit 1
diff --git a/tools/generate-devstack-plugins-list.py b/tools/generate-devstack-plugins-list.py
new file mode 100644
index 0000000..1fa5501
--- /dev/null
+++ b/tools/generate-devstack-plugins-list.py
@@ -0,0 +1,59 @@
+#! /usr/bin/env python
+
+# Copyright 2016 Hewlett Packard Enterprise Development Company, L.P.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+# This script is intended to be run as part of a periodic proposal bot
+# job in OpenStack infrastructure.
+#
+# In order to function correctly, the environment in which the
+# script runs must have
+#   * network access to the review.openstack.org Gerrit API
+#     working directory
+#   * network access to https://git.openstack.org/cgit
+
+import json
+import requests
+
+url = 'https://review.openstack.org/projects/'
+
+# This is what a project looks like
+'''
+  "openstack-attic/akanda": {
+    "id": "openstack-attic%2Fakanda",
+    "state": "READ_ONLY"
+  },
+'''
+
+def is_in_openstack_namespace(proj):
+    return proj.startswith('openstack/')
+
+# Rather than returning a 404 for a nonexistent file, cgit delivers a
+# 0-byte response to a GET request.  It also does not provide a
+# Content-Length in a HEAD response, so the way we tell if a file exists
+# is to check the length of the entire GET response body.
+def has_devstack_plugin(proj):
+    r = requests.get("https://git.openstack.org/cgit/%s/plain/devstack/plugin.sh" % proj)
+    if len(r.text) > 0:
+        return True
+    else:
+        False
+
+r = requests.get(url)
+projects = sorted(filter(is_in_openstack_namespace, json.loads(r.text[4:])))
+
+found_plugins = filter(has_devstack_plugin, projects)
+
+for project in found_plugins:
+    print project[10:]
diff --git a/tools/generate-devstack-plugins-list.sh b/tools/generate-devstack-plugins-list.sh
index 6e9e828..8a1f743 100644
--- a/tools/generate-devstack-plugins-list.sh
+++ b/tools/generate-devstack-plugins-list.sh
@@ -19,11 +19,19 @@
 #
 # In order to function correctly, the environment in which the
 # script runs must have
+#   * a writable doc/source directory relative to the current
+#     working directory
+#   AND ( (
 #   * git
 #   * all git repos meant to be searched for plugins cloned and
 #     at the desired level of up-to-datedness
-#   * a writable doc/source directory relative to the current
+#   * the environment variable git_dir pointing to the location
+#   * of said git repositories
+#   ) OR (
+#   * network access to the review.openstack.org Gerrit API
 #     working directory
+#   * network access to https://git.openstack.org/cgit
+#   ))
 #
 # If a file named data/devstack-plugins-registry.header or
 # data/devstack-plugins-registry.footer is found relative to the
@@ -35,25 +43,18 @@
 
 test -r data/devstack-plugins-registry.header && cat data/devstack-plugins-registry.header
 
-pushd ${git_dir:-/opt/openstack} >/dev/null
-for i in *; do
-    pushd ${i} >/dev/null
-    if output="$(git log --diff-filter=A --format='%cd' --date=short -1 -- devstack/plugin.sh)"; then
-        test -n "$output" && plugins[$i]=${output}
-    fi
-    popd >/dev/null
-done
-popd >/dev/null
+sorted_plugins=$(python tools/generate-devstack-plugins-list.py)
 
-sorted_plugins=( $(for k in "${!plugins[@]}"; do echo "$k"; done | sort))
-
-for k in "${sorted_plugins[@]}"; do
-    project=${k:0:18}
+for k in ${sorted_plugins}; do
+    project=${k:0:28}
     giturl="git://git.openstack.org/openstack/${k:0:26}"
-    pdate="${plugins[$k]}"
-    printf "|%-18s|%-60s|%-12s|\n" "${project}" "${giturl}" "${pdate}"
-    printf "+------------------+------------------------------------------------------------+------------+\n"
+    printf "|%-28s|%-73s|\n" "${project}" "${giturl}"
+    printf "+----------------------------+-------------------------------------------------------------------------+\n"
 done
 
 test -r data/devstack-plugins-registry.footer && cat data/devstack-plugins-registry.footer
 ) > doc/source/plugin-registry.rst
+
+if [[ -n ${1} ]]; then
+    cp doc/source/plugin-registry.rst ${1}/doc/source/plugin-registry.rst
+fi
diff --git a/tools/worlddump.py b/tools/worlddump.py
index 01f601c..72a257f 100755
--- a/tools/worlddump.py
+++ b/tools/worlddump.py
@@ -58,8 +58,8 @@
     try:
         subprocess.check_call(cmd, shell=True)
         print
-    except subprocess.CalledProcessError:
-        print "*** Failed to run: %s" % cmd
+    except subprocess.CalledProcessError as e:
+        print "*** Failed to run '%(cmd)s': %(err)s" % {'cmd': cmd, 'err': e}
 
 
 def _find_cmd(cmd):
diff --git a/unstack.sh b/unstack.sh
index d7670e3..7a7c945 100755
--- a/unstack.sh
+++ b/unstack.sh
@@ -182,7 +182,7 @@
 # Clean up the remainder of the screen processes
 SCREEN=$(which screen)
 if [[ -n "$SCREEN" ]]; then
-    SESSION=$(screen -ls | awk '/[0-9].stack/ { print $1 }')
+    SESSION=$(screen -ls | awk "/[0-9]+.${SCREEN_NAME}/"'{ print $1 }')
     if [[ -n "$SESSION" ]]; then
         screen -X -S $SESSION quit
     fi