90 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python
 | 
						|
# pylint: disable-msg=C0103
 | 
						|
# vim: tabstop=4 shiftwidth=4 softtabstop=4
 | 
						|
 | 
						|
# Copyright 2010 United States Government as represented by the
 | 
						|
# Administrator of the National Aeronautics and Space Administration.
 | 
						|
# All Rights Reserved.
 | 
						|
#
 | 
						|
#    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.
 | 
						|
 | 
						|
"""Starter script for Nova API."""
 | 
						|
 | 
						|
import gettext
 | 
						|
import os
 | 
						|
import sys
 | 
						|
 | 
						|
# If ../nova/__init__.py exists, add ../ to Python search path, so that
 | 
						|
# it will override what happens to be installed in /usr/(local/)lib/python...
 | 
						|
possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
 | 
						|
                                   os.pardir,
 | 
						|
                                   os.pardir))
 | 
						|
if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
 | 
						|
    sys.path.insert(0, possible_topdir)
 | 
						|
 | 
						|
gettext.install('nova', unicode=1)
 | 
						|
 | 
						|
from nova import flags
 | 
						|
from nova import log as logging
 | 
						|
from nova import version
 | 
						|
from nova import wsgi
 | 
						|
 | 
						|
LOG = logging.getLogger('nova.api')
 | 
						|
LOG.setLevel(logging.DEBUG)
 | 
						|
 | 
						|
FLAGS = flags.FLAGS
 | 
						|
 | 
						|
API_ENDPOINTS = ['ec2', 'osapi']
 | 
						|
 | 
						|
 | 
						|
def run_app(paste_config_file):
 | 
						|
    LOG.debug(_("Using paste.deploy config at: %s"), paste_config_file)
 | 
						|
    apps = []
 | 
						|
    for api in API_ENDPOINTS:
 | 
						|
        config = wsgi.load_paste_configuration(paste_config_file, api)
 | 
						|
        if config is None:
 | 
						|
            LOG.debug(_("No paste configuration for app: %s"), api)
 | 
						|
            continue
 | 
						|
        LOG.debug(_("App Config: %(api)s\n%(config)r") % locals())
 | 
						|
        wsgi.paste_config_to_flags(config, {
 | 
						|
            "verbose": FLAGS.verbose,
 | 
						|
            "%s_host" % api: config.get('host', '0.0.0.0'),
 | 
						|
            "%s_port" % api: getattr(FLAGS, "%s_port" % api)})
 | 
						|
        LOG.info(_("Running %s API"), api)
 | 
						|
        app = wsgi.load_paste_app(paste_config_file, api)
 | 
						|
        apps.append((app, getattr(FLAGS, "%s_port" % api),
 | 
						|
                     getattr(FLAGS, "%s_host" % api)))
 | 
						|
    if len(apps) == 0:
 | 
						|
        LOG.error(_("No known API applications configured in %s."),
 | 
						|
                  paste_config_file)
 | 
						|
        return
 | 
						|
 | 
						|
    # NOTE(todd): redo logging config, verbose could be set in paste config
 | 
						|
    logging.root.setup_from_flags()
 | 
						|
 | 
						|
    server = wsgi.Server()
 | 
						|
    for app in apps:
 | 
						|
        server.start(*app)
 | 
						|
    server.wait()
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    FLAGS(sys.argv)
 | 
						|
    LOG.audit(_("Starting nova-api node (version %s)"),
 | 
						|
              version.version_string_with_vcs())
 | 
						|
    conf = wsgi.paste_config_file('nova-api.conf')
 | 
						|
    if conf:
 | 
						|
        run_app(conf)
 | 
						|
    else:
 | 
						|
        LOG.error(_("No paste configuration found for: %s"), 'nova-api.conf')
 |