Refactor Zaqar to satisfy openstack uwsgi goal

After this change, Zaqar-wsgi will not be forced to port 8888 by
devstack. Use apache proxy now and the endpoint will be like:
http://IP/messaging by default.

Change-Id: I413cd24a9ef70a8bbada46d63d5dfdff09366b3e
This commit is contained in:
wander.way 2017-10-13 15:28:43 +08:00 committed by wanghao
parent c611c5c6e8
commit 5a7636786e
5 changed files with 28 additions and 21 deletions

View File

@ -153,19 +153,7 @@ function configure_zaqar {
pip_install uwsgi pip_install uwsgi
iniset $ZAQAR_UWSGI_CONF uwsgi master true write_uwsgi_config "$ZAQAR_UWSGI_CONF" "$ZAQAR_UWSGI_APP" "/messaging"
iniset $ZAQAR_UWSGI_CONF uwsgi die-on-term true
iniset $ZAQAR_UWSGI_CONF uwsgi exit-on-reload true
iniset $ZAQAR_UWSGI_CONF uwsgi http $ZAQAR_SERVICE_HOST:$ZAQAR_SERVICE_PORT
iniset $ZAQAR_UWSGI_CONF uwsgi processes $API_WORKERS
iniset $ZAQAR_UWSGI_CONF uwsgi enable_threads true
iniset $ZAQAR_UWSGI_CONF uwsgi threads 4
iniset $ZAQAR_UWSGI_CONF uwsgi thunder-lock true
iniset $ZAQAR_UWSGI_CONF uwsgi buffer-size 65535
iniset $ZAQAR_UWSGI_CONF uwsgi wsgi-file $ZAQAR_DIR/zaqar/transport/wsgi/app.py
iniset $ZAQAR_UWSGI_CONF uwsgi master true
iniset $ZAQAR_UWSGI_CONF uwsgi add-header "Connection: close"
iniset $ZAQAR_UWSGI_CONF uwsgi lazy-apps true
cleanup_zaqar cleanup_zaqar
} }
@ -258,9 +246,13 @@ function start_zaqar {
echo "Waiting for Zaqar to start..." echo "Waiting for Zaqar to start..."
local www_authenticate_uri=http://${ZAQAR_SERVICE_HOST}/identity local www_authenticate_uri=http://${ZAQAR_SERVICE_HOST}/identity
token=$(openstack token issue -c id -f value --os-auth-url ${www_authenticate_uri}) token=$(openstack token issue -c id -f value --os-auth-url ${www_authenticate_uri})
if ! timeout $SERVICE_TIMEOUT sh -c "while ! wget --no-proxy -q --header=\"Client-ID:$(uuidgen)\" --header=\"X-Auth-Token:$token\" -O- $ZAQAR_SERVICE_PROTOCOL://$ZAQAR_SERVICE_HOST/messaging/v2/ping; do sleep 1; done"; then
# TODO(wxy): This check could be removed after the migration to Apache
# proxy.
if ! timeout $SERVICE_TIMEOUT sh -c "while ! wget --no-proxy -q --header=\"Client-ID:$(uuidgen)\" --header=\"X-Auth-Token:$token\" -O- $ZAQAR_SERVICE_PROTOCOL://$ZAQAR_SERVICE_HOST:$ZAQAR_SERVICE_PORT/v2/ping; do sleep 1; done"; then if ! timeout $SERVICE_TIMEOUT sh -c "while ! wget --no-proxy -q --header=\"Client-ID:$(uuidgen)\" --header=\"X-Auth-Token:$token\" -O- $ZAQAR_SERVICE_PROTOCOL://$ZAQAR_SERVICE_HOST:$ZAQAR_SERVICE_PORT/v2/ping; do sleep 1; done"; then
die $LINENO "Zaqar did not start" die $LINENO "Zaqar did not start"
fi fi
fi
} }
# stop_zaqar() - Stop running processes # stop_zaqar() - Stop running processes
@ -268,9 +260,9 @@ function stop_zaqar {
local serv local serv
# Kill the zaqar screen windows # Kill the zaqar screen windows
for serv in zaqar-wsgi zaqar-websocket; do for serv in zaqar-wsgi zaqar-websocket; do
screen -S $SCREEN_NAME -p $serv -X kill stop_process $serv
done done
uwsgi --stop $ZAQAR_UWSGI_MASTER_PIDFILE remove_uwsgi_config "$ZAQAR_UWSGI_CONF" "$ZAQAR_UWSGI_APP"
} }
function create_zaqar_accounts { function create_zaqar_accounts {
@ -282,9 +274,9 @@ function create_zaqar_accounts {
"messaging" "Zaqar Service") "messaging" "Zaqar Service")
get_or_create_endpoint $zaqar_service \ get_or_create_endpoint $zaqar_service \
"$REGION_NAME" \ "$REGION_NAME" \
"$ZAQAR_SERVICE_PROTOCOL://$ZAQAR_SERVICE_HOST:$ZAQAR_SERVICE_PORT" \ "$ZAQAR_SERVICE_PROTOCOL://$ZAQAR_SERVICE_HOST/messaging" \
"$ZAQAR_SERVICE_PROTOCOL://$ZAQAR_SERVICE_HOST:$ZAQAR_SERVICE_PORT" \ "$ZAQAR_SERVICE_PROTOCOL://$ZAQAR_SERVICE_HOST/messaging" \
"$ZAQAR_SERVICE_PROTOCOL://$ZAQAR_SERVICE_HOST:$ZAQAR_SERVICE_PORT" "$ZAQAR_SERVICE_PROTOCOL://$ZAQAR_SERVICE_HOST/messaging"
local zaqar_ws_service=$(get_or_create_service "zaqar-websocket" \ local zaqar_ws_service=$(get_or_create_service "zaqar-websocket" \
"messaging-websocket" "Zaqar Websocket Service") "messaging-websocket" "Zaqar Websocket Service")

View File

@ -14,6 +14,7 @@ ZAQAR_AUTH_CACHE_DIR=${ZAQAR_AUTH_CACHE_DIR:-/var/cache/zaqar}
# Support potential entry-points console scripts # Support potential entry-points console scripts
ZAQAR_BIN_DIR=$(get_python_exec_prefix) ZAQAR_BIN_DIR=$(get_python_exec_prefix)
ZAQAR_UWSGI_APP=$ZAQAR_BIN_DIR/zaqar-wsgi
# Set up database backend # Set up database backend
ZAQAR_BACKEND=${ZAQAR_BACKEND:-mongodb} ZAQAR_BACKEND=${ZAQAR_BACKEND:-mongodb}

View File

@ -0,0 +1,6 @@
deprecations:
- |
Set "wsgi-file = zaqar/transport/wsgi/app.py" in uwsgi config file is
deprecated and this way is removed in Bobcat release. Please use something
like (Ubuntu for example): "wsgi-file = /usr/local/bin/zaqar-wsgi" after
installing Zaqar.

View File

@ -35,6 +35,9 @@ console_scripts =
zaqar-sql-db-manage = zaqar.storage.sqlalchemy.migration.cli:main zaqar-sql-db-manage = zaqar.storage.sqlalchemy.migration.cli:main
zaqar-status = zaqar.cmd.status:main zaqar-status = zaqar.cmd.status:main
wsgi_scripts =
zaqar-wsgi = zaqar.transport.wsgi.app:build_wsgi
zaqar.data.storage = zaqar.data.storage =
mongodb = zaqar.storage.mongodb.driver:DataDriver mongodb = zaqar.storage.mongodb.driver:DataDriver
mongodb.fifo = zaqar.storage.mongodb.driver:FIFODataDriver mongodb.fifo = zaqar.storage.mongodb.driver:FIFODataDriver

View File

@ -42,9 +42,14 @@ conf(project='zaqar', prog='zaqar-queues', args=[])
log.setup(conf, 'zaqar') log.setup(conf, 'zaqar')
gmr.TextGuruMeditation.setup_autorun(version, conf=conf) gmr.TextGuruMeditation.setup_autorun(version, conf=conf)
boot = bootstrap.Bootstrap(conf) boot = bootstrap.Bootstrap(conf)
conf.drivers.transport = 'wsgi' conf.drivers.transport = 'wsgi'
application = boot.transport.app application = boot.transport.app
# Keep the old name for compatibility # Keep the old name for compatibility
app = application app = application
def build_wsgi():
"""Another way used by setup.cfg to initialize WSGI app"""
# TODO(wxy): Move the outside code into this function in T.
return app