Deploy masakari-api with uwsgi
As per community goal [1], this patch allows deploying masakari-api with uwsgi. NOTE: This patch takes reference from the nova implementation of deploying nova-api with uwsgi. [1] https://governance.openstack.org/tc/goals/pike/deploy-api-in-wsgi.html Change-Id: I469d4b6df49ad3489722feae0b795c20a6a3913b
This commit is contained in:
parent
24e500cb77
commit
5bbd78e326
@ -25,6 +25,10 @@ if is_service_enabled tls-proxy; then
|
|||||||
MASAKARI_SERVICE_PROTOCOL="https"
|
MASAKARI_SERVICE_PROTOCOL="https"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Toggle for deploying Masakari under a wsgi server.
|
||||||
|
MASAKARI_USE_MOD_WSGI=${MASAKARI_USE_MOD_WSGI:-True}
|
||||||
|
|
||||||
|
|
||||||
# Functions
|
# Functions
|
||||||
# ---------
|
# ---------
|
||||||
|
|
||||||
@ -52,11 +56,19 @@ function create_masakari_accounts {
|
|||||||
|
|
||||||
local masakari_service=$(get_or_create_service "masakari" \
|
local masakari_service=$(get_or_create_service "masakari" \
|
||||||
"instance-ha" "OpenStack High Availability")
|
"instance-ha" "OpenStack High Availability")
|
||||||
get_or_create_endpoint $masakari_service \
|
if [ "$MASAKARI_USE_MOD_WSGI" == "False" ]; then
|
||||||
"$REGION_NAME" \
|
get_or_create_endpoint $masakari_service \
|
||||||
"$MASAKARI_SERVICE_PROTOCOL://$SERVICE_HOST:$MASAKARI_SERVICE_PORT/v1/\$(tenant_id)s" \
|
"$REGION_NAME" \
|
||||||
"$MASAKARI_SERVICE_PROTOCOL://$SERVICE_HOST:$MASAKARI_SERVICE_PORT/v1/\$(tenant_id)s" \
|
"$MASAKARI_SERVICE_PROTOCOL://$SERVICE_HOST:$MASAKARI_SERVICE_PORT/v1/\$(tenant_id)s" \
|
||||||
"$MASAKARI_SERVICE_PROTOCOL://$SERVICE_HOST:$MASAKARI_SERVICE_PORT/v1/\$(tenant_id)s"
|
"$MASAKARI_SERVICE_PROTOCOL://$SERVICE_HOST:$MASAKARI_SERVICE_PORT/v1/\$(tenant_id)s" \
|
||||||
|
"$MASAKARI_SERVICE_PROTOCOL://$SERVICE_HOST:$MASAKARI_SERVICE_PORT/v1/\$(tenant_id)s"
|
||||||
|
else
|
||||||
|
get_or_create_endpoint $masakari_service \
|
||||||
|
"$REGION_NAME" \
|
||||||
|
"$MASAKARI_SERVICE_PROTOCOL://$SERVICE_HOST/instance-ha/v1/\$(tenant_id)s" \
|
||||||
|
"$MASAKARI_SERVICE_PROTOCOL://$SERVICE_HOST/instance-ha/v1/\$(tenant_id)s" \
|
||||||
|
"$MASAKARI_SERVICE_PROTOCOL://$SERVICE_HOST/instance-ha/v1/\$(tenant_id)s"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,6 +81,10 @@ function cleanup_masakari {
|
|||||||
# Clean up dirs
|
# Clean up dirs
|
||||||
rm -fr $MASAKARI_AUTH_CACHE_DIR/*
|
rm -fr $MASAKARI_AUTH_CACHE_DIR/*
|
||||||
rm -fr $MASAKARI_CONF_DIR/*
|
rm -fr $MASAKARI_CONF_DIR/*
|
||||||
|
|
||||||
|
if [ "$MASAKARI_USE_MOD_WSGI" == "True" ]; then
|
||||||
|
remove_uwsgi_config "$MASAKARI_UWSGI_CONF" "$MASAKARI_UWSGI"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# iniset_conditional() - Sets the value in the inifile, but only if it's
|
# iniset_conditional() - Sets the value in the inifile, but only if it's
|
||||||
@ -127,6 +143,10 @@ function configure_masakari {
|
|||||||
if is_service_enabled tls-proxy; then
|
if is_service_enabled tls-proxy; then
|
||||||
iniset $MASAKARI_CONF DEFAULT masakari_api_listen_port $MASAKARI_SERVICE_PORT_INT
|
iniset $MASAKARI_CONF DEFAULT masakari_api_listen_port $MASAKARI_SERVICE_PORT_INT
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$MASAKARI_USE_MOD_WSGI" == "True" ]; then
|
||||||
|
write_uwsgi_config "$MASAKARI_UWSGI_CONF" "$MASAKARI_UWSGI" "/instance-ha"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# install_masakari() - Collect source and prepare
|
# install_masakari() - Collect source and prepare
|
||||||
@ -157,20 +177,35 @@ function init_masakari {
|
|||||||
get_or_add_user_project_role admin ${ADMIN_ALT_USERNAME} ${ALT_TENANT_NAME}
|
get_or_add_user_project_role admin ${ADMIN_ALT_USERNAME} ${ALT_TENANT_NAME}
|
||||||
}
|
}
|
||||||
|
|
||||||
# start_masakari() - Start running processes, including screen
|
# start_masakari() - Start running processes
|
||||||
function start_masakari {
|
function start_masakari {
|
||||||
|
local masakari_url
|
||||||
|
|
||||||
if is_service_enabled tls-proxy; then
|
if [[ "$ENABLED_SERVICES" =~ "masakari-api" ]]; then
|
||||||
start_tls_proxy masakari-service '*' $MASAKARI_SERVICE_PORT $SERVICE_HOST $MASAKARI_SERVICE_PORT_INT
|
if [ "$MASAKARI_USE_MOD_WSGI" == "False" ]; then
|
||||||
|
run_process masakari-api "$MASAKARI_BIN_DIR/masakari-api --config-file=$MASAKARI_CONF --debug"
|
||||||
|
masakari_url=$MASAKARI_SERVICE_PROTOCOL://$MASAKARI_SERVICE_HOST:$MASAKARI_SERVICE_PORT
|
||||||
|
# Start proxy if tls enabled
|
||||||
|
if is_service_enabled tls_proxy; then
|
||||||
|
start_tls_proxy masakari-service '*' $MASAKARI_SERVICE_PORT $SERVICE_HOST $MASAKARI_SERVICE_PORT_INT
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
run_process "masakari-api" "$MASAKARI_BIN_DIR/uwsgi --procname-prefix masakari-api --ini $MASAKARI_UWSGI_CONF"
|
||||||
|
masakari_url=$MASAKARI_SERVICE_PROTOCOL://$MASAKARI_SERVICE_HOST/instance-ha/v1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Waiting for Masakari API to start..."
|
||||||
|
if ! wait_for_service $SERVICE_TIMEOUT $masakari_url; then
|
||||||
|
die $LINENO "masakari-api did not start"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
run_process masakari-api "$MASAKARI_BIN_DIR/masakari-api --config-file=$MASAKARI_CONF --debug"
|
|
||||||
run_process masakari-engine "$MASAKARI_BIN_DIR/masakari-engine --config-file=$MASAKARI_CONF --debug"
|
run_process masakari-engine "$MASAKARI_BIN_DIR/masakari-engine --config-file=$MASAKARI_CONF --debug"
|
||||||
}
|
}
|
||||||
|
|
||||||
# stop_masakari() - Stop running processes
|
# stop_masakari() - Stop running processes
|
||||||
function stop_masakari {
|
function stop_masakari {
|
||||||
# Kill the masakari screen windows
|
# Kill the masakari services
|
||||||
local serv
|
local serv
|
||||||
for serv in masakari-engine masakari-api; do
|
for serv in masakari-engine masakari-api; do
|
||||||
stop_process $serv
|
stop_process $serv
|
||||||
|
@ -17,6 +17,7 @@ MASAKARI_LOCAL_API_PASTE_INI=${MASAKARI_LOCAL_API_PASTE_INI:-${MASAKARI_LOCAL_CO
|
|||||||
MASAKARI_LOCAL_POLICY_JSON=${MASAKARI_LOCAL_POLICY_JSON:-${MASAKARI_LOCAL_CONF_DIR}/policy.json}
|
MASAKARI_LOCAL_POLICY_JSON=${MASAKARI_LOCAL_POLICY_JSON:-${MASAKARI_LOCAL_CONF_DIR}/policy.json}
|
||||||
MASAKARI_AUTH_CACHE_DIR=${MASAKARI_AUTH_CACHE_DIR:-/var/cache/masakari}
|
MASAKARI_AUTH_CACHE_DIR=${MASAKARI_AUTH_CACHE_DIR:-/var/cache/masakari}
|
||||||
|
|
||||||
|
MASAKARI_SERVICE_HOST=${MASAKARI_SERVICE_HOST:-$SERVICE_HOST}
|
||||||
MASAKARI_SERVICE_PROTOCOL=${MASAKARI_SERVICE_PROTOCOL:-http}
|
MASAKARI_SERVICE_PROTOCOL=${MASAKARI_SERVICE_PROTOCOL:-http}
|
||||||
|
|
||||||
# Support entry points installation of console scripts
|
# Support entry points installation of console scripts
|
||||||
@ -31,5 +32,8 @@ MASAKARI_MANAGE=$MASAKARI_BIN_DIR/masakari-manage
|
|||||||
MASAKARI_SERVICE_PORT=${MASAKARI_SERVICE_PORT:-15868}
|
MASAKARI_SERVICE_PORT=${MASAKARI_SERVICE_PORT:-15868}
|
||||||
MASAKARI_SERVICE_PORT_INT=${MASAKARI_SERVICE_PORT_INT:-25868}
|
MASAKARI_SERVICE_PORT_INT=${MASAKARI_SERVICE_PORT_INT:-25868}
|
||||||
|
|
||||||
|
MASAKARI_UWSGI=$MASAKARI_BIN_DIR/masakari-wsgi
|
||||||
|
MASAKARI_UWSGI_CONF=$MASAKARI_CONF_DIR/masakari-api-uwsgi.ini
|
||||||
|
|
||||||
enable_service masakari masakari-api masakari-engine
|
enable_service masakari masakari-api masakari-engine
|
||||||
|
|
||||||
|
@ -16,22 +16,36 @@
|
|||||||
"""Starter script for Masakari API.
|
"""Starter script for Masakari API.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from oslo_log import log as logging
|
from oslo_log import log as logging
|
||||||
|
from oslo_service import _options as service_opts
|
||||||
|
from paste import deploy
|
||||||
import six
|
import six
|
||||||
|
|
||||||
|
from masakari.common import config
|
||||||
import masakari.conf
|
import masakari.conf
|
||||||
from masakari import config
|
from masakari import config as api_config
|
||||||
from masakari import exception
|
from masakari import exception
|
||||||
from masakari import objects
|
from masakari import objects
|
||||||
|
from masakari import rpc
|
||||||
from masakari import service
|
from masakari import service
|
||||||
|
from masakari import version
|
||||||
|
|
||||||
|
|
||||||
|
CONFIG_FILES = ['api-paste.ini', 'masakari.conf']
|
||||||
CONF = masakari.conf.CONF
|
CONF = masakari.conf.CONF
|
||||||
|
|
||||||
|
|
||||||
|
def _get_config_files(env=None):
|
||||||
|
if env is None:
|
||||||
|
env = os.environ
|
||||||
|
dirname = env.get('OS_MASAKARI_CONFIG_DIR', '/etc/masakari').strip()
|
||||||
|
return [os.path.join(dirname, config_file)
|
||||||
|
for config_file in CONFIG_FILES]
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
config.parse_args(sys.argv)
|
config.parse_args(sys.argv)
|
||||||
logging.setup(CONF, "masakari")
|
logging.setup(CONF, "masakari")
|
||||||
@ -54,3 +68,26 @@ def main():
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
launcher.wait()
|
launcher.wait()
|
||||||
|
|
||||||
|
|
||||||
|
def initialize_application():
|
||||||
|
conf_files = _get_config_files()
|
||||||
|
api_config.parse_args([], default_config_files=conf_files)
|
||||||
|
logging.setup(CONF, "masakari")
|
||||||
|
|
||||||
|
objects.register_all()
|
||||||
|
CONF(sys.argv[1:], project='masakari', version=version.version_string())
|
||||||
|
|
||||||
|
# NOTE: Dump conf at debug (log_options option comes from oslo.service)
|
||||||
|
# This is gross but we don't have a public hook into oslo.service to
|
||||||
|
# register these options, so we are doing it manually for now;
|
||||||
|
# remove this when we have a hook method into oslo.service.
|
||||||
|
CONF.register_opts(service_opts.service_opts)
|
||||||
|
if CONF.log_options:
|
||||||
|
CONF.log_opt_values(logging.getLogger(__name__), logging.DEBUG)
|
||||||
|
|
||||||
|
config.set_middleware_defaults()
|
||||||
|
rpc.init(CONF)
|
||||||
|
conf = conf_files[0]
|
||||||
|
|
||||||
|
return deploy.loadapp('config:%s' % conf, name="masakari_api")
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
upgrade:
|
||||||
|
- |
|
||||||
|
WSGI application script ``masakari-wsgi`` is now available. It allows
|
||||||
|
running the masakari APIs using a WSGI server of choice (for example
|
||||||
|
nginx and uwsgi, apache2 with mod_proxy_uwsgi or gunicorn).
|
||||||
|
The eventlet-based servers are still available, but the WSGI options will
|
||||||
|
allow greater deployment flexibility.
|
@ -38,6 +38,9 @@ console_scripts =
|
|||||||
masakari-engine = masakari.cmd.engine:main
|
masakari-engine = masakari.cmd.engine:main
|
||||||
masakari-manage = masakari.cmd.manage:main
|
masakari-manage = masakari.cmd.manage:main
|
||||||
|
|
||||||
|
wsgi_scripts =
|
||||||
|
masakari-wsgi = masakari.cmd.api:initialize_application
|
||||||
|
|
||||||
masakari.database.migration_backend =
|
masakari.database.migration_backend =
|
||||||
sqlalchemy = oslo_db.sqlalchemy.migration
|
sqlalchemy = oslo_db.sqlalchemy.migration
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user