Browse code

Merge "Allow ceilometer-api to run under mod_wsgi"

Jenkins authored on 2014/09/29 15:13:57
Showing 2 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,15 @@
0
+Listen %PORT%
1
+
2
+<VirtualHost *:%PORT%>
3
+    WSGIDaemonProcess ceilometer-api processes=2 threads=10 user=%USER% display-name=%{GROUP}
4
+    WSGIProcessGroup ceilometer-api
5
+    WSGIScriptAlias / %WSGIAPP%
6
+    WSGIApplicationGroup %{GLOBAL}
7
+    <IfVersion >= 2.4>
8
+        ErrorLogFormat "%{cu}t %M"
9
+    </IfVersion>
10
+    ErrorLog /var/log/%APACHE_NAME%/ceilometer.log
11
+    CustomLog /var/log/%APACHE_NAME%/ceilometer_access.log combined
12
+</VirtualHost>
13
+
14
+WSGISocketPrefix /var/run/%APACHE_NAME%
... ...
@@ -41,6 +41,7 @@ CEILOMETER_CONF_DIR=/etc/ceilometer
41 41
 CEILOMETER_CONF=$CEILOMETER_CONF_DIR/ceilometer.conf
42 42
 CEILOMETER_API_LOG_DIR=/var/log/ceilometer-api
43 43
 CEILOMETER_AUTH_CACHE_DIR=${CEILOMETER_AUTH_CACHE_DIR:-/var/cache/ceilometer}
44
+CEILOMETER_WSGI_DIR=${CEILOMETER_WSGI_DIR:-/var/www/ceilometer}
44 45
 
45 46
 # Support potential entry-points console scripts
46 47
 CEILOMETER_BIN_DIR=$(get_python_exec_prefix)
... ...
@@ -52,6 +53,7 @@ CEILOMETER_BACKEND=${CEILOMETER_BACKEND:-mysql}
52 52
 CEILOMETER_SERVICE_PROTOCOL=http
53 53
 CEILOMETER_SERVICE_HOST=$SERVICE_HOST
54 54
 CEILOMETER_SERVICE_PORT=${CEILOMETER_SERVICE_PORT:-8777}
55
+CEILOMETER_USE_MOD_WSGI=$(trueorfalse False $CEILOMETER_USE_MOD_WSGI)
55 56
 
56 57
 # To enable OSprofiler change value of this variable to "notifications,profiler"
57 58
 CEILOMETER_NOTIFICATION_TOPICS=${CEILOMETER_NOTIFICATION_TOPICS:-notifications}
... ...
@@ -105,12 +107,39 @@ create_ceilometer_accounts() {
105 105
 }
106 106
 
107 107
 
108
+# _cleanup_keystone_apache_wsgi() - Remove wsgi files, disable and remove apache vhost file
109
+function _cleanup_ceilometer_apache_wsgi {
110
+    sudo rm -f $CEILOMETER_WSGI_DIR/*
111
+    sudo rm -f $(apache_site_config_for ceilometer)
112
+}
113
+
108 114
 # cleanup_ceilometer() - Remove residual data files, anything left over from previous
109 115
 # runs that a clean run would need to clean up
110 116
 function cleanup_ceilometer {
111 117
     if [ "$CEILOMETER_BACKEND" != 'mysql' ] && [ "$CEILOMETER_BACKEND" != 'postgresql' ] ; then
112 118
         mongo ceilometer --eval "db.dropDatabase();"
113 119
     fi
120
+    if [ "$CEILOMETER_USE_MOD_WSGI" == "True" ]; then
121
+        _cleanup_ceilometer_apache_wsgi
122
+    fi
123
+}
124
+
125
+function _config_ceilometer_apache_wsgi {
126
+    sudo mkdir -p $CEILOMETER_WSGI_DIR
127
+
128
+    local ceilometer_apache_conf=$(apache_site_config_for ceilometer)
129
+    local apache_version=$(get_apache_version)
130
+
131
+    # copy proxy vhost and wsgi file
132
+    sudo cp $CEILOMETER_DIR/ceilometer/api/app.wsgi $CEILOMETER_WSGI_DIR/app
133
+
134
+    sudo cp $FILES/apache-ceilometer.template $ceilometer_apache_conf
135
+    sudo sed -e "
136
+        s|%PORT%|$CEILOMETER_SERVICE_PORT|g;
137
+        s|%APACHE_NAME%|$APACHE_NAME|g;
138
+        s|%WSGIAPP%|$CEILOMETER_WSGI_DIR/app|g;
139
+        s|%USER%|$STACK_USER|g
140
+    " -i $ceilometer_apache_conf
114 141
 }
115 142
 
116 143
 # configure_ceilometer() - Set config files, create data dirs, etc
... ...
@@ -163,6 +192,11 @@ function configure_ceilometer {
163 163
         iniset $CEILOMETER_CONF vmware host_username "$VMWAREAPI_USER"
164 164
         iniset $CEILOMETER_CONF vmware host_password "$VMWAREAPI_PASSWORD"
165 165
     fi
166
+
167
+    if [ "$CEILOMETER_USE_MOD_WSGI" == "True" ]; then
168
+        iniset $CEILOMETER_CONF api pecan_debug "False"
169
+        _config_ceilometer_apache_wsgi
170
+    fi
166 171
 }
167 172
 
168 173
 function configure_mongodb {
... ...
@@ -223,7 +257,16 @@ function start_ceilometer {
223 223
     run_process ceilometer-acentral "ceilometer-agent-central --config-file $CEILOMETER_CONF"
224 224
     run_process ceilometer-anotification "ceilometer-agent-notification --config-file $CEILOMETER_CONF"
225 225
     run_process ceilometer-collector "ceilometer-collector --config-file $CEILOMETER_CONF"
226
-    run_process ceilometer-api "ceilometer-api -d -v --log-dir=$CEILOMETER_API_LOG_DIR --config-file $CEILOMETER_CONF"
226
+
227
+    if [[ "$CEILOMETER_USE_MOD_WSGI" == "False" ]]; then
228
+        run_process ceilometer-api "ceilometer-api -d -v --log-dir=$CEILOMETER_API_LOG_DIR --config-file $CEILOMETER_CONF"
229
+    else
230
+        enable_apache_site ceilometer
231
+        restart_apache_server
232
+        tail_log ceilometer /var/log/$APACHE_NAME/ceilometer.log
233
+        tail_log ceilometer-api /var/log/$APACHE_NAME/ceilometer_access.log
234
+    fi
235
+
227 236
 
228 237
     # Start the compute agent last to allow time for the collector to
229 238
     # fully wake up and connect to the message bus. See bug #1355809
... ...
@@ -248,6 +291,10 @@ function start_ceilometer {
248 248
 
249 249
 # stop_ceilometer() - Stop running processes
250 250
 function stop_ceilometer {
251
+    if [ "$CEILOMETER_USE_MOD_WSGI" == "True" ]; then
252
+        disable_apache_site ceilometer
253
+        restart_apache_server
254
+    fi
251 255
     # Kill the ceilometer screen windows
252 256
     for serv in ceilometer-acompute ceilometer-acentral ceilometer-anotification ceilometer-collector ceilometer-api ceilometer-alarm-notifier ceilometer-alarm-evaluator; do
253 257
         stop_process $serv