Merge "specify session name on perform rejoin stack"
diff --git a/README.md b/README.md
index 1987db8..8573638 100644
--- a/README.md
+++ b/README.md
@@ -153,6 +153,7 @@
     MYSQL_HOST=$SERVICE_HOST
     RABBIT_HOST=$SERVICE_HOST
     Q_HOST=$SERVICE_HOST
+    MATCHMAKER_REDIS_HOST=$SERVICE_HOST
 
 # Cells
 
diff --git a/files/rpms/horizon b/files/rpms/horizon
index d50482e..151e7e2 100644
--- a/files/rpms/horizon
+++ b/files/rpms/horizon
@@ -16,8 +16,7 @@
 python-migrate
 python-mox
 python-netaddr
-# RHEL6's python-nose is incompatible with Tempest
-python-nose         #dist:f16,f17,f18
+python-nose
 python-paste        #dist:f16,f17,f18
 python-paste-deploy #dist:f16,f17,f18
 python-pep8
diff --git a/files/rpms/quantum b/files/rpms/quantum
index 32c6f62..8827d5a 100644
--- a/files/rpms/quantum
+++ b/files/rpms/quantum
@@ -4,6 +4,7 @@
 iptables
 iputils
 mysql-server # NOPRIME
+openvswitch # NOPRIME
 python-boto
 python-eventlet
 python-greenlet
diff --git a/files/rpms/swift b/files/rpms/swift
index c626d8e..1b36e34 100644
--- a/files/rpms/swift
+++ b/files/rpms/swift
@@ -7,8 +7,7 @@
 python-eventlet
 python-greenlet
 python-netifaces
-# RHEL6's python-nose is incompatible with Tempest
-python-nose         # dist:f16,f17,f18
+python-nose
 python-paste-deploy # dist:f16,f17,f18
 python-setuptools   # dist:f16,f17,f18
 python-simplejson
diff --git a/lib/heat b/lib/heat
index 0c95ebb..4d2f84e 100644
--- a/lib/heat
+++ b/lib/heat
@@ -2,7 +2,7 @@
 # Install and start **Heat** service
 
 # To enable, add the following to localrc
-# ENABLED_SERVICES+=,heat,h-api-cfn,h-api-cw,h-eng
+# ENABLED_SERVICES+=,heat,h-api,h-api-cfn,h-api-cw,h-eng
 
 # Dependencies:
 # - functions
@@ -193,8 +193,8 @@
 
 # stop_heat() - Stop running processes
 function stop_heat() {
-    # Kill the cinder screen windows
-    for serv in h-eng h-api-cfn h-api-cw; do
+    # Kill the screen windows
+    for serv in h-eng h-api h-api-cfn h-api-cw; do
         screen -S $SCREEN_NAME -p $serv -X kill
     done
 }
diff --git a/lib/rpc_backend b/lib/rpc_backend
index fc439ec..4b04053 100644
--- a/lib/rpc_backend
+++ b/lib/rpc_backend
@@ -78,14 +78,18 @@
         fi
     elif is_service_enabled zeromq; then
         if is_fedora; then
-            uninstall_package zeromq python-zmq
+            uninstall_package zeromq python-zmq redis
         elif is_ubuntu; then
-            uninstall_package libzmq1 python-zmq
+            uninstall_package libzmq1 python-zmq redis-server
         elif is_suse; then
-            uninstall_package libzmq1 python-pyzmq
+            uninstall_package libzmq1 python-pyzmq redis
         else
             exit_distro_not_supported "zeromq installation"
         fi
+
+        # Necessary directory for socket location.
+        sudo mkdir -p /var/run/openstack
+        sudo chown $STACK_USER /var/run/openstack
     fi
 }
 
@@ -115,12 +119,15 @@
             exit_distro_not_supported "qpid installation"
         fi
     elif is_service_enabled zeromq; then
+        # NOTE(ewindisch): Redis is not strictly necessary
+        # but there is a matchmaker driver that works
+        # really well & out of the box for multi-node.
         if is_fedora; then
-            install_package zeromq python-zmq
+            install_package zeromq python-zmq redis
         elif is_ubuntu; then
-            install_package libzmq1 python-zmq
+            install_package libzmq1 python-zmq redis-server
         elif is_suse; then
-            install_package libzmq1 python-pyzmq
+            install_package libzmq1 python-pyzmq redis
         else
             exit_distro_not_supported "zeromq installation"
         fi
@@ -158,6 +165,11 @@
     local section=$3
     if is_service_enabled zeromq; then
         iniset $file $section rpc_backend ${package}.openstack.common.rpc.impl_zmq
+        iniset $file $section rpc_zmq_matchmaker \
+            ${package}.openstack.common.rpc.matchmaker_redis.MatchMakerRedis
+        # Set MATCHMAKER_REDIS_HOST if running multi-node.
+        MATCHMAKER_REDIS_HOST=${MATCHMAKER_REDIS_HOST:-127.0.0.1}
+        iniset $file matchmaker_redis host $MATCHMAKER_REDIS_HOST
     elif is_service_enabled qpid; then
         iniset $file $section rpc_backend ${package}.openstack.common.rpc.impl_qpid
         if is_ubuntu; then
diff --git a/stack.sh b/stack.sh
index d7367fb..b3e110d 100755
--- a/stack.sh
+++ b/stack.sh
@@ -32,6 +32,12 @@
 # and ``DISTRO``
 GetDistro
 
+
+# Configure non-default repos
+# ===========================
+
+# Repo configuration needs to occur before package installation.
+
 # Some dependencies are not available in Debian Wheezy official
 # repositories. However, it's possible to run OpenStack from gplhost
 # repository.
@@ -42,6 +48,17 @@
     apt_get install --force-yes gplhost-archive-keyring
 fi
 
+# Installing Open vSwitch on RHEL6 requires enabling the RDO repo.
+RHEL6_RDO_REPO_RPM=${RHEL6_RDO_REPO_RPM:-"http://rdo.fedorapeople.org/openstack/openstack-grizzly/rdo-release-grizzly-3.noarch.rpm"}
+RHEL6_RDO_REPO_ID=${RHEL6_RDO_REPO_ID:-"openstack-grizzly"}
+if [[ is_fedora && $DISTRO =~ (rhel6) ]]; then
+    if ! yum repolist enabled $RHEL6_RDO_REPO_ID | grep -q $RHEL6_RDO_REPO_ID; then
+        echo "RDO repo not detected; installing"
+        yum_install $RHEL6_RDO_REPO_RPM
+    fi
+fi
+
+
 # Global Settings
 # ===============
 
@@ -608,6 +625,15 @@
     # transiently, meaning we avoid the issue of it not being cleaned
     # out properly.  Note we do this before the track-depends below.
     pip_install hgtools
+
+    # The version of python-nose in the RHEL6 repo is incompatible
+    # with Tempest.  As a workaround:
+
+    # Install nose 1.1 (Tempest-compatible) from EPEL
+    install_package python-nose1.1
+    # Add a symlink for the new nosetests to allow tox for Tempest to
+    # work unmolested.
+    sudo ln -sf /usr/bin/nosetests1.1 /usr/local/bin/nosetests
 fi
 
 TRACK_DEPENDS=${TRACK_DEPENDS:-False}