Run cinder-api with uWSGI
Per the Pike goal, switching the Cinder API control plane to use WSGI in Apache. Co-Authored-By: Ivan Kolodyazhny <e0ne@e0ne.info> Depends-On: Ie8a0eeab1bf31887d6f37cf155b2d161ddfb172d Depends-On: I14b68f36e7fcc5341bbdbcf165274d9d50f7dd04 Change-Id: I8cef6c98f9242cc38d66de0ac499490e2a237887
This commit is contained in:
parent
66109302ab
commit
daf1274409
151
lib/cinder
151
lib/cinder
@ -55,6 +55,8 @@ CINDER_AUTH_CACHE_DIR=${CINDER_AUTH_CACHE_DIR:-/var/cache/cinder}
|
||||
|
||||
CINDER_CONF_DIR=/etc/cinder
|
||||
CINDER_CONF=$CINDER_CONF_DIR/cinder.conf
|
||||
CINDER_UWSGI=$CINDER_BIN_DIR/cinder-wsgi
|
||||
CINDER_UWSGI_CONF=$CINDER_CONF_DIR/cinder-api-uwsgi.ini
|
||||
CINDER_API_PASTE_INI=$CINDER_CONF_DIR/api-paste.ini
|
||||
|
||||
# Public facing bits
|
||||
@ -106,8 +108,9 @@ else
|
||||
CINDER_ISCSI_HELPER=${CINDER_ISCSI_HELPER:-tgtadm}
|
||||
fi
|
||||
|
||||
# Toggle for deploying Cinder under HTTPD + mod_wsgi
|
||||
CINDER_USE_MOD_WSGI=${CINDER_USE_MOD_WSGI:-False}
|
||||
# Toggle for deploying Cinder under a wsgi server. Legacy mod_wsgi
|
||||
# reference should be cleaned up to more accurately refer to uwsgi.
|
||||
CINDER_USE_MOD_WSGI=${CINDER_USE_MOD_WSGI:-True}
|
||||
|
||||
# Source the enabled backends
|
||||
if is_service_enabled c-vol && [[ -n "$CINDER_ENABLED_BACKENDS" ]]; then
|
||||
@ -196,38 +199,8 @@ function cleanup_cinder {
|
||||
done
|
||||
fi
|
||||
|
||||
if [ "$CINDER_USE_MOD_WSGI" == "True" ]; then
|
||||
_cinder_cleanup_apache_wsgi
|
||||
fi
|
||||
}
|
||||
|
||||
# _cinder_config_apache_wsgi() - Set WSGI config files
|
||||
function _cinder_config_apache_wsgi {
|
||||
local cinder_apache_conf
|
||||
cinder_apache_conf=$(apache_site_config_for osapi-volume)
|
||||
local cinder_ssl=""
|
||||
local cinder_certfile=""
|
||||
local cinder_keyfile=""
|
||||
local cinder_api_port=$CINDER_SERVICE_PORT
|
||||
local venv_path=""
|
||||
|
||||
if [[ ${USE_VENV} = True ]]; then
|
||||
venv_path="python-path=${PROJECT_VENV["cinder"]}/lib/python2.7/site-packages"
|
||||
fi
|
||||
|
||||
# copy proxy vhost file
|
||||
sudo cp $FILES/apache-cinder-api.template $cinder_apache_conf
|
||||
sudo sed -e "
|
||||
s|%PUBLICPORT%|$cinder_api_port|g;
|
||||
s|%APACHE_NAME%|$APACHE_NAME|g;
|
||||
s|%APIWORKERS%|$API_WORKERS|g
|
||||
s|%CINDER_BIN_DIR%|$CINDER_BIN_DIR|g;
|
||||
s|%SSLENGINE%|$cinder_ssl|g;
|
||||
s|%SSLCERTFILE%|$cinder_certfile|g;
|
||||
s|%SSLKEYFILE%|$cinder_keyfile|g;
|
||||
s|%USER%|$STACK_USER|g;
|
||||
s|%VIRTUALENV%|$venv_path|g
|
||||
" -i $cinder_apache_conf
|
||||
stop_process "c-api"
|
||||
remove_uwsgi_config "$CINDER_UWSGI_CONF" "$CINDER_UWSGI"
|
||||
}
|
||||
|
||||
# configure_cinder() - Set config files, create data dirs, etc
|
||||
@ -319,9 +292,18 @@ function configure_cinder {
|
||||
fi
|
||||
|
||||
if is_service_enabled tls-proxy; then
|
||||
# Set the service port for a proxy to take the original
|
||||
iniset $CINDER_CONF DEFAULT osapi_volume_listen_port $CINDER_SERVICE_PORT_INT
|
||||
iniset $CINDER_CONF DEFAULT public_endpoint $CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT
|
||||
if [[ "$ENABLED_SERVICES" =~ "c-api" ]]; then
|
||||
# Set the service port for a proxy to take the original
|
||||
if [ "$CINDER_USE_MOD_WSGI" == "True" ]; then
|
||||
iniset $CINDER_CONF DEFAULT osapi_volume_listen_port $CINDER_SERVICE_PORT_INT
|
||||
iniset $CINDER_CONF DEFAULT public_endpoint $CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST
|
||||
iniset $CINDER_CONF DEFAULT osapi_volume_base_URL $CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST
|
||||
else
|
||||
iniset $CINDER_CONF DEFAULT osapi_volume_listen_port $CINDER_SERVICE_PORT_INT
|
||||
iniset $CINDER_CONF DEFAULT public_endpoint $CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT
|
||||
iniset $CINDER_CONF DEFAULT osapi_volume_base_URL $CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$SYSLOG" != "False" ]; then
|
||||
@ -333,9 +315,7 @@ function configure_cinder {
|
||||
# Format logging
|
||||
setup_logging $CINDER_CONF $CINDER_USE_MOD_WSGI
|
||||
|
||||
if [ "$CINDER_USE_MOD_WSGI" == "True" ]; then
|
||||
_cinder_config_apache_wsgi
|
||||
fi
|
||||
write_uwsgi_config "$CINDER_UWSGI_CONF" "$CINDER_UWSGI" "/volume"
|
||||
|
||||
if [[ -r $CINDER_PLUGINS/$CINDER_DRIVER ]]; then
|
||||
configure_cinder_driver
|
||||
@ -374,29 +354,47 @@ function configure_cinder {
|
||||
|
||||
# Migrated from keystone_data.sh
|
||||
function create_cinder_accounts {
|
||||
|
||||
# Cinder
|
||||
if [[ "$ENABLED_SERVICES" =~ "c-api" ]]; then
|
||||
|
||||
create_service_user "cinder"
|
||||
|
||||
get_or_create_service "cinder" "volume" "Cinder Volume Service"
|
||||
get_or_create_endpoint \
|
||||
"volume" \
|
||||
"$REGION_NAME" \
|
||||
"$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/\$(project_id)s"
|
||||
if [ "$CINDER_USE_MOD_WSGI" == "False" ]; then
|
||||
get_or_create_endpoint \
|
||||
"volume" \
|
||||
"$REGION_NAME" \
|
||||
"$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/\$(project_id)s"
|
||||
|
||||
get_or_create_service "cinderv2" "volumev2" "Cinder Volume Service V2"
|
||||
get_or_create_endpoint \
|
||||
"volumev2" \
|
||||
"$REGION_NAME" \
|
||||
"$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v2/\$(project_id)s"
|
||||
get_or_create_service "cinderv2" "volumev2" "Cinder Volume Service V2"
|
||||
get_or_create_endpoint \
|
||||
"volumev2" \
|
||||
"$REGION_NAME" \
|
||||
"$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v2/\$(project_id)s"
|
||||
|
||||
get_or_create_service "cinderv3" "volumev3" "Cinder Volume Service V3"
|
||||
get_or_create_endpoint \
|
||||
"volumev3" \
|
||||
"$REGION_NAME" \
|
||||
"$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v3/\$(project_id)s"
|
||||
get_or_create_service "cinderv3" "volumev3" "Cinder Volume Service V3"
|
||||
get_or_create_endpoint \
|
||||
"volumev3" \
|
||||
"$REGION_NAME" \
|
||||
"$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v3/\$(project_id)s"
|
||||
else
|
||||
get_or_create_endpoint \
|
||||
"volume" \
|
||||
"$REGION_NAME" \
|
||||
"$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST/volume/v1/\$(project_id)s"
|
||||
|
||||
get_or_create_service "cinderv2" "volumev2" "Cinder Volume Service V2"
|
||||
get_or_create_endpoint \
|
||||
"volumev2" \
|
||||
"$REGION_NAME" \
|
||||
"$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST/volume/v2/\$(project_id)s"
|
||||
|
||||
get_or_create_service "cinderv3" "volumev3" "Cinder Volume Service V3"
|
||||
get_or_create_endpoint \
|
||||
"volumev3" \
|
||||
"$REGION_NAME" \
|
||||
"$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST/volume/v3/\$(project_id)s"
|
||||
fi
|
||||
|
||||
configure_cinder_internal_tenant
|
||||
fi
|
||||
@ -449,10 +447,6 @@ function install_cinder {
|
||||
elif [[ "$CINDER_ISCI_HELPER" == "lioadm" ]]; then
|
||||
install_package targetcli
|
||||
fi
|
||||
|
||||
if [ "$CINDER_USE_MOD_WSGI" == "True" ]; then
|
||||
install_apache_wsgi
|
||||
fi
|
||||
}
|
||||
|
||||
# install_cinderclient() - Collect source and prepare
|
||||
@ -483,7 +477,8 @@ function _configure_tgt_for_config_d {
|
||||
function start_cinder {
|
||||
local service_port=$CINDER_SERVICE_PORT
|
||||
local service_protocol=$CINDER_SERVICE_PROTOCOL
|
||||
if is_service_enabled tls-proxy; then
|
||||
local cinder_url
|
||||
if is_service_enabled tls-proxy && ["$CINDER_USE_MOD_WSGI" == "False"]; then
|
||||
service_port=$CINDER_SERVICE_PORT_INT
|
||||
service_protocol="http"
|
||||
fi
|
||||
@ -507,24 +502,23 @@ function start_cinder {
|
||||
fi
|
||||
fi
|
||||
|
||||
if is_service_enabled c-api ; then
|
||||
if [ "$CINDER_USE_MOD_WSGI" == "True" ]; then
|
||||
enable_apache_site osapi-volume
|
||||
restart_apache_server
|
||||
tail_log c-api /var/log/$APACHE_NAME/c-api.log
|
||||
else
|
||||
if [[ "$ENABLED_SERVICES" =~ "c-api" ]]; then
|
||||
if [ "$CINDER_USE_MOD_WSGI" == "False" ]; then
|
||||
run_process c-api "$CINDER_BIN_DIR/cinder-api --config-file $CINDER_CONF"
|
||||
cinder_url=$service_protocol://$SERVICE_HOST:$service_port
|
||||
# Start proxy if tsl enabled
|
||||
if is_service_enabled tls_proxy; then
|
||||
start_tls_proxy cinder '*' $CINDER_SERVICE_PORT $CINDER_SERVICE_HOST $CINDER_SERVICE_POR_INT
|
||||
fi
|
||||
else
|
||||
run_process "c-api" "$CINDER_BIN_DIR/uwsgi --ini $CINDER_UWSGI_CONF"
|
||||
cinder_url=$service_protocol://$SERVICE_HOST/volume/v3
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Waiting for Cinder API to start..."
|
||||
if ! wait_for_service $SERVICE_TIMEOUT $service_protocol://$CINDER_SERVICE_HOST:$service_port; then
|
||||
die $LINENO "c-api did not start"
|
||||
fi
|
||||
|
||||
# Start proxies if enabled
|
||||
if is_service_enabled tls-proxy; then
|
||||
start_tls_proxy cinder '*' $CINDER_SERVICE_PORT $CINDER_SERVICE_HOST $CINDER_SERVICE_PORT_INT
|
||||
fi
|
||||
echo "Waiting for Cinder API to start..."
|
||||
if ! wait_for_service $SERVICE_TIMEOUT $cinder_url; then
|
||||
die $LINENO "c-api did not start"
|
||||
fi
|
||||
|
||||
run_process c-sch "$CINDER_BIN_DIR/cinder-scheduler --config-file $CINDER_CONF"
|
||||
@ -538,12 +532,7 @@ function start_cinder {
|
||||
|
||||
# stop_cinder() - Stop running processes
|
||||
function stop_cinder {
|
||||
if [ "$CINDER_USE_MOD_WSGI" == "True" ]; then
|
||||
disable_apache_site osapi-volume
|
||||
restart_apache_server
|
||||
else
|
||||
stop_process c-api
|
||||
fi
|
||||
stop_process c-api
|
||||
|
||||
# Kill the cinder screen windows
|
||||
local serv
|
||||
|
Loading…
Reference in New Issue
Block a user