deckhand/deckhand/control/api.py

84 lines
2.6 KiB
Python

# Copyright 2017 AT&T Intellectual Property. All other 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.
import os
import falcon
from oslo_config import cfg
from oslo_log import log as logging
from deckhand.conf import config
from deckhand.control import base as api_base
from deckhand.control import documents
from deckhand.control import revision_documents
from deckhand.control import revisions
from deckhand.control import secrets
from deckhand.db.sqlalchemy import api as db_api
CONF = cfg.CONF
LOG = None
def __setup_logging():
global LOG
LOGGER_NAME = 'deckhand'
LOG = logging.getLogger(__name__, LOGGER_NAME)
logging.register_options(CONF)
config.parse_args()
current_path = os.path.dirname(os.path.realpath(__file__))
root_path = os.path.abspath(os.path.join(current_path, os.pardir,
os.pardir))
logging_cfg_path = "%s/etc/deckhand/logging.conf" % root_path
# If logging conf is in place we need to set log_config_append. Only do so
# if the log path already exists.
if ((not hasattr(CONF, 'log_config_append') or
CONF.log_config_append is None) and
os.path.isfile(logging_cfg_path)):
CONF.log_config_append = logging_cfg_path
logging.setup(CONF, LOGGER_NAME)
LOG.debug('Initiated Deckhand logging.')
def __setup_db():
db_api.setup_db()
def start_api(state_manager=None):
"""Main entry point for initializing the Deckhand API service.
Create routes for the v1.0 API and sets up logging.
"""
__setup_logging()
__setup_db()
control_api = falcon.API(request_type=api_base.DeckhandRequest)
v1_0_routes = [
('documents', documents.DocumentsResource()),
('revisions', revisions.RevisionsResource()),
('revisions/{revision_id}', revisions.RevisionsResource()),
('revisions/{revision_id}/documents',
revision_documents.RevisionDocumentsResource()),
('secrets', secrets.SecretsResource())
]
for path, res in v1_0_routes:
control_api.add_route(os.path.join('/api/v1.0', path), res)
return control_api