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
| ... | ... |
@@ -55,6 +55,8 @@ CINDER_AUTH_CACHE_DIR=${CINDER_AUTH_CACHE_DIR:-/var/cache/cinder}
|
| 55 | 55 |
|
| 56 | 56 |
CINDER_CONF_DIR=/etc/cinder |
| 57 | 57 |
CINDER_CONF=$CINDER_CONF_DIR/cinder.conf |
| 58 |
+CINDER_UWSGI=$CINDER_BIN_DIR/cinder-wsgi |
|
| 59 |
+CINDER_UWSGI_CONF=$CINDER_CONF_DIR/cinder-api-uwsgi.ini |
|
| 58 | 60 |
CINDER_API_PASTE_INI=$CINDER_CONF_DIR/api-paste.ini |
| 59 | 61 |
|
| 60 | 62 |
# Public facing bits |
| ... | ... |
@@ -106,8 +108,9 @@ else |
| 106 | 106 |
CINDER_ISCSI_HELPER=${CINDER_ISCSI_HELPER:-tgtadm}
|
| 107 | 107 |
fi |
| 108 | 108 |
|
| 109 |
-# Toggle for deploying Cinder under HTTPD + mod_wsgi |
|
| 110 |
-CINDER_USE_MOD_WSGI=${CINDER_USE_MOD_WSGI:-False}
|
|
| 109 |
+# Toggle for deploying Cinder under a wsgi server. Legacy mod_wsgi |
|
| 110 |
+# reference should be cleaned up to more accurately refer to uwsgi. |
|
| 111 |
+CINDER_USE_MOD_WSGI=${CINDER_USE_MOD_WSGI:-True}
|
|
| 111 | 112 |
|
| 112 | 113 |
# Source the enabled backends |
| 113 | 114 |
if is_service_enabled c-vol && [[ -n "$CINDER_ENABLED_BACKENDS" ]]; then |
| ... | ... |
@@ -196,38 +199,8 @@ function cleanup_cinder {
|
| 196 | 196 |
done |
| 197 | 197 |
fi |
| 198 | 198 |
|
| 199 |
- if [ "$CINDER_USE_MOD_WSGI" == "True" ]; then |
|
| 200 |
- _cinder_cleanup_apache_wsgi |
|
| 201 |
- fi |
|
| 202 |
-} |
|
| 203 |
- |
|
| 204 |
-# _cinder_config_apache_wsgi() - Set WSGI config files |
|
| 205 |
-function _cinder_config_apache_wsgi {
|
|
| 206 |
- local cinder_apache_conf |
|
| 207 |
- cinder_apache_conf=$(apache_site_config_for osapi-volume) |
|
| 208 |
- local cinder_ssl="" |
|
| 209 |
- local cinder_certfile="" |
|
| 210 |
- local cinder_keyfile="" |
|
| 211 |
- local cinder_api_port=$CINDER_SERVICE_PORT |
|
| 212 |
- local venv_path="" |
|
| 213 |
- |
|
| 214 |
- if [[ ${USE_VENV} = True ]]; then
|
|
| 215 |
- venv_path="python-path=${PROJECT_VENV["cinder"]}/lib/python2.7/site-packages"
|
|
| 216 |
- fi |
|
| 217 |
- |
|
| 218 |
- # copy proxy vhost file |
|
| 219 |
- sudo cp $FILES/apache-cinder-api.template $cinder_apache_conf |
|
| 220 |
- sudo sed -e " |
|
| 221 |
- s|%PUBLICPORT%|$cinder_api_port|g; |
|
| 222 |
- s|%APACHE_NAME%|$APACHE_NAME|g; |
|
| 223 |
- s|%APIWORKERS%|$API_WORKERS|g |
|
| 224 |
- s|%CINDER_BIN_DIR%|$CINDER_BIN_DIR|g; |
|
| 225 |
- s|%SSLENGINE%|$cinder_ssl|g; |
|
| 226 |
- s|%SSLCERTFILE%|$cinder_certfile|g; |
|
| 227 |
- s|%SSLKEYFILE%|$cinder_keyfile|g; |
|
| 228 |
- s|%USER%|$STACK_USER|g; |
|
| 229 |
- s|%VIRTUALENV%|$venv_path|g |
|
| 230 |
- " -i $cinder_apache_conf |
|
| 199 |
+ stop_process "c-api" |
|
| 200 |
+ remove_uwsgi_config "$CINDER_UWSGI_CONF" "$CINDER_UWSGI" |
|
| 231 | 201 |
} |
| 232 | 202 |
|
| 233 | 203 |
# configure_cinder() - Set config files, create data dirs, etc |
| ... | ... |
@@ -319,9 +292,18 @@ function configure_cinder {
|
| 319 | 319 |
fi |
| 320 | 320 |
|
| 321 | 321 |
if is_service_enabled tls-proxy; then |
| 322 |
- # Set the service port for a proxy to take the original |
|
| 323 |
- iniset $CINDER_CONF DEFAULT osapi_volume_listen_port $CINDER_SERVICE_PORT_INT |
|
| 324 |
- iniset $CINDER_CONF DEFAULT public_endpoint $CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT |
|
| 322 |
+ if [[ "$ENABLED_SERVICES" =~ "c-api" ]]; then |
|
| 323 |
+ # Set the service port for a proxy to take the original |
|
| 324 |
+ if [ "$CINDER_USE_MOD_WSGI" == "True" ]; then |
|
| 325 |
+ iniset $CINDER_CONF DEFAULT osapi_volume_listen_port $CINDER_SERVICE_PORT_INT |
|
| 326 |
+ iniset $CINDER_CONF DEFAULT public_endpoint $CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST |
|
| 327 |
+ iniset $CINDER_CONF DEFAULT osapi_volume_base_URL $CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST |
|
| 328 |
+ else |
|
| 329 |
+ iniset $CINDER_CONF DEFAULT osapi_volume_listen_port $CINDER_SERVICE_PORT_INT |
|
| 330 |
+ iniset $CINDER_CONF DEFAULT public_endpoint $CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT |
|
| 331 |
+ iniset $CINDER_CONF DEFAULT osapi_volume_base_URL $CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT |
|
| 332 |
+ fi |
|
| 333 |
+ fi |
|
| 325 | 334 |
fi |
| 326 | 335 |
|
| 327 | 336 |
if [ "$SYSLOG" != "False" ]; then |
| ... | ... |
@@ -333,9 +315,7 @@ function configure_cinder {
|
| 333 | 333 |
# Format logging |
| 334 | 334 |
setup_logging $CINDER_CONF $CINDER_USE_MOD_WSGI |
| 335 | 335 |
|
| 336 |
- if [ "$CINDER_USE_MOD_WSGI" == "True" ]; then |
|
| 337 |
- _cinder_config_apache_wsgi |
|
| 338 |
- fi |
|
| 336 |
+ write_uwsgi_config "$CINDER_UWSGI_CONF" "$CINDER_UWSGI" "/volume" |
|
| 339 | 337 |
|
| 340 | 338 |
if [[ -r $CINDER_PLUGINS/$CINDER_DRIVER ]]; then |
| 341 | 339 |
configure_cinder_driver |
| ... | ... |
@@ -374,29 +354,47 @@ function configure_cinder {
|
| 374 | 374 |
|
| 375 | 375 |
# Migrated from keystone_data.sh |
| 376 | 376 |
function create_cinder_accounts {
|
| 377 |
- |
|
| 378 | 377 |
# Cinder |
| 379 | 378 |
if [[ "$ENABLED_SERVICES" =~ "c-api" ]]; then |
| 380 | 379 |
|
| 381 | 380 |
create_service_user "cinder" |
| 382 | 381 |
|
| 383 | 382 |
get_or_create_service "cinder" "volume" "Cinder Volume Service" |
| 384 |
- get_or_create_endpoint \ |
|
| 385 |
- "volume" \ |
|
| 386 |
- "$REGION_NAME" \ |
|
| 387 |
- "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/\$(project_id)s" |
|
| 388 |
- |
|
| 389 |
- get_or_create_service "cinderv2" "volumev2" "Cinder Volume Service V2" |
|
| 390 |
- get_or_create_endpoint \ |
|
| 391 |
- "volumev2" \ |
|
| 392 |
- "$REGION_NAME" \ |
|
| 393 |
- "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v2/\$(project_id)s" |
|
| 394 |
- |
|
| 395 |
- get_or_create_service "cinderv3" "volumev3" "Cinder Volume Service V3" |
|
| 396 |
- get_or_create_endpoint \ |
|
| 397 |
- "volumev3" \ |
|
| 398 |
- "$REGION_NAME" \ |
|
| 399 |
- "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v3/\$(project_id)s" |
|
| 383 |
+ if [ "$CINDER_USE_MOD_WSGI" == "False" ]; then |
|
| 384 |
+ get_or_create_endpoint \ |
|
| 385 |
+ "volume" \ |
|
| 386 |
+ "$REGION_NAME" \ |
|
| 387 |
+ "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v1/\$(project_id)s" |
|
| 388 |
+ |
|
| 389 |
+ get_or_create_service "cinderv2" "volumev2" "Cinder Volume Service V2" |
|
| 390 |
+ get_or_create_endpoint \ |
|
| 391 |
+ "volumev2" \ |
|
| 392 |
+ "$REGION_NAME" \ |
|
| 393 |
+ "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v2/\$(project_id)s" |
|
| 394 |
+ |
|
| 395 |
+ get_or_create_service "cinderv3" "volumev3" "Cinder Volume Service V3" |
|
| 396 |
+ get_or_create_endpoint \ |
|
| 397 |
+ "volumev3" \ |
|
| 398 |
+ "$REGION_NAME" \ |
|
| 399 |
+ "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/v3/\$(project_id)s" |
|
| 400 |
+ else |
|
| 401 |
+ get_or_create_endpoint \ |
|
| 402 |
+ "volume" \ |
|
| 403 |
+ "$REGION_NAME" \ |
|
| 404 |
+ "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST/volume/v1/\$(project_id)s" |
|
| 405 |
+ |
|
| 406 |
+ get_or_create_service "cinderv2" "volumev2" "Cinder Volume Service V2" |
|
| 407 |
+ get_or_create_endpoint \ |
|
| 408 |
+ "volumev2" \ |
|
| 409 |
+ "$REGION_NAME" \ |
|
| 410 |
+ "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST/volume/v2/\$(project_id)s" |
|
| 411 |
+ |
|
| 412 |
+ get_or_create_service "cinderv3" "volumev3" "Cinder Volume Service V3" |
|
| 413 |
+ get_or_create_endpoint \ |
|
| 414 |
+ "volumev3" \ |
|
| 415 |
+ "$REGION_NAME" \ |
|
| 416 |
+ "$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST/volume/v3/\$(project_id)s" |
|
| 417 |
+ fi |
|
| 400 | 418 |
|
| 401 | 419 |
configure_cinder_internal_tenant |
| 402 | 420 |
fi |
| ... | ... |
@@ -449,10 +447,6 @@ function install_cinder {
|
| 449 | 449 |
elif [[ "$CINDER_ISCI_HELPER" == "lioadm" ]]; then |
| 450 | 450 |
install_package targetcli |
| 451 | 451 |
fi |
| 452 |
- |
|
| 453 |
- if [ "$CINDER_USE_MOD_WSGI" == "True" ]; then |
|
| 454 |
- install_apache_wsgi |
|
| 455 |
- fi |
|
| 456 | 452 |
} |
| 457 | 453 |
|
| 458 | 454 |
# install_cinderclient() - Collect source and prepare |
| ... | ... |
@@ -483,7 +477,8 @@ function _configure_tgt_for_config_d {
|
| 483 | 483 |
function start_cinder {
|
| 484 | 484 |
local service_port=$CINDER_SERVICE_PORT |
| 485 | 485 |
local service_protocol=$CINDER_SERVICE_PROTOCOL |
| 486 |
- if is_service_enabled tls-proxy; then |
|
| 486 |
+ local cinder_url |
|
| 487 |
+ if is_service_enabled tls-proxy && ["$CINDER_USE_MOD_WSGI" == "False"]; then |
|
| 487 | 488 |
service_port=$CINDER_SERVICE_PORT_INT |
| 488 | 489 |
service_protocol="http" |
| 489 | 490 |
fi |
| ... | ... |
@@ -507,24 +502,23 @@ function start_cinder {
|
| 507 | 507 |
fi |
| 508 | 508 |
fi |
| 509 | 509 |
|
| 510 |
- if is_service_enabled c-api ; then |
|
| 511 |
- if [ "$CINDER_USE_MOD_WSGI" == "True" ]; then |
|
| 512 |
- enable_apache_site osapi-volume |
|
| 513 |
- restart_apache_server |
|
| 514 |
- tail_log c-api /var/log/$APACHE_NAME/c-api.log |
|
| 515 |
- else |
|
| 510 |
+ if [[ "$ENABLED_SERVICES" =~ "c-api" ]]; then |
|
| 511 |
+ if [ "$CINDER_USE_MOD_WSGI" == "False" ]; then |
|
| 516 | 512 |
run_process c-api "$CINDER_BIN_DIR/cinder-api --config-file $CINDER_CONF" |
| 513 |
+ cinder_url=$service_protocol://$SERVICE_HOST:$service_port |
|
| 514 |
+ # Start proxy if tsl enabled |
|
| 515 |
+ if is_service_enabled tls_proxy; then |
|
| 516 |
+ start_tls_proxy cinder '*' $CINDER_SERVICE_PORT $CINDER_SERVICE_HOST $CINDER_SERVICE_POR_INT |
|
| 517 |
+ fi |
|
| 518 |
+ else |
|
| 519 |
+ run_process "c-api" "$CINDER_BIN_DIR/uwsgi --ini $CINDER_UWSGI_CONF" |
|
| 520 |
+ cinder_url=$service_protocol://$SERVICE_HOST/volume/v3 |
|
| 517 | 521 |
fi |
| 522 |
+ fi |
|
| 518 | 523 |
|
| 519 |
- echo "Waiting for Cinder API to start..." |
|
| 520 |
- if ! wait_for_service $SERVICE_TIMEOUT $service_protocol://$CINDER_SERVICE_HOST:$service_port; then |
|
| 521 |
- die $LINENO "c-api did not start" |
|
| 522 |
- fi |
|
| 523 |
- |
|
| 524 |
- # Start proxies if enabled |
|
| 525 |
- if is_service_enabled tls-proxy; then |
|
| 526 |
- start_tls_proxy cinder '*' $CINDER_SERVICE_PORT $CINDER_SERVICE_HOST $CINDER_SERVICE_PORT_INT |
|
| 527 |
- fi |
|
| 524 |
+ echo "Waiting for Cinder API to start..." |
|
| 525 |
+ if ! wait_for_service $SERVICE_TIMEOUT $cinder_url; then |
|
| 526 |
+ die $LINENO "c-api did not start" |
|
| 528 | 527 |
fi |
| 529 | 528 |
|
| 530 | 529 |
run_process c-sch "$CINDER_BIN_DIR/cinder-scheduler --config-file $CINDER_CONF" |
| ... | ... |
@@ -538,12 +532,7 @@ function start_cinder {
|
| 538 | 538 |
|
| 539 | 539 |
# stop_cinder() - Stop running processes |
| 540 | 540 |
function stop_cinder {
|
| 541 |
- if [ "$CINDER_USE_MOD_WSGI" == "True" ]; then |
|
| 542 |
- disable_apache_site osapi-volume |
|
| 543 |
- restart_apache_server |
|
| 544 |
- else |
|
| 545 |
- stop_process c-api |
|
| 546 |
- fi |
|
| 541 |
+ stop_process c-api |
|
| 547 | 542 |
|
| 548 | 543 |
# Kill the cinder screen windows |
| 549 | 544 |
local serv |