Browse code

Merge "Add toggle to run Nova API and EC2-API under Apache2"

Jenkins authored on 2015/05/11 07:29:37
Showing 4 changed files
... ...
@@ -149,6 +149,10 @@ Example (Keystone):
149 149
 
150 150
     KEYSTONE_USE_MOD_WSGI="True"
151 151
 
152
+Example (Nova):
153
+
154
+    NOVA_USE_MOD_WSGI="True"
155
+
152 156
 Example (Swift):
153 157
 
154 158
     SWIFT_USE_MOD_WSGI="True"
155 159
new file mode 100644
... ...
@@ -0,0 +1,16 @@
0
+Listen %PUBLICPORT%
1
+
2
+<VirtualHost *:%PUBLICPORT%>
3
+    WSGIDaemonProcess nova-api processes=5 threads=1 user=%USER% display-name=%{GROUP} %VIRTUALENV%
4
+    WSGIProcessGroup nova-api
5
+    WSGIScriptAlias / %PUBLICWSGI%
6
+    WSGIApplicationGroup %{GLOBAL}
7
+    WSGIPassAuthorization On
8
+    <IfVersion >= 2.4>
9
+      ErrorLogFormat "%{cu}t %M"
10
+    </IfVersion>
11
+    ErrorLog /var/log/%APACHE_NAME%/nova-api.log
12
+    %SSLENGINE%
13
+    %SSLCERTFILE%
14
+    %SSLKEYFILE%
15
+</VirtualHost>
0 16
\ No newline at end of file
1 17
new file mode 100644
... ...
@@ -0,0 +1,16 @@
0
+Listen %PUBLICPORT%
1
+
2
+<VirtualHost *:%PUBLICPORT%>
3
+    WSGIDaemonProcess nova-ec2-api processes=5 threads=1 user=%USER% display-name=%{GROUP} %VIRTUALENV%
4
+    WSGIProcessGroup nova-ec2-api
5
+    WSGIScriptAlias / %PUBLICWSGI%
6
+    WSGIApplicationGroup %{GLOBAL}
7
+    WSGIPassAuthorization On
8
+    <IfVersion >= 2.4>
9
+      ErrorLogFormat "%{cu}t %M"
10
+    </IfVersion>
11
+    ErrorLog /var/log/%APACHE_NAME%/nova-ec2-api.log
12
+    %SSLENGINE%
13
+    %SSLCERTFILE%
14
+    %SSLKEYFILE%
15
+</VirtualHost>
0 16
\ No newline at end of file
... ...
@@ -16,6 +16,7 @@
16 16
 #
17 17
 # - install_nova
18 18
 # - configure_nova
19
+# - _config_nova_apache_wsgi
19 20
 # - create_nova_conf
20 21
 # - init_nova
21 22
 # - start_nova
... ...
@@ -62,6 +63,15 @@ NOVA_API_PASTE_INI=${NOVA_API_PASTE_INI:-$NOVA_CONF_DIR/api-paste.ini}
62 62
 # Expect to remove in L or M.
63 63
 NOVA_API_VERSION=${NOVA_API_VERSION-default}
64 64
 
65
+if is_suse; then
66
+    NOVA_WSGI_DIR=${NOVA_WSGI_DIR:-/srv/www/htdocs/nova}
67
+else
68
+    NOVA_WSGI_DIR=${NOVA_WSGI_DIR:-/var/www/nova}
69
+fi
70
+
71
+# Toggle for deploying Nova-API under HTTPD + mod_wsgi
72
+NOVA_USE_MOD_WSGI=${NOVA_USE_MOD_WSGI:-False}
73
+
65 74
 if is_ssl_enabled_service "nova" || is_service_enabled tls-proxy; then
66 75
     NOVA_SERVICE_PROTOCOL="https"
67 76
     EC2_SERVICE_PROTOCOL="https"
... ...
@@ -223,6 +233,64 @@ function cleanup_nova {
223 223
     #fi
224 224
 }
225 225
 
226
+# _cleanup_nova_apache_wsgi() - Remove wsgi files, disable and remove apache vhost file
227
+function _cleanup_nova_apache_wsgi {
228
+    sudo rm -f $NOVA_WSGI_DIR/*
229
+    sudo rm -f $(apache_site_config_for nova-api)
230
+    sudo rm -f $(apache_site_config_for nova-ec2-api)
231
+}
232
+
233
+# _config_nova_apache_wsgi() - Set WSGI config files of Keystone
234
+function _config_nova_apache_wsgi {
235
+    sudo mkdir -p $NOVA_WSGI_DIR
236
+
237
+    local nova_apache_conf=$(apache_site_config_for nova-api)
238
+    local nova_ec2_apache_conf=$(apache_site_config_for nova-ec2-api)
239
+    local nova_ssl=""
240
+    local nova_certfile=""
241
+    local nova_keyfile=""
242
+    local nova_api_port=$NOVA_SERVICE_PORT
243
+    local nova_ec2_api_port=$EC2_SERVICE_PORT
244
+    local venv_path=""
245
+
246
+    if is_ssl_enabled_service nova-api; then
247
+        nova_ssl="SSLEngine On"
248
+        nova_certfile="SSLCertificateFile $NOVA_SSL_CERT"
249
+        nova_keyfile="SSLCertificateKeyFile $NOVA_SSL_KEY"
250
+    fi
251
+    if [[ ${USE_VENV} = True ]]; then
252
+        venv_path="python-path=${PROJECT_VENV["nova"]}/lib/python2.7/site-packages"
253
+    fi
254
+
255
+    # copy proxy vhost and wsgi helper files
256
+    sudo cp $NOVA_DIR/nova/wsgi/nova-api.py $NOVA_WSGI_DIR/nova-api
257
+    sudo cp $NOVA_DIR/nova/wsgi/nova-ec2-api.py $NOVA_WSGI_DIR/nova-ec2-api
258
+
259
+    sudo cp $FILES/apache-nova-api.template $nova_apache_conf
260
+    sudo sed -e "
261
+        s|%PUBLICPORT%|$nova_api_port|g;
262
+        s|%APACHE_NAME%|$APACHE_NAME|g;
263
+        s|%PUBLICWSGI%|$NOVA_WSGI_DIR/nova-api|g;
264
+        s|%SSLENGINE%|$nova_ssl|g;
265
+        s|%SSLCERTFILE%|$nova_certfile|g;
266
+        s|%SSLKEYFILE%|$nova_keyfile|g;
267
+        s|%USER%|$STACK_USER|g;
268
+        s|%VIRTUALENV%|$venv_path|g
269
+    " -i $nova_apache_conf
270
+
271
+    sudo cp $FILES/apache-nova-ec2-api.template $nova_ec2_apache_conf
272
+    sudo sed -e "
273
+        s|%PUBLICPORT%|$nova_ec2_api_port|g;
274
+        s|%APACHE_NAME%|$APACHE_NAME|g;
275
+        s|%PUBLICWSGI%|$NOVA_WSGI_DIR/nova-ec2-api|g;
276
+        s|%SSLENGINE%|$nova_ssl|g;
277
+        s|%SSLCERTFILE%|$nova_certfile|g;
278
+        s|%SSLKEYFILE%|$nova_keyfile|g;
279
+        s|%USER%|$STACK_USER|g;
280
+        s|%VIRTUALENV%|$venv_path|g
281
+    " -i $nova_ec2_apache_conf
282
+}
283
+
226 284
 # configure_nova() - Set config files, create data dirs, etc
227 285
 function configure_nova {
228 286
     # Put config files in ``/etc/nova`` for everyone to find
... ...
@@ -453,12 +521,16 @@ function create_nova_conf {
453 453
         iniset $NOVA_CONF DEFAULT force_config_drive "$FORCE_CONFIG_DRIVE"
454 454
     fi
455 455
     # Format logging
456
-    if [ "$LOG_COLOR" == "True" ] && [ "$SYSLOG" == "False" ]; then
456
+    if [ "$LOG_COLOR" == "True" ] && [ "$SYSLOG" == "False" ] && [ "$NOVA_USE_MOD_WSGI" == "False" ]  ; then
457 457
         setup_colorized_logging $NOVA_CONF DEFAULT
458 458
     else
459 459
         # Show user_name and project_name instead of user_id and project_id
460 460
         iniset $NOVA_CONF DEFAULT logging_context_format_string "%(asctime)s.%(msecs)03d %(levelname)s %(name)s [%(request_id)s %(user_name)s %(project_name)s] %(instance)s%(message)s"
461 461
     fi
462
+    if [ "$NOVA_USE_MOD_WSGI" == "True" ]; then
463
+        _config_nova_apache_wsgi
464
+    fi
465
+
462 466
     if is_service_enabled ceilometer; then
463 467
         iniset $NOVA_CONF DEFAULT instance_usage_audit "True"
464 468
         iniset $NOVA_CONF DEFAULT instance_usage_audit_period "hour"
... ...
@@ -655,6 +727,13 @@ function install_nova {
655 655
     git_clone $NOVA_REPO $NOVA_DIR $NOVA_BRANCH
656 656
     setup_develop $NOVA_DIR
657 657
     sudo install -D -m 0644 -o $STACK_USER {$NOVA_DIR/tools/,/etc/bash_completion.d/}nova-manage.bash_completion
658
+
659
+    if [ "$NOVA_USE_MOD_WSGI" == "True" ]; then
660
+        install_apache_wsgi
661
+        if is_ssl_enabled_service "nova-api"; then
662
+            enable_mod_ssl
663
+        fi
664
+    fi
658 665
 }
659 666
 
660 667
 # start_nova_api() - Start the API process ahead of other things
... ...
@@ -671,7 +750,18 @@ function start_nova_api {
671 671
     local old_path=$PATH
672 672
     export PATH=$NOVA_BIN_DIR:$PATH
673 673
 
674
-    run_process n-api "$NOVA_BIN_DIR/nova-api"
674
+    # If the site is not enabled then we are in a grenade scenario
675
+    local enabled_site_file=$(apache_site_config_for nova-api)
676
+    if [ -f ${enabled_site_file} ] && [ "$NOVA_USE_MOD_WSGI" == "True" ]; then
677
+        enable_apache_site nova-api
678
+        enable_apache_site nova-ec2-api
679
+        restart_apache_server
680
+        tail_log nova /var/log/$APACHE_NAME/nova-api.log
681
+        tail_log nova /var/log/$APACHE_NAME/nova-ec2-api.log
682
+    else
683
+        run_process n-api "$NOVA_BIN_DIR/nova-api"
684
+    fi
685
+
675 686
     echo "Waiting for nova-api to start..."
676 687
     if ! wait_for_service $SERVICE_TIMEOUT $service_protocol://$SERVICE_HOST:$service_port; then
677 688
         die $LINENO "nova-api did not start"
... ...
@@ -780,6 +870,13 @@ function stop_nova_compute {
780 780
 }
781 781
 
782 782
 function stop_nova_rest {
783
+    if [ "$NOVA_USE_MOD_WSGI" == "True" ]; then
784
+        disable_apache_site nova-api
785
+        disable_apache_site nova-ec2-api
786
+        restart_apache_server
787
+    else
788
+        stop_process n-api
789
+    fi
783 790
     # Kill the nova screen windows
784 791
     # Some services are listed here twice since more than one instance
785 792
     # of a service may be running in certain configs.