This change adds apache templates for Cinder API services.
Also add possibility to switch between the old and new ways
to setup Cinder API.
Related Cinder blueprint:
https://blueprints.launchpad.net/cinder/+spec/non-eventlet-wsgi-app
Change-Id: Icfad40ee6998296727a95613199e5c2d87bd0a45
Depends-On: Ifbab059001d1567b1f7b394c0411a9ca4629f846
Co-Authored-By: Ivan Kolodyazhny <e0ne@e0ne.info>
304 | 310 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,26 @@ |
0 |
+Listen %PUBLICPORT% |
|
1 |
+ |
|
2 |
+<VirtualHost *:%PUBLICPORT%> |
|
3 |
+ WSGIDaemonProcess osapi_volume processes=%APIWORKERS% threads=1 user=%USER% display-name=%{GROUP} %VIRTUALENV% |
|
4 |
+ WSGIProcessGroup osapi_volume |
|
5 |
+ WSGIScriptAlias / %CINDER_BIN_DIR%/cinder-wsgi |
|
6 |
+ WSGIApplicationGroup %{GLOBAL} |
|
7 |
+ WSGIPassAuthorization On |
|
8 |
+ <IfVersion >= 2.4> |
|
9 |
+ ErrorLogFormat "%{cu}t %M" |
|
10 |
+ </IfVersion> |
|
11 |
+ ErrorLog /var/log/%APACHE_NAME%/c-api.log |
|
12 |
+ %SSLENGINE% |
|
13 |
+ %SSLCERTFILE% |
|
14 |
+ %SSLKEYFILE% |
|
15 |
+ |
|
16 |
+ <Directory %CINDER_BIN_DIR%> |
|
17 |
+ <IfVersion >= 2.4> |
|
18 |
+ Require all granted |
|
19 |
+ </IfVersion> |
|
20 |
+ <IfVersion < 2.4> |
|
21 |
+ Order allow,deny |
|
22 |
+ Allow from all |
|
23 |
+ </IfVersion> |
|
24 |
+ </Directory> |
|
25 |
+</VirtualHost> |
... | ... |
@@ -108,6 +108,8 @@ CINDER_PERIODIC_INTERVAL=${CINDER_PERIODIC_INTERVAL:-60} |
108 | 108 |
|
109 | 109 |
CINDER_ISCSI_HELPER=${CINDER_ISCSI_HELPER:-tgtadm} |
110 | 110 |
|
111 |
+# Toggle for deploying Cinder under HTTPD + mod_wsgi |
|
112 |
+CINDER_USE_MOD_WSGI=${CINDER_USE_MOD_WSGI:-False} |
|
111 | 113 |
|
112 | 114 |
# Source the enabled backends |
113 | 115 |
if is_service_enabled c-vol && [[ -n "$CINDER_ENABLED_BACKENDS" ]]; then |
... | ... |
@@ -137,6 +139,11 @@ function is_cinder_enabled { |
137 | 137 |
return 1 |
138 | 138 |
} |
139 | 139 |
|
140 |
+# _cinder_cleanup_apache_wsgi() - Remove wsgi files, disable and remove apache vhost file |
|
141 |
+function _cinder_cleanup_apache_wsgi { |
|
142 |
+ sudo rm -f $(apache_site_config_for osapi-volume) |
|
143 |
+} |
|
144 |
+ |
|
140 | 145 |
# cleanup_cinder() - Remove residual data files, anything left over from previous |
141 | 146 |
# runs that a clean run would need to clean up |
142 | 147 |
function cleanup_cinder { |
... | ... |
@@ -183,6 +190,43 @@ function cleanup_cinder { |
183 | 183 |
fi |
184 | 184 |
done |
185 | 185 |
fi |
186 |
+ |
|
187 |
+ if [ "$CINDER_USE_MOD_WSGI" == "True" ]; then |
|
188 |
+ _cinder_cleanup_apache_wsgi |
|
189 |
+ fi |
|
190 |
+} |
|
191 |
+ |
|
192 |
+# _cinder_config_apache_wsgi() - Set WSGI config files |
|
193 |
+function _cinder_config_apache_wsgi { |
|
194 |
+ local cinder_apache_conf=$(apache_site_config_for osapi-volume) |
|
195 |
+ local cinder_ssl="" |
|
196 |
+ local cinder_certfile="" |
|
197 |
+ local cinder_keyfile="" |
|
198 |
+ local cinder_api_port=$CINDER_SERVICE_PORT |
|
199 |
+ local venv_path="" |
|
200 |
+ |
|
201 |
+ if is_ssl_enabled_service c-api; then |
|
202 |
+ cinder_ssl="SSLEngine On" |
|
203 |
+ cinder_certfile="SSLCertificateFile $CINDER_SSL_CERT" |
|
204 |
+ cinder_keyfile="SSLCertificateKeyFile $CINDER_SSL_KEY" |
|
205 |
+ fi |
|
206 |
+ if [[ ${USE_VENV} = True ]]; then |
|
207 |
+ venv_path="python-path=${PROJECT_VENV["cinder"]}/lib/python2.7/site-packages" |
|
208 |
+ fi |
|
209 |
+ |
|
210 |
+ # copy proxy vhost file |
|
211 |
+ sudo cp $FILES/apache-cinder-api.template $cinder_apache_conf |
|
212 |
+ sudo sed -e " |
|
213 |
+ s|%PUBLICPORT%|$cinder_api_port|g; |
|
214 |
+ s|%APACHE_NAME%|$APACHE_NAME|g; |
|
215 |
+ s|%APIWORKERS%|$API_WORKERS|g |
|
216 |
+ s|%CINDER_BIN_DIR%|$CINDER_BIN_DIR|g; |
|
217 |
+ s|%SSLENGINE%|$cinder_ssl|g; |
|
218 |
+ s|%SSLCERTFILE%|$cinder_certfile|g; |
|
219 |
+ s|%SSLKEYFILE%|$cinder_keyfile|g; |
|
220 |
+ s|%USER%|$STACK_USER|g; |
|
221 |
+ s|%VIRTUALENV%|$venv_path|g |
|
222 |
+ " -i $cinder_apache_conf |
|
186 | 223 |
} |
187 | 224 |
|
188 | 225 |
# configure_cinder() - Set config files, create data dirs, etc |
... | ... |
@@ -276,13 +320,17 @@ function configure_cinder { |
276 | 276 |
fi |
277 | 277 |
|
278 | 278 |
# Format logging |
279 |
- if [ "$LOG_COLOR" == "True" ] && [ "$SYSLOG" == "False" ]; then |
|
279 |
+ if [ "$LOG_COLOR" == "True" ] && [ "$SYSLOG" == "False" ] && [ "$CINDER_USE_MOD_WSGI" == "False" ]; then |
|
280 | 280 |
setup_colorized_logging $CINDER_CONF DEFAULT "project_id" "user_id" |
281 | 281 |
else |
282 | 282 |
# Set req-id, project-name and resource in log format |
283 | 283 |
iniset $CINDER_CONF DEFAULT logging_context_format_string "%(asctime)s.%(msecs)03d %(levelname)s %(name)s [%(request_id)s %(project_name)s] %(resource)s%(message)s" |
284 | 284 |
fi |
285 | 285 |
|
286 |
+ if [ "$CINDER_USE_MOD_WSGI" == "True" ]; then |
|
287 |
+ _cinder_config_apache_wsgi |
|
288 |
+ fi |
|
289 |
+ |
|
286 | 290 |
if [[ -r $CINDER_PLUGINS/$CINDER_DRIVER ]]; then |
287 | 291 |
configure_cinder_driver |
288 | 292 |
fi |
... | ... |
@@ -399,6 +447,13 @@ function install_cinder { |
399 | 399 |
install_package tgt |
400 | 400 |
fi |
401 | 401 |
fi |
402 |
+ |
|
403 |
+ if [ "$CINDER_USE_MOD_WSGI" == "True" ]; then |
|
404 |
+ install_apache_wsgi |
|
405 |
+ if is_ssl_enabled_service "c-api"; then |
|
406 |
+ enable_mod_ssl |
|
407 |
+ fi |
|
408 |
+ fi |
|
402 | 409 |
} |
403 | 410 |
|
404 | 411 |
# install_cinderclient() - Collect source and prepare |
... | ... |
@@ -446,10 +501,16 @@ function start_cinder { |
446 | 446 |
fi |
447 | 447 |
fi |
448 | 448 |
|
449 |
- run_process c-api "$CINDER_BIN_DIR/cinder-api --config-file $CINDER_CONF" |
|
450 |
- echo "Waiting for Cinder API to start..." |
|
451 |
- if ! wait_for_service $SERVICE_TIMEOUT $service_protocol://$CINDER_SERVICE_HOST:$service_port; then |
|
452 |
- die $LINENO "c-api did not start" |
|
449 |
+ if [ "$CINDER_USE_MOD_WSGI" == "True" ]; then |
|
450 |
+ enable_apache_site osapi-volume |
|
451 |
+ restart_apache_server |
|
452 |
+ tail_log c-api /var/log/$APACHE_NAME/c-api.log |
|
453 |
+ else |
|
454 |
+ run_process c-api "$CINDER_BIN_DIR/cinder-api --config-file $CINDER_CONF" |
|
455 |
+ echo "Waiting for Cinder API to start..." |
|
456 |
+ if ! wait_for_service $SERVICE_TIMEOUT $service_protocol://$CINDER_SERVICE_HOST:$service_port; then |
|
457 |
+ die $LINENO "c-api did not start" |
|
458 |
+ fi |
|
453 | 459 |
fi |
454 | 460 |
|
455 | 461 |
run_process c-sch "$CINDER_BIN_DIR/cinder-scheduler --config-file $CINDER_CONF" |
... | ... |
@@ -468,9 +529,16 @@ function start_cinder { |
468 | 468 |
|
469 | 469 |
# stop_cinder() - Stop running processes |
470 | 470 |
function stop_cinder { |
471 |
+ if [ "$CINDER_USE_MOD_WSGI" == "True" ]; then |
|
472 |
+ disable_apache_site osapi-volume |
|
473 |
+ restart_apache_server |
|
474 |
+ else |
|
475 |
+ stop_process c-api |
|
476 |
+ fi |
|
477 |
+ |
|
471 | 478 |
# Kill the cinder screen windows |
472 | 479 |
local serv |
473 |
- for serv in c-api c-bak c-sch c-vol; do |
|
480 |
+ for serv in c-bak c-sch c-vol; do |
|
474 | 481 |
stop_process $serv |
475 | 482 |
done |
476 | 483 |
} |