Refactor rpc backend configuration logic
This commit also changes the following:
- Fixes Nova QPID module path
- Fixes a bug Cinder ZeroMQ RPC points to nova module
- Adds ZeroMQ setting for Heat RPC
qpid_is_supported is moved from functions to lib/rpc_backend.
This work is based on the work by Isaku Yamahata <yamahata@valinux.co.jp>
in https://review.openstack.org/#/c/19074/.
Change-Id: I45e21b1fb85e539213f5243764132a37906d7455
diff --git a/stack.sh b/stack.sh
index 5c071fc..bf473ca 100755
--- a/stack.sh
+++ b/stack.sh
@@ -95,8 +95,9 @@
rm $TOP_DIR/.stackenv
fi
-# Import database configuration
+# Import common services (database, message queue) configuration
source $TOP_DIR/lib/database
+source $TOP_DIR/lib/rpc_backend
# Validate database selection
# Since DATABASE_BACKENDS is now set, this also gets ENABLED_SERVICES
@@ -118,10 +119,9 @@
fi
fi
-if is_service_enabled qpid && ! qpid_is_supported; then
- echo "Qpid support is not available for this version of your distribution."
- exit 1
-fi
+# Make sure we only have one rpc backend enabled,
+# and the specified rpc backend is available on your platform.
+check_rpc_backend
# ``stack.sh`` keeps function libraries here
# Make sure ``$TOP_DIR/lib`` directory is present
@@ -147,23 +147,6 @@
exit 1
fi
-# Make sure we only have one rpc backend enabled.
-rpc_backend_cnt=0
-for svc in qpid zeromq rabbit; do
- is_service_enabled $svc &&
- ((rpc_backend_cnt++))
-done
-if [ "$rpc_backend_cnt" -gt 1 ]; then
- echo "ERROR: only one rpc backend may be enabled,"
- echo " set only one of 'rabbit', 'qpid', 'zeromq'"
- echo " via ENABLED_SERVICES."
-elif [ "$rpc_backend_cnt" == 0 ]; then
- echo "ERROR: at least one rpc backend must be enabled,"
- echo " set one of 'rabbit', 'qpid', 'zeromq'"
- echo " via ENABLED_SERVICES."
-fi
-unset rpc_backend_cnt
-
# Set up logging level
VERBOSE=$(trueorfalse True $VERBOSE)
@@ -670,32 +653,7 @@
fi
fi
-if is_service_enabled rabbit; then
- # Install rabbitmq-server
- # the temp file is necessary due to LP: #878600
- tfile=$(mktemp)
- install_package rabbitmq-server > "$tfile" 2>&1
- cat "$tfile"
- rm -f "$tfile"
-elif is_service_enabled qpid; then
- if is_fedora; then
- install_package qpid-cpp-server-daemon
- elif is_ubuntu; then
- install_package qpidd
- else
- exit_distro_not_supported "qpid installation"
- fi
-elif is_service_enabled zeromq; then
- if is_fedora; then
- install_package zeromq python-zmq
- elif is_ubuntu; then
- install_package libzmq1 python-zmq
- elif is_suse; then
- install_package libzmq1 python-pyzmq
- else
- exit_distro_not_supported "zeromq installation"
- fi
-fi
+install_rpc_backend
if is_service_enabled $DATABASE_BACKENDS; then
install_database
@@ -868,20 +826,7 @@
# Finalize queue installation
# ----------------------------
-
-if is_service_enabled rabbit; then
- # Start rabbitmq-server
- echo_summary "Starting RabbitMQ"
- if is_fedora || is_suse; then
- # service is not started by default
- restart_service rabbitmq-server
- fi
- # change the rabbit password since the default is "guest"
- sudo rabbitmqctl change_password guest $RABBIT_PASSWORD
-elif is_service_enabled qpid; then
- echo_summary "Starting qpid"
- restart_service qpidd
-fi
+restart_rpc_backend
# Configure database
@@ -1075,14 +1020,7 @@
iniset $NOVA_CONF DEFAULT vncserver_listen "$VNCSERVER_LISTEN"
iniset $NOVA_CONF DEFAULT vncserver_proxyclient_address "$VNCSERVER_PROXYCLIENT_ADDRESS"
iniset $NOVA_CONF DEFAULT ec2_dmz_host "$EC2_DMZ_HOST"
- if is_service_enabled zeromq; then
- iniset $NOVA_CONF DEFAULT rpc_backend "nova.openstack.common.rpc.impl_zmq"
- elif is_service_enabled qpid; then
- iniset $NOVA_CONF DEFAULT rpc_backend "nova.rpc.impl_qpid"
- elif [ -n "$RABBIT_HOST" ] && [ -n "$RABBIT_PASSWORD" ]; then
- iniset $NOVA_CONF DEFAULT rabbit_host "$RABBIT_HOST"
- iniset $NOVA_CONF DEFAULT rabbit_password "$RABBIT_PASSWORD"
- fi
+ iniset_rpc_backend nova $NOVA_CONF DEFAULT
iniset $NOVA_CONF DEFAULT glance_api_servers "$GLANCE_HOSTPORT"