Create a ReST API entrypoint

This creates a server entrypoint for running the Pecan+WSME
infrastructure.

Change-Id: I58bdeea7971f0f562e3d7a5542740283cb910a7b
This commit is contained in:
Steven Dake 2014-11-18 12:39:52 -07:00
parent ab7211e94c
commit 14707dd546
7 changed files with 137 additions and 1 deletions

View File

@ -10,12 +10,38 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from oslo.config import cfg
import pecan
from magnum.api import config as api_config
from magnum.api import model
# Register options for the service
API_SERVICE_OPTS = [
cfg.IntOpt('port',
default=9511,
help='The port for the magnum API server'),
cfg.StrOpt('host',
default='127.0.0.1',
help='The listen IP for the magnum API server')
]
def setup_app(config):
CONF = cfg.CONF
opt_group = cfg.OptGroup(name='api',
title='Options for the magnum-api service')
CONF.register_group(opt_group)
CONF.register_opts(API_SERVICE_OPTS, opt_group)
def get_pecan_config():
# Set up the pecan configuration
filename = api_config.__file__.replace('.pyc', '.py')
return pecan.configuration.conf_from_file(filename)
def setup_app(config=None):
if not config:
config = get_pecan_config()
model.init_model()
app_conf = dict(config.app)

29
magnum/api/config.py Normal file
View File

@ -0,0 +1,29 @@
# -*- coding: utf-8 -*-
#
# Copyright 2013 - Noorul Islam K M
#
# 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.
# Pecan Application Configurations
app = {
'root': 'magnum.api.controllers.root.RootController',
'modules': ['magnum.api'],
'debug': False
}
# Custom Configurations must be in Python dictionary format::
#
# foo = {'bar':'baz'}
#
# All configurations are accessible at::
# pecan.conf

0
magnum/cmd/__init__.py Normal file
View File

54
magnum/cmd/api.py Normal file
View File

@ -0,0 +1,54 @@
# Copyright 2013 - Red Hat, Inc.
#
# 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 the Magnum API service."""
import logging as std_logging
import os
import sys
from wsgiref import simple_server
from oslo.config import cfg
from magnum.api import app as api_app
from magnum.common import service
from magnum.openstack.common._i18n import _
from magnum.openstack.common import log as logging
LOG = logging.getLogger(__name__)
def main():
service.prepare_service(sys.argv)
app = api_app.setup_app()
# Create the WSGI server and start it
host, port = cfg.CONF.api.host, cfg.CONF.api.port
srv = simple_server.make_server(host, port, app)
LOG.info(_('Starting server in PID %s') % os.getpid())
LOG.debug("Configuration:")
cfg.CONF.log_opt_values(LOG, std_logging.DEBUG)
if host == '0.0.0.0':
LOG.info(_('serving on 0.0.0.0:%(port)s, '
'view at http://127.0.0.1:%(port)s') %
dict(port=port))
else:
LOG.info(_('serving on http://%(host)s:%(port)s') %
dict(host=host, port=port))
srv.serve_forever()

View File

23
magnum/common/service.py Normal file
View File

@ -0,0 +1,23 @@
# Copyright 2013 - Red Hat, Inc.
#
# 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.
from oslo.config import cfg
from magnum.openstack.common import log as logging
def prepare_service(argv=[]):
cfg.CONF(argv[1:], project='magnum')
logging.setup('magnum')
# may make sense to load DB here

View File

@ -46,5 +46,9 @@ keywords = _ gettext ngettext l_ lazy_gettext
mapping_file = babel.cfg
output_file = magnum/locale/magnum.pot
[entry_points]
console_scripts =
magnum-api = magnum.cmd.api:main
[wheel]
universal = 1