diff options
Diffstat (limited to 'nova/wsgi.py')
-rw-r--r-- | nova/wsgi.py | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/nova/wsgi.py b/nova/wsgi.py index e999f76a3..817cd0478 100644 --- a/nova/wsgi.py +++ b/nova/wsgi.py @@ -22,6 +22,7 @@ Utility methods for working with WSGI servers """ import json +import os import sys from xml.dom import minidom @@ -34,9 +35,15 @@ import webob import webob.dec import webob.exc +from paste import deploy + +from nova import flags from nova import log as logging +FLAGS = flags.FLAGS + + class WritableLogger(object): """A thin wrapper that responds to `write` and logs.""" @@ -385,3 +392,60 @@ class Serializer(object): node = doc.createTextNode(str(data)) result.appendChild(node) return result + +def paste_config_file(basename): + """Find the best location in the system for a paste config file. + + Search Order + ------------ + + The search for a paste config file honors `FLAGS.state_path`, which in a + version checked out from bzr will be the `nova` directory in the top level + of the checkout, and in an installation for a package for your distribution + will likely point to someplace like /etc/nova. + + This method tries to load places likely to be used in development or + experimentation before falling back to the system-wide configuration + in `/etc/nova/`. + + * Current working directory + * the `etc` directory under state_path, because when working on a checkout + from bzr this will point to the default + * top level of FLAGS.state_path, for distributions + * /etc/nova, which may not be diffrerent from state_path on your distro + + """ + + configfiles = [basename, + os.path.join(FLAGS.state_path, 'etc', basename), + os.path.join(FLAGS.state_path, basename), + '/etc/nova/%s' % basename] + for configfile in configfiles: + if os.path.exists(configfile): + return configfile + +def load_paste_configuration(filename, appname): + """Returns a paste configuration dict, or None.""" + filename = os.path.abspath(filename) + config = None + try: + config = deploy.appconfig("config:%s" % filename, name=appname) + except LookupError: + pass + return config + +def load_paste_app(filename, appname): + """Builds a wsgi app from a paste config, None if app not configured.""" + filename = os.path.abspath(filename) + app = None + try: + app = deploy.loadapp("config:%s" % filename, name=appname) + except LookupError: + pass + return app + +def paste_config_to_flags(config, mixins): + for k,v in mixins.iteritems(): + value = config.get(k, v) + converted_value = FLAGS[k].parser.Parse(value) + setattr(FLAGS, k, converted_value) |