Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
dmapi / usr / lib / python2.7 / dist-packages / dmapi / api / openstack / dm / routes.py
Size: Mime:
# 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()