diff --git a/devstack/files/apache-designate-api.template b/devstack/files/apache-designate-api.template
new file mode 100644
index 000000000..770c837ee
--- /dev/null
+++ b/devstack/files/apache-designate-api.template
@@ -0,0 +1,27 @@
+
+ Require all granted
+
+
+
+ WSGIDaemonProcess designate-api processes=%APIWORKERS% threads=1 user=%USER% display-name=%{GROUP} %VIRTUALENV%
+ WSGIProcessGroup designate-api
+ WSGIScriptAlias / %DESIGNATE_BIN_DIR%/designate-api-wsgi
+ WSGIApplicationGroup %{GLOBAL}
+ WSGIPassAuthorization On
+ = 2.4>
+ ErrorLogFormat "%M"
+
+ ErrorLog /var/log/%APACHE_NAME%/designate-api.log
+ %SSLENGINE%
+ %SSLCERTFILE%
+ %SSLKEYFILE%
+
+
+Alias /dns %DESIGNATE_BIN_DIR%/designate-api-wsgi
+
+ SetHandler wsgi-script
+ Options +ExecCGI
+ WSGIProcessGroup designate-api
+ WSGIApplicationGroup %{GLOBAL}
+ WSGIPassAuthorization On
+
\ No newline at end of file
diff --git a/devstack/plugin.sh b/devstack/plugin.sh
index 5f8571a63..d6f9c85ce 100755
--- a/devstack/plugin.sh
+++ b/devstack/plugin.sh
@@ -18,6 +18,8 @@ fi
# runs that a clean run would need to clean up
function cleanup_designate {
sudo rm -rf $DESIGNATE_STATE_PATH
+ sudo rm -f $(apache_site_config_for designate-api)
+ remove_uwsgi_config "$DESIGNATE_UWSGI_CONF" "$DESIGNATE_UWSGI"
cleanup_designate_backend
}
@@ -62,7 +64,6 @@ function configure_designate {
iniset $DESIGNATE_CONF service:api enable_host_header True
iniset $DESIGNATE_CONF service:api enable_api_v2 $DESIGNATE_ENABLE_API_V2
iniset $DESIGNATE_CONF service:api enable_api_admin $DESIGNATE_ENABLE_API_ADMIN
- iniset $DESIGNATE_CONF service:api workers $API_WORKERS
# Central Configuration
iniset $DESIGNATE_CONF service:central workers $API_WORKERS
@@ -101,13 +102,8 @@ function configure_designate {
sudo chown root:root $tempfile
sudo mv $tempfile /etc/sudoers.d/designate-rootwrap
- # TLS Proxy Configuration
if is_service_enabled tls-proxy; then
- # Set the service port for a proxy to take the original
- iniset $DESIGNATE_CONF service:api listen ${DESIGNATE_SERVICE_HOST}:${DESIGNATE_SERVICE_PORT_INT}
iniset $DESIGNATE_CONF keystone cafile $SSL_BUNDLE_FILE
- else
- iniset $DESIGNATE_CONF service:api listen ${DESIGNATE_SERVICE_HOST}:${DESIGNATE_SERVICE_PORT}
fi
# Setup the Keystone Integration
@@ -130,6 +126,37 @@ function configure_designate {
# Backend Plugin Configuation
configure_designate_backend
+
+ if [[ "$DESIGNATE_WSGI_MODE" == "uwsgi" ]]; then
+ write_uwsgi_config "$DESIGNATE_UWSGI_CONF" "$DESIGNATE_UWSGI" "/dns"
+ else
+ _config_designate_apache_wsgi
+ fi
+}
+
+function _config_designate_apache_wsgi {
+ local designate_api_apache_conf
+ local venv_path=""
+ local designate_bin_dir=""
+ designate_bin_dir=$(get_python_exec_prefix)
+ designate_api_apache_conf=$(apache_site_config_for designate-api)
+
+ if [[ ${USE_VENV} = True ]]; then
+ venv_path="python-path=${PROJECT_VENV["designate"]}/lib/$(python_version)/site-packages"
+ designate_bin_dir=${PROJECT_VENV["designate"]}/bin
+ fi
+
+ sudo cp $DESIGNATE_DIR/devstack/files/apache-designate-api.template $designate_api_apache_conf
+ sudo sed -e "
+ s|%APACHE_NAME%|$APACHE_NAME|g;
+ s|%DESIGNATE_BIN_DIR%|$designate_bin_dir|g;
+ s|%SSLENGINE%|$designate_ssl|g;
+ s|%SSLCERTFILE%|$designate_certfile|g;
+ s|%SSLKEYFILE%|$designate_keyfile|g;
+ s|%USER%|$STACK_USER|g;
+ s|%VIRTUALENV%|$venv_path|g;
+ s|%APIWORKERS%|$API_WORKERS|g;
+ " -i $designate_api_apache_conf
}
function configure_designatedashboard {
@@ -188,10 +215,13 @@ function create_designate_accounts {
if is_service_enabled designate-api; then
create_service_user "designate"
+ local designate_api_url="$DESIGNATE_SERVICE_PROTOCOL://$DESIGNATE_SERVICE_HOST/dns"
+
get_or_create_service "designate" "dns" "Designate DNS Service"
- get_or_create_endpoint "dns" \
+ get_or_create_endpoint \
+ "dns" \
"$REGION_NAME" \
- "$DESIGNATE_SERVICE_PROTOCOL://$DESIGNATE_SERVICE_HOST:$DESIGNATE_SERVICE_PORT/"
+ "$designate_api_url"
fi
}
@@ -223,6 +253,13 @@ function init_designate {
# install_designate - Collect source and prepare
function install_designate {
+ if [[ "$DESIGNATE_WSGI_MODE" == "uwsgi" ]]; then
+ install_apache_uwsgi
+ else
+ install_apache_wsgi
+ fi
+
+
if is_ubuntu; then
install_package libcap2-bin
elif is_fedora; then
@@ -269,7 +306,6 @@ function start_designate {
start_designate_backend
run_process designate-central "$DESIGNATE_BIN_DIR/designate-central --config-file $DESIGNATE_CONF"
- run_process designate-api "$DESIGNATE_BIN_DIR/designate-api --config-file $DESIGNATE_CONF"
run_process designate-mdns "$DESIGNATE_BIN_DIR/designate-mdns --config-file $DESIGNATE_CONF"
run_process designate-agent "$DESIGNATE_BIN_DIR/designate-agent --config-file $DESIGNATE_CONF"
run_process designate-sink "$DESIGNATE_BIN_DIR/designate-sink --config-file $DESIGNATE_CONF"
@@ -277,20 +313,32 @@ function start_designate {
run_process designate-worker "$DESIGNATE_BIN_DIR/designate-worker --config-file $DESIGNATE_CONF"
run_process designate-producer "$DESIGNATE_BIN_DIR/designate-producer --config-file $DESIGNATE_CONF"
- # Start proxies if enabled
- if is_service_enabled designate-api && is_service_enabled tls-proxy; then
- start_tls_proxy designate-api '*' $DESIGNATE_SERVICE_PORT $DESIGNATE_SERVICE_HOST $DESIGNATE_SERVICE_PORT_INT &
+
+
+ if [[ "$DESIGNATE_WSGI_MODE" == "uwsgi" ]]; then
+ run_process "designate-api" "$DESIGNATE_BIN_DIR/uwsgi --procname-prefix designate-api --ini $DESIGNATE_UWSGI_CONF"
+ else
+ enable_apache_site designate-api
+ restart_apache_server
+ tail_log designate-api /var/log/$APACHE_NAME/designate-api.log
fi
- if ! timeout $SERVICE_TIMEOUT sh -c "while ! wget --no-proxy -q -O- $DESIGNATE_SERVICE_PROTOCOL://$DESIGNATE_SERVICE_HOST:$DESIGNATE_SERVICE_PORT; do sleep 1; done"; then
- die $LINENO "Designate did not start"
+ echo "Waiting for designate-api to start..."
+ if ! wait_for_service $SERVICE_TIMEOUT $DESIGNATE_SERVICE_PROTOCOL://$DESIGNATE_SERVICE_HOST/dns; then
+ die $LINENO "designate-api did not start"
fi
}
# stop_designate - Stop running processes
function stop_designate {
+ if [[ "$DESIGNATE_WSGI_MODE" == "uwsgi" ]]; then
+ stop_process "designate-api"
+ else
+ disable_apache_site designate-api
+ restart_apache_server
+ fi
+
stop_process designate-central
- stop_process designate-api
stop_process designate-mdns
stop_process designate-agent
stop_process designate-sink
diff --git a/devstack/settings b/devstack/settings
index 26eb13025..2e5c4e810 100644
--- a/devstack/settings
+++ b/devstack/settings
@@ -7,9 +7,10 @@ DESIGNATE_NOTIFICATION_DRIVER=${DESIGNATE_NOTIFICATION_DRIVER:-messagingv2}
DESIGNATE_NOTIFICATION_TOPICS=${DESIGNATE_NOTIFICATION_TOPICS:-notifications}
DESIGNATE_PERIODIC_RECOVERY_INTERVAL=${DESIGNATE_PERIODIC_RECOVERY_INTERVAL:-120}
DESIGNATE_PERIODIC_SYNC_INTERVAL=${DESIGNATE_PERIODIC_SYNC_INTERVAL:-1800}
-DESIGNATE_COORDINATION_URL=${DESIGNATE_COORDINATION_URL:-}
+DESIGNATE_COORDINATION_URL=${DESIGNATE_COORDINATION_URL:-"memcached://localhost:11211"}
DESIGNATE_POLL_INTERVAL=${DESIGNATE_POLL_INTERVAL:-5}
DESIGNATE_POLL_RETRIES=${DESIGNATE_POLL_RETRIES:-6}
+DESIGNATE_WSGI_MODE=${DESIGNATE_WSGI_MODE:-"mod_wsgi"}
# Quota Options
DESIGNATE_QUOTA_ZONES=${DESIGNATE_QUOTA_ZONES:-10}
@@ -32,8 +33,6 @@ fi
# Default IP/port settings
DESIGNATE_SERVICE_PROTOCOL=${DESIGNATE_SERVICE_PROTOCOL:-$SERVICE_PROTOCOL}
DESIGNATE_SERVICE_HOST=${DESIGNATE_SERVICE_HOST:-$SERVICE_HOST}
-DESIGNATE_SERVICE_PORT=${DESIGNATE_SERVICE_PORT:-9001}
-DESIGNATE_SERVICE_PORT_INT=${DESIGNATE_SERVICE_PORT_INT:-19001}
DESIGNATE_SERVICE_PORT_DNS=${DESIGNATE_SERVICE_PORT_DNS:-53}
DESIGNATE_SERVICE_PORT_MDNS=${DESIGNATE_SERVICE_PORT_MDNS:-5354}
DESIGNATE_SERVICE_PORT_AGENT=${DESIGNATE_SERVICE_PORT_AGENT:-5358}
@@ -57,6 +56,9 @@ DESIGNATE_ROOTWRAP_CONF=$DESIGNATE_CONF_DIR/rootwrap.conf
DESIGNATE_APIPASTE_CONF=$DESIGNATE_CONF_DIR/api-paste.ini
DESIGNATE_PLUGINS=$DESIGNATE_DIR/devstack/designate_plugins
+DESIGNATE_UWSGI=$DESIGNATE_BIN_DIR/designate-api-wsgi
+DESIGNATE_UWSGI_CONF=$DESIGNATE_CONF_DIR/designate-api-uwsgi.ini
+
# Default repositories
DESIGNATE_REPO=${DESIGNATE_REPO:-${GIT_BASE}/openstack/designate.git}
DESIGNATE_BRANCH=${DESIGNATE_BRANCH:-master}
diff --git a/lower-constraints.txt b/lower-constraints.txt
index 4cacf0ef0..5952f01cb 100644
--- a/lower-constraints.txt
+++ b/lower-constraints.txt
@@ -111,6 +111,7 @@ pycparser==2.18
pyflakes==0.8.1
Pygments==2.2.0
pyinotify==0.9.6
+pymemcache==1.2.9
PyNaCl==1.2.1
pyparsing==2.2.0
pyperclip==1.6.0
diff --git a/test-requirements.txt b/test-requirements.txt
index da11a6a61..40ba58c7e 100644
--- a/test-requirements.txt
+++ b/test-requirements.txt
@@ -19,3 +19,4 @@ bandit>=1.1.0 # Apache-2.0
zake>=0.1.6 # Apache-2.0
doc8>=0.6.0 # Apache-2.0
Pygments>=2.2.0 # BSD license
+pymemcache!=1.3.0,>=1.2.9 # Apache 2.0 License