Add samples to serve API through Apache mod_wsgi

The default API service (ironic.cmd.api) uses the wsgiref library.

Some deployers may want to serve the API through apache/httpd instead.

This patch adds application hooks to use with mod_wsgi, and a sample
apache2 config file to demonstrate its use with debian-based distros.

Change-Id: I44cd8e0941c350a6e5c16cf2d068c3e8d684ab47
Related-bug: #1279206
This commit is contained in:
Devananda van der Veen 2014-02-08 00:20:45 -08:00
parent 7eb48adc82
commit 1da73ef2ba
2 changed files with 64 additions and 0 deletions

37
etc/apache2/ironic Normal file
View File

@ -0,0 +1,37 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
# This is an example Apache2 configuration file for using the
# Ironic API through mod_wsgi. This version assumes you are
# running devstack to configure the software.
Listen 6385
<VirtualHost *:6385>
WSGIDaemonProcess ironic user=stack group=stack threads=10
WSGIScriptAlias / /opt/stack/ironic/ironic/api/app.wsgi
SetEnv APACHE_RUN_USER stack
SetEnv APACHE_RUN_GROUP stack
WSGIProcessGroup ironic
ErrorLog /var/log/apache2/ironic_error.log
LogLevel info
CustomLog /var/log/apache2/ironic_access.log combined
<Directory /opt/stack/ironic/ironic/api>
WSGIProcessGroup ironic
WSGIApplicationGroup %{GLOBAL}
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

27
ironic/api/app.wsgi Normal file
View File

@ -0,0 +1,27 @@
# -*- mode: python -*-
# -*- encoding: utf-8 -*-
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""
Use this file for deploying the API service under Apache2 mod_wsgi.
"""
from ironic.api import app
from ironic.common import service
from ironic.openstack.common import gettextutils
gettextutils.install('ironic')
service.prepare_service([])
application = app.VersionSelectorApplication()