diff --git a/lib/cinder b/lib/cinder index b585416f7a..4274be740a 100644 --- a/lib/cinder +++ b/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