Browse code

Update Apache + mod_wsgi deployment mechanisms

Added a global toggle for enabling HTTPD + mod_wsgi for services
that default deploy to running under Apache. When the variable
``ENABLE_HTTPD_MOD_WSGI_SERVICES`` is set to ``True`` any service
that recommends deploying under HTTPD + mod_wsgi, will be run
under Apache.

If ``ENABLE_HTTPD_MOD_WSGI_SERVICES`` is set to ``False`` the
any service that is defaulted to running under HTTPD + mod_wsgi
will (if capable) be run in an alternate deployment strategy (e.g.
eventlet).

Updated Swift and Keystone to have individual toggles for deploying
under HTTPD + mod_wsgi. This is done to allow for gate to run on
the services under mod_wsgi where appropriate. Toggles are
``KEYSTONE_USE_MOD_WSGI`` and ``SWIFT_USE_MOD_WSGI`` and are both
defaulted to "False" (do not deploy under HTTPD + mod_wsgi).

Change-Id: Id3b121b8f1cde369d184b586e0d875bdbda34813

Morgan Fainberg authored on 2014/06/21 02:37:18
Showing 5 changed files
... ...
@@ -133,11 +133,23 @@ Example (Qpid):
133 133
 
134 134
 # Apache Frontend
135 135
 
136
-Apache web server is enabled for wsgi services by setting
137
-`APACHE_ENABLED_SERVICES` in your ``localrc`` section.  Remember to
138
-enable these services at first as above.
136
+Apache web server can be enabled for wsgi services that support being deployed
137
+under HTTPD + mod_wsgi. By default, services that recommend running under
138
+HTTPD + mod_wsgi are deployed under Apache. To use an alternative deployment
139
+strategy (e.g. eventlet) for services that support an alternative to HTTPD +
140
+mod_wsgi set ``ENABLE_HTTPD_MOD_WSGI_SERVICES`` to ``False`` in your
141
+``local.conf``.
139 142
 
140
-    APACHE_ENABLED_SERVICES+=key,swift
143
+Each service that can be run under HTTPD + mod_wsgi also has an override
144
+toggle available that can be set in your ``local.conf``.
145
+
146
+Example (Keystone):
147
+
148
+    KEYSTONE_USE_MOD_WSGI="True"
149
+
150
+Example (Swift):
151
+
152
+    SWIFT_USE_MOD_WSGI="True"
141 153
 
142 154
 # Swift
143 155
 
... ...
@@ -8,7 +8,6 @@
8 8
 #
9 9
 # lib/apache exports the following functions:
10 10
 #
11
-# - is_apache_enabled_service
12 11
 # - install_apache_wsgi
13 12
 # - config_apache_wsgi
14 13
 # - apache_site_config_for
... ...
@@ -42,23 +41,6 @@ fi
42 42
 
43 43
 # Functions
44 44
 # ---------
45
-
46
-# is_apache_enabled_service() checks if the service(s) specified as arguments are
47
-# apache enabled by the user in ``APACHE_ENABLED_SERVICES`` as web front end.
48
-#
49
-# Multiple services specified as arguments are ``OR``'ed together; the test
50
-# is a short-circuit boolean, i.e it returns on the first match.
51
-#
52
-# Uses global ``APACHE_ENABLED_SERVICES``
53
-# APACHE_ENABLED_SERVICES service [service ...]
54
-function is_apache_enabled_service {
55
-    services=$@
56
-    for service in ${services}; do
57
-        [[ ,${APACHE_ENABLED_SERVICES}, =~ ,${service}, ]] && return 0
58
-    done
59
-    return 1
60
-}
61
-
62 45
 # install_apache_wsgi() - Install Apache server and wsgi module
63 46
 function install_apache_wsgi {
64 47
     # Apache installation, because we mark it NOPRIME
... ...
@@ -46,6 +46,9 @@ KEYSTONECLIENT_DIR=$DEST/python-keystoneclient
46 46
 # Example of KEYSTONE_EXTENSIONS=oauth1,federation
47 47
 KEYSTONE_EXTENSIONS=${KEYSTONE_EXTENSIONS:-}
48 48
 
49
+# Toggle for deploying Keystone under HTTPD + mod_wsgi
50
+KEYSTONE_USE_MOD_WSGI=${KEYSTONE_USE_MOD_WSGI:-False}
51
+
49 52
 # Select the backend for Keystone's service catalog
50 53
 KEYSTONE_CATALOG_BACKEND=${KEYSTONE_CATALOG_BACKEND:-sql}
51 54
 KEYSTONE_CATALOG=$KEYSTONE_CONF_DIR/default_catalog.templates
... ...
@@ -112,6 +115,7 @@ function _cleanup_keystone_apache_wsgi {
112 112
     sudo rm -f $KEYSTONE_WSGI_DIR/*.wsgi
113 113
     disable_apache_site keystone
114 114
     sudo rm -f $(apache_site_config_for keystone)
115
+    restart_apache_server
115 116
 }
116 117
 
117 118
 # _config_keystone_apache_wsgi() - Set WSGI config files of Keystone
... ...
@@ -265,11 +269,11 @@ function configure_keystone {
265 265
     fi
266 266
 
267 267
     # Format logging
268
-    if [ "$LOG_COLOR" == "True" ] && [ "$SYSLOG" == "False" ] &&  ! is_apache_enabled_service key ; then
268
+    if [ "$LOG_COLOR" == "True" ] && [ "$SYSLOG" == "False" ] && [ "$KEYSTONE_USE_MOD_WSGI" == "False" ]  ; then
269 269
         setup_colorized_logging $KEYSTONE_CONF DEFAULT
270 270
     fi
271 271
 
272
-    if is_apache_enabled_service key; then
272
+    if [ "$KEYSTONE_USE_MOD_WSGI" == "True" ]; then
273 273
         iniset $KEYSTONE_CONF DEFAULT debug "True"
274 274
         # Eliminate the %(asctime)s.%(msecs)03d from the log format strings
275 275
         iniset $KEYSTONE_CONF DEFAULT logging_context_format_string "%(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s"
... ...
@@ -442,7 +446,7 @@ function install_keystone {
442 442
     fi
443 443
     git_clone $KEYSTONE_REPO $KEYSTONE_DIR $KEYSTONE_BRANCH
444 444
     setup_develop $KEYSTONE_DIR
445
-    if is_apache_enabled_service key; then
445
+    if [ "$KEYSTONE_USE_MOD_WSGI" == "True" ]; then
446 446
         install_apache_wsgi
447 447
     fi
448 448
 }
... ...
@@ -455,7 +459,7 @@ function start_keystone {
455 455
         service_port=$KEYSTONE_SERVICE_PORT_INT
456 456
     fi
457 457
 
458
-    if is_apache_enabled_service key; then
458
+    if [ "$KEYSTONE_USE_MOD_WSGI" == "True" ]; then
459 459
         restart_apache_server
460 460
         screen_it key "cd $KEYSTONE_DIR && sudo tail -f /var/log/$APACHE_NAME/keystone"
461 461
     else
... ...
@@ -118,6 +118,8 @@ ACCOUNT_PORT_BASE=${ACCOUNT_PORT_BASE:-6012}
118 118
 # Tell Tempest this project is present
119 119
 TEMPEST_SERVICES+=,swift
120 120
 
121
+# Toggle for deploying Keystone under HTTPD + mod_wsgi
122
+SWIFT_USE_MOD_WSGI=${SWIFT_USE_MOD_WSGI:-False}
121 123
 
122 124
 # Functions
123 125
 # ---------
... ...
@@ -139,7 +141,7 @@ function cleanup_swift {
139 139
         rm ${SWIFT_DISK_IMAGE}
140 140
     fi
141 141
     rm -rf ${SWIFT_DATA_DIR}/run/
142
-    if is_apache_enabled_service swift; then
142
+    if [ "$SWIFT_USE_MOD_WSGI" == "True" ]; then
143 143
         _cleanup_swift_apache_wsgi
144 144
     fi
145 145
 }
... ...
@@ -470,7 +472,7 @@ EOF
470 470
         sudo killall -HUP rsyslogd
471 471
     fi
472 472
 
473
-    if is_apache_enabled_service swift; then
473
+    if [ "$SWIFT_USE_MOD_WSGI" == "True" ]; then
474 474
         _config_swift_apache_wsgi
475 475
     fi
476 476
 }
... ...
@@ -621,7 +623,7 @@ function init_swift {
621 621
 function install_swift {
622 622
     git_clone $SWIFT_REPO $SWIFT_DIR $SWIFT_BRANCH
623 623
     setup_develop $SWIFT_DIR
624
-    if is_apache_enabled_service swift; then
624
+    if [ "$SWIFT_USE_MOD_WSGI" == "True" ]; then
625 625
         install_apache_wsgi
626 626
     fi
627 627
 }
... ...
@@ -645,7 +647,7 @@ function start_swift {
645 645
         start_service rsyncd
646 646
     fi
647 647
 
648
-    if is_apache_enabled_service swift; then
648
+    if [ "$SWIFT_USE_MOD_WSGI" == "True" ]; then
649 649
         restart_apache_server
650 650
         swift-init --run-dir=${SWIFT_DATA_DIR}/run rest start
651 651
         screen_it s-proxy "cd $SWIFT_DIR && sudo tail -f /var/log/$APACHE_NAME/proxy-server"
... ...
@@ -682,7 +684,7 @@ function start_swift {
682 682
 # stop_swift() - Stop running processes (non-screen)
683 683
 function stop_swift {
684 684
 
685
-    if is_apache_enabled_service swift; then
685
+    if [ "$SWIFT_USE_MOD_WSGI" == "True" ]; then
686 686
         swift-init --run-dir=${SWIFT_DATA_DIR}/run rest stop && return 0
687 687
     fi
688 688
 
... ...
@@ -52,6 +52,12 @@ if [[ -z "$ENABLED_SERVICES" ]]; then
52 52
     ENABLED_SERVICES+=,rabbit,tempest,mysql
53 53
 fi
54 54
 
55
+# Global toggle for enabling services under mod_wsgi. If this is set to
56
+# ``True`` all services that use HTTPD + mod_wsgi as the preferred method of
57
+# deployment, will be deployed under Apache. If this is set to ``False`` all
58
+# services will rely on the local toggle variable (e.g. ``KEYSTONE_USE_MOD_WSGI``)
59
+ENABLE_HTTPD_MOD_WSGI_SERVICES=True
60
+
55 61
 # Tell Tempest which services are available.  The default is set here as
56 62
 # Tempest falls late in the configuration sequence.  This differs from
57 63
 # ``ENABLED_SERVICES`` in that the project names are used here rather than