distcloud/dcorch/api/proxy/apps/acceptor.py

124 lines
4.9 KiB
Python

# Copyright 2017 Wind River
#
# 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 routes
from dcorch.api.proxy.apps.controller import CinderAPIController
from dcorch.api.proxy.apps.controller import ComputeAPIController
from dcorch.api.proxy.apps.controller import IdentityAPIController
from dcorch.api.proxy.apps.controller import NeutronAPIController
from dcorch.api.proxy.apps.controller import OrchAPIController
from dcorch.api.proxy.apps.controller import SysinvAPIController
from dcorch.api.proxy.apps.dispatcher import APIDispatcher
from dcorch.api.proxy.apps.patch import PatchAPIController
from dcorch.api.proxy.apps.router import Router
from dcorch.api.proxy.common import constants as proxy_consts
from dcorch.common import consts
from oslo_config import cfg
from oslo_log import log as logging
LOG = logging.getLogger(__name__)
CONF = cfg.CONF
class Acceptor(Router):
def __init__(self, app, conf):
self._default_dispatcher = APIDispatcher(app)
self.forwarder_map = {
consts.ENDPOINT_TYPE_COMPUTE: self._default_dispatcher,
consts.ENDPOINT_TYPE_PLATFORM: self._default_dispatcher,
consts.ENDPOINT_TYPE_VOLUME: self._default_dispatcher,
consts.ENDPOINT_TYPE_NETWORK: self._default_dispatcher,
consts.ENDPOINT_TYPE_IDENTITY: self._default_dispatcher,
}
if CONF.type in self.forwarder_map:
forwarder = self.forwarder_map[CONF.type]
else:
forwarder = None
self.route_map = {
consts.ENDPOINT_TYPE_COMPUTE: self.add_compute_routes,
consts.ENDPOINT_TYPE_PLATFORM: self.add_platform_routes,
consts.ENDPOINT_TYPE_VOLUME: self.add_volume_routes,
consts.ENDPOINT_TYPE_NETWORK: self.add_network_routes,
consts.ENDPOINT_TYPE_PATCHING: self.add_patch_routes,
consts.ENDPOINT_TYPE_IDENTITY: self.add_identity_routes,
}
self._conf = conf
mapper = routes.Mapper()
self.add_routes(app, conf, mapper)
super(Acceptor, self).__init__(app, conf, mapper, forwarder)
def add_routes(self, app, conf, mapper):
handler = self.route_map[CONF.type]
handler(app, conf, mapper)
def add_compute_routes(self, app, conf, mapper):
api_controller = ComputeAPIController(app, conf)
orch_controller = OrchAPIController(app, conf)
for key, value in proxy_consts.COMPUTE_PATH_MAP.items():
for k, v in value.items():
self._add_resource(mapper, api_controller, v, k,
CONF.type, key)
self._add_resource(mapper, orch_controller,
proxy_consts.QUOTA_DETAIL_PATHS,
consts.RESOURCE_TYPE_COMPUTE_QUOTA_SET,
CONF.type, method=['GET'])
def add_platform_routes(self, app, conf, mapper):
api_controller = SysinvAPIController(app, conf)
for key, value in proxy_consts.SYSINV_PATH_MAP.items():
self._add_resource(mapper, api_controller, value, key, CONF.type)
def add_volume_routes(self, app, conf, mapper):
api_controller = CinderAPIController(app, conf)
for key, value in proxy_consts.CINDER_PATH_MAP.items():
for k, v in value.items():
self._add_resource(mapper, api_controller, v, k,
CONF.type, key)
def add_network_routes(self, app, conf, mapper):
api_controller = NeutronAPIController(app, conf)
orch_controller = OrchAPIController(app, conf)
for key, value in proxy_consts.NEUTRON_PATH_MAP.items():
self._add_resource(mapper, api_controller, value, key, CONF.type)
self._add_resource(mapper, orch_controller,
proxy_consts.NEUTRON_QUOTA_DETAIL_PATHS,
consts.RESOURCE_TYPE_NETWORK_QUOTA_SET,
CONF.type, method=['GET'])
def add_patch_routes(self, app, conf, mapper):
api_controller = PatchAPIController(app, conf)
for key, value in proxy_consts.PATCH_PATH_MAP.items():
self._add_resource(mapper, api_controller, value, key, CONF.type)
def add_identity_routes(self, app, conf, mapper):
api_controller = IdentityAPIController(app, conf)
for key, value in proxy_consts.IDENTITY_PATH_MAP.items():
self._add_resource(mapper, api_controller, value, key, CONF.type)