From e0ab1808cd1ade97d37fd55b414e1b98f21afae3 Mon Sep 17 00:00:00 2001 From: Eli Qiao Date: Tue, 28 Feb 2017 10:26:28 +0800 Subject: [PATCH] devstack: enable wsgi on devstack Added new config which is used in devstack zun lib, ``ZUN_USE_MOD_WSGI``, default value is False. Added ZUN_USE_MOD_WSGI=True in Setting file of zun gate. Implements: blueprint deploy-zun-api-in-wsgi Change-Id: I99fe6bf762942d306b305619199575a060ba82f5 --- devstack/lib/zun | 60 ++++++++++++++++++++- devstack/settings | 2 + etc/apache2/{zun.conf => zun.conf.template} | 6 +-- 3 files changed, 64 insertions(+), 4 deletions(-) rename etc/apache2/{zun.conf => zun.conf.template} (90%) diff --git a/devstack/lib/zun b/devstack/lib/zun index 8eb0b7418..217d83c88 100644 --- a/devstack/lib/zun +++ b/devstack/lib/zun @@ -49,6 +49,16 @@ if is_ssl_enabled_service "zun" || is_service_enabled tls-proxy; then ZUN_SERVICE_PROTOCOL="https" fi +if is_suse; then + ZUN_WSGI_DIR=${ZUN_WSGI_DIR:-/srv/www/htdocs/zun} +else + ZUN_WSGI_DIR=${ZUN_WSGI_DIR:-/var/www/zun} +fi + +# Toggle for deploying ZUN-API under HTTPD + mod_wsgi +ZUN_USE_MOD_WSGI=${ZUN_USE_MOD_WSGI:-False} + + # Public facing bits ZUN_SERVICE_HOST=${ZUN_SERVICE_HOST:-$HOST_IP} ZUN_SERVICE_PORT=${ZUN_SERVICE_PORT:-9517} @@ -77,6 +87,33 @@ fi # Functions # --------- +# _cleanup_zun_apache_wsgi() - Remove wsgi files, disable and remove apache vhost file +function _cleanup_zun_apache_wsgi { + sudo rm -f $ZUN_WSGI_DIR/* + sudo rm -f $(apache_site_config_for zun) +} + +# _config_zun_apache_wsgi() - Set WSGI config files of zun +function _config_zun_apache_wsgi { + + sudo mkdir -p $ZUN_WSGI_DIR + + local zun_apache_conf + zun_apache_conf=$(apache_site_config_for zun) + + # copy proxy vhost and wsgi helper files + sudo cp $ZUN_DIR/zun/api/app.wsgi $ZUN_WSGI_DIR/zun + + sudo cp $ZUN_DIR/etc/apache2/zun.conf.template $zun_apache_conf + + sudo sed -e " + s|%PUBLICPORT%|$ZUN_SERVICE_PORT|g; + s|%USER%|$STACK_USER|g; + s|%PUBLICWSGI%|$ZUN_WSGI_DIR/zun|g; + s|%APACHE_NAME%|$APACHE_NAME|g + " -i $zun_apache_conf +} + function check_docker { if is_ubuntu; then dpkg -s docker-engine > /dev/null 2>&1 @@ -141,6 +178,10 @@ function cleanup_zun { if [ ! "$containers" = "" ]; then sudo docker rm -f $containers || true fi + + if [ "$ZUN_USE_MOD_WSGI" == "True" ]; then + _cleanup_zun_apache_wsgi + fi } # configure_zun() - Set config files, create data dirs, etc @@ -156,6 +197,10 @@ function configure_zun { create_zun_conf create_api_paste_conf + + if [ "$ZUN_USE_MOD_WSGI" == "True" ]; then + _config_zun_apache_wsgi + fi } # upload_sandbox_image() - Upload sandbox image to glance @@ -318,6 +363,10 @@ function install_zunclient { function install_zun { git_clone $ZUN_REPO $ZUN_DIR $ZUN_BRANCH setup_develop $ZUN_DIR + + if [ "$ZUN_USE_MOD_WSGI" == "True" ]; then + install_apache_wsgi + fi } function install_etcd_server { @@ -349,7 +398,16 @@ function start_zun_api { service_protocol="http" fi - run_process zun-api "$ZUN_BIN_DIR/zun-api" + local enabled_site_file + enabled_site_file=$(apache_site_config_for zun) + if [ -f ${enabled_site_file} ] && [ "$ZUN_USE_MOD_WSGI" == "True" ]; then + enable_apache_site zun + restart_apache_server + tail_log zun-api /var/log/$APACHE_NAME/zun_access.log + else + run_process zun-api "$ZUN_BIN_DIR/zun-api" + fi + echo "Waiting for zun-api to start..." if ! wait_for_service $SERVICE_TIMEOUT $service_protocol://$ZUN_SERVICE_HOST:$service_port; then die $LINENO "zun-api did not start" diff --git a/devstack/settings b/devstack/settings index d1231be24..92b8eb940 100644 --- a/devstack/settings +++ b/devstack/settings @@ -18,6 +18,8 @@ # Enable Zun services enable_service zun-api enable_service zun-compute + +ZUN_USE_MOD_WSGI=True if [[ ${ZUN_DB_TYPE} == "etcd" ]]; then enable_service zun-etcd fi diff --git a/etc/apache2/zun.conf b/etc/apache2/zun.conf.template similarity index 90% rename from etc/apache2/zun.conf rename to etc/apache2/zun.conf.template index 123a98ef9..49a900a1a 100644 --- a/etc/apache2/zun.conf +++ b/etc/apache2/zun.conf.template @@ -20,10 +20,10 @@ # The number of processes and threads is an example only and should # be adjusted according to local requirements. -Listen 9517 +Listen %PUBLICPORT% - - WSGIDaemonProcess zun-api user=%USER% group=%GROUP% processes=5 threads=1 display-name=%{GROUP} + + WSGIDaemonProcess zun-api user=%USER% processes=5 threads=1 display-name=%{GROUP} WSGIScriptAlias / %PUBLICWSGI% WSGIProcessGroup zun-api