Repository URL to install this package:
Version:
4.2.19 ▾
|
# Copyright 2018 TrilioData Inc.
# All Rights Reserved.
import functools
import dmapi.api.openstack
from dmapi.api.openstack import wsgi
import dmapi.conf
from dmapi import wsgi as base_wsgi
#from dmapi.api.openstack.compute import versionsV21
from dmapi.api.openstack import contego_extension
CONF = dmapi.conf.CONF
def _create_controller(main_controller, controller_list,
action_controller_list):
"""This is a helper method to create controller with a
list of extended controller. This is for backward compatible
with old extension interface. Finally, the controller for the
same resource will be merged into single one controller.
"""
controller = wsgi.Resource(main_controller())
for ctl in controller_list:
controller.register_extensions(ctl())
for ctl in action_controller_list:
controller.register_actions(ctl())
return controller
#version_controller = functools.partial(_create_controller,
#versionsV21.VersionsController, [], [])
"""URL Mapping Router List"""
contego_controller = functools.partial(
_create_controller, contego_extension.ContegoServerControllerExtension, [], [])
ROUTE_LIST = (
# NOTE: This is a redirection from '' to '/'. The request to the '/v2.1'
# or '/2.0' without the ending '/' will get a response with status code
# '302' returned
('/contego_vast_prepare/{id}',
{
'POST': [contego_controller, '_vast_prepare']
}
),
('/contego_vast_freeze/{id}',
{
'POST': [contego_controller, '_vast_freeze']
}
),
('/contego_vast_thaw/{id}',
{
'POST': [contego_controller, '_vast_thaw']
}
),
('/contego_vast_get_info/{id}',
{
'POST': [contego_controller, '_vast_get_info']
}
),
('/contego_vast_instance/{id}',
{
'POST': [contego_controller, '_vast_instance']
}
),
('/contego_vast_data_url/{id}',
{
'POST': [contego_controller, '_vast_data_url']
}
),
('/contego_vast_data_transfer/{id}',
{
'POST': [contego_controller, '_vast_data_transfer']
}
),
('/contego_vast_check_prev_snapshot/{id}',
{
'POST': [contego_controller, '_vast_check_prev_snapshot']
}
),
('/contego_vast_async_task_status/{id}',
{
'POST': [contego_controller, '_vast_async_task_status']
}
),
('/contego_vast_finalize/{id}',
{
'POST': [contego_controller, '_vast_finalize']
}
),
('/contego_vast_reset/{id}',
{
'POST': [contego_controller, '_vast_reset']
}
),
('/contego_vast_commit_image/{id}',
{
'POST': [contego_controller, '_vast_commit_image']
}
),
('/contego_map_snapshot_files/{id}',
{
'POST': [contego_controller, '_map_snapshot_files']
}
),
('/contego_copy_backup_image_to_volume/{id}',
{
'POST': [contego_controller, '_copy_backup_image_to_volume']
}
),
('/contego_vast_config_backup/{id}',
{
'POST': [contego_controller, '_vast_config_backup']
}
),
('/contego_validate_database_creds/{id}',
{
'POST': [contego_controller, '_validate_database_creds']
}
),
('/contego_validate_trusted_user_and_key/{id}',
{
'POST': [contego_controller, '_validate_trusted_user_and_key']
}
),
('/contego_get_controller_nodes/{id}',
{
'POST': [contego_controller, '_get_controller_nodes']
}
),
('/contego_vast_disk_check/{id}',
{
'POST': [contego_controller, '_vast_disk_check']
}
),
('/os-services',
{
'GET': [contego_controller, 'index']
}
),
#('/contego_vast_prepare/{id}', {
##'GET': [contego_controller, '_vast_prepare'],
#'POST': [contego_controller, '_vast_prepare']
#}),
#('/basic', {
#'GET': [basic_controller, 'index'],
#'POST': [basic_controller, 'create']
#}),
#('', '/'),
#('/', {
#'GET': [version_controller, 'show']
#}),
#('/versions/{id}', {
#'GET': [version_controller, 'show']
#}),
#('/extensions', {
#'GET': [extensions_controller, 'index'],
#('/servers/{id}', {
#'GET': [server_controller, 'show'],
#'PUT': [server_controller, 'update'],
#'DELETE': [server_controller, 'delete']
)
class APIRouterV2(base_wsgi.Router):
"""Routes requests on the OpenStack API to the appropriate controller
and method. The URL mapping based on the plain list `ROUTE_LIST` is built
at here.
"""
def __init__(self, custom_routes=None):
""":param custom_routes: the additional routes can be added by this
parameter. This parameter is used to test on some fake routes
primarily.
"""
#
super(APIRouterV2, self).__init__(dmapi.api.openstack.ProjectMapper())
if custom_routes is None:
custom_routes = tuple()
for path, methods in ROUTE_LIST + custom_routes:
# NOTE(alex_xu): The variable 'methods' is a dict in normal, since
# the dict includes all the methods supported in the path. But
# if the variable 'method' is a string, it means a redirection.
# For example, the request to the '' will be redirect to the '/' in
# the Contego API. To indicate that, using the target path instead of
# a dict. The route entry just writes as "('', '/)".
if isinstance(methods, str):
self.map.redirect(path, methods)
continue
for method, controller_info in list(methods.items()):
# TODO(alex_xu): In the end, I want to create single controller
# instance instead of create controller instance for each
# route.
controller = controller_info[0]()
action = controller_info[1]
self.map.create_route(path, method, controller, action)
@classmethod
def factory(cls, global_config, **local_config):
"""Simple paste factory, :class:`contego.wsgi.Router` doesn't have one."""
return cls()