Port manage/unmanage extensions to core API
Changes: - Register manage/unmanage API extension as core API using old links. - Remove extensions code. - Leave rename of API urls for future update which will be done with bump of microversion after port of all extensions to core API. Partially implements bp ext-to-core Change-Id: I773398f13f4b3e4637599cb482a5a2c189958656
This commit is contained in:
parent
ab76c27b85
commit
0a6b19c1e1
etc/manila
manila
@ -28,6 +28,8 @@
|
||||
"share:delete_share_metadata": "rule:default",
|
||||
"share:update_share_metadata": "rule:default",
|
||||
"share:migrate": "rule:admin_api",
|
||||
"share:manage": "rule:admin_api",
|
||||
"share:unmanage": "rule:admin_api",
|
||||
|
||||
"share_type:index": "rule:default",
|
||||
"share_type:show": "rule:default",
|
||||
@ -62,9 +64,6 @@
|
||||
"share_extension:share_type_access:addProjectAccess": "rule:admin_api",
|
||||
"share_extension:share_type_access:removeProjectAccess": "rule:admin_api",
|
||||
|
||||
"share_extension:manage": "rule:admin_api",
|
||||
"share_extension:unmanage": "rule:admin_api",
|
||||
|
||||
"security_service:create": "rule:default",
|
||||
"security_service:delete": "rule:default",
|
||||
"security_service:update": "rule:default",
|
||||
|
@ -30,11 +30,13 @@ from manila.api.v1 import limits
|
||||
from manila.api.v1 import scheduler_stats
|
||||
from manila.api.v1 import security_service
|
||||
from manila.api.v1 import share_instances
|
||||
from manila.api.v1 import share_manage
|
||||
from manila.api.v1 import share_metadata
|
||||
from manila.api.v1 import share_networks
|
||||
from manila.api.v1 import share_servers
|
||||
from manila.api.v1 import share_snapshots
|
||||
from manila.api.v1 import share_types
|
||||
from manila.api.v1 import share_unmanage
|
||||
from manila.api.v1 import shares
|
||||
from manila.api import versions
|
||||
|
||||
@ -65,6 +67,21 @@ class APIRouter(manila.api.openstack.APIRouter):
|
||||
"os-availability-zone",
|
||||
controller=self.resources["availability_zones"])
|
||||
|
||||
self.resources["share_manage"] = share_manage.create_resource()
|
||||
mapper.resource("share_manage",
|
||||
# TODO(vponomaryov): remove it when it is ported
|
||||
# to shares controller.
|
||||
"os-share-manage",
|
||||
controller=self.resources["share_manage"])
|
||||
|
||||
self.resources["share_unmanage"] = share_unmanage.create_resource()
|
||||
mapper.resource("share_unmanage",
|
||||
# TODO(vponomaryov): remove it when it is ported
|
||||
# to shares controller.
|
||||
"os-share-unmanage",
|
||||
controller=self.resources["share_unmanage"],
|
||||
member={'unmanage': 'POST'})
|
||||
|
||||
self.resources['shares'] = shares.create_resource()
|
||||
mapper.resource("share", "shares",
|
||||
controller=self.resources['shares'],
|
||||
|
@ -15,7 +15,6 @@
|
||||
import six
|
||||
from webob import exc
|
||||
|
||||
from manila.api import extensions
|
||||
from manila.api.openstack import wsgi
|
||||
from manila.api.views import shares as share_views
|
||||
from manila import exception
|
||||
@ -25,20 +24,22 @@ from manila.share import share_types
|
||||
from manila.share import utils as share_utils
|
||||
from manila import utils
|
||||
|
||||
authorize = extensions.extension_authorizer('share', 'manage')
|
||||
|
||||
|
||||
class ShareManageController(wsgi.Controller):
|
||||
"""Allows existing share to be 'managed' by Manila."""
|
||||
|
||||
resource_name = "share"
|
||||
_view_builder_class = share_views.ViewBuilder
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(ShareManageController, self).__init__(*args, **kwargs)
|
||||
super(self.__class__, self).__init__(*args, **kwargs)
|
||||
self.share_api = share.API()
|
||||
|
||||
def create(self, req, body):
|
||||
# TODO(vponomaryov): move it to shares controller.
|
||||
|
||||
context = req.environ['manila.context']
|
||||
authorize(context)
|
||||
self.authorize(req.environ['manila.context'], 'manage')
|
||||
share_data = self._validate_manage_parameters(context, body)
|
||||
|
||||
# NOTE(vponomaryov): compatibility actions are required between API and
|
||||
@ -74,7 +75,7 @@ class ShareManageController(wsgi.Controller):
|
||||
msg = _("Share entity not found in request body")
|
||||
raise exc.HTTPUnprocessableEntity(explanation=msg)
|
||||
|
||||
required_parameters = ['export_path', 'service_host', 'protocol']
|
||||
required_parameters = ('export_path', 'service_host', 'protocol')
|
||||
|
||||
data = body['share']
|
||||
|
||||
@ -115,15 +116,5 @@ class ShareManageController(wsgi.Controller):
|
||||
raise exc.HTTPNotFound(explanation=six.text_type(e))
|
||||
|
||||
|
||||
class Share_manage(extensions.ExtensionDescriptor):
|
||||
"""Allows existing share to be 'managed' by Manila."""
|
||||
|
||||
name = 'ShareManage'
|
||||
alias = 'os-share-manage'
|
||||
updated = '2015-02-17T00:00:00+00:00'
|
||||
|
||||
def get_resources(self):
|
||||
controller = ShareManageController()
|
||||
res = extensions.ResourceExtension(Share_manage.alias,
|
||||
controller)
|
||||
return [res]
|
||||
def create_resource():
|
||||
return wsgi.Resource(ShareManageController())
|
@ -17,29 +17,30 @@ import six
|
||||
import webob
|
||||
from webob import exc
|
||||
|
||||
from manila.api import extensions
|
||||
from manila.api.openstack import wsgi
|
||||
from manila.common import constants
|
||||
from manila import exception
|
||||
from manila.i18n import _
|
||||
from manila.i18n import _LI
|
||||
from manila.i18n import _, _LI
|
||||
from manila import share
|
||||
|
||||
authorize = extensions.extension_authorizer('share', 'unmanage')
|
||||
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
|
||||
class ShareUnmanageController(wsgi.Controller):
|
||||
"""The Unmanage API controller for the OpenStack API."""
|
||||
|
||||
resource_name = "share"
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(ShareUnmanageController, self).__init__(*args, **kwargs)
|
||||
super(self.__class__, self).__init__(*args, **kwargs)
|
||||
self.share_api = share.API()
|
||||
|
||||
@wsgi.action('create')
|
||||
@wsgi.action("unmanage")
|
||||
def unmanage(self, req, id):
|
||||
"""Unmanage a share."""
|
||||
# TODO(vponomaryov): move it to shares controller as 'unmanage' action.
|
||||
context = req.environ['manila.context']
|
||||
authorize(context)
|
||||
self.authorize(req.environ['manila.context'], 'unmanage')
|
||||
|
||||
LOG.info(_LI("Unmanage share with id: %s"), id, context=context)
|
||||
|
||||
@ -71,16 +72,5 @@ class ShareUnmanageController(wsgi.Controller):
|
||||
return webob.Response(status_int=202)
|
||||
|
||||
|
||||
class Share_unmanage(extensions.ExtensionDescriptor):
|
||||
"""Enable share unmanage operation."""
|
||||
|
||||
name = 'ShareUnmanage'
|
||||
alias = 'os-share-unmanage'
|
||||
updated = '2015-02-17T00:00:00+00:00'
|
||||
|
||||
def get_resources(self):
|
||||
controller = ShareUnmanageController()
|
||||
res = extensions.ResourceExtension(Share_unmanage.alias,
|
||||
controller,
|
||||
member_actions={"unmanage": "POST"})
|
||||
return [res]
|
||||
def create_resource():
|
||||
return wsgi.Resource(ShareUnmanageController())
|
@ -17,7 +17,7 @@ import ddt
|
||||
import mock
|
||||
import webob
|
||||
|
||||
from manila.api.contrib import share_manage
|
||||
from manila.api.v1 import share_manage
|
||||
from manila.db import api as db_api
|
||||
from manila import exception
|
||||
from manila.share import api as share_api
|
||||
@ -165,7 +165,7 @@ class ShareManageTest(test.TestCase):
|
||||
def test_wrong_permissions(self):
|
||||
body = get_fake_manage_body()
|
||||
|
||||
self.assertRaises(exception.PolicyNotAuthorized,
|
||||
self.assertRaises(webob.exc.HTTPForbidden,
|
||||
self.controller.create,
|
||||
fakes.HTTPRequest.blank('/share/manage',
|
||||
use_admin_context=False),
|
@ -17,7 +17,7 @@ import ddt
|
||||
import mock
|
||||
import webob
|
||||
|
||||
from manila.api.contrib import share_unmanage
|
||||
from manila.api.v1 import share_unmanage
|
||||
from manila.common import constants
|
||||
from manila import exception
|
||||
from manila.share import api as share_api
|
||||
@ -140,7 +140,7 @@ class ShareUnmanageTest(test.TestCase):
|
||||
req = fakes.HTTPRequest.blank('/share/%s/unmanage' % share_id,
|
||||
use_admin_context=False)
|
||||
|
||||
self.assertRaises(exception.PolicyNotAuthorized,
|
||||
self.assertRaises(webob.exc.HTTPForbidden,
|
||||
self.controller.unmanage,
|
||||
req,
|
||||
share_id)
|
@ -19,6 +19,8 @@
|
||||
"share:get_all_snapshots": "",
|
||||
"share:extend": "",
|
||||
"share:shrink": "",
|
||||
"share:manage": "rule:admin_api",
|
||||
"share:unmanage": "rule:admin_api",
|
||||
|
||||
"share_type:index": "rule:default",
|
||||
"share_type:show": "rule:default",
|
||||
@ -58,8 +60,6 @@
|
||||
"share_extension:share_type_access": "",
|
||||
"share_extension:share_type_access:addProjectAccess": "rule:admin_api",
|
||||
"share_extension:share_type_access:removeProjectAccess": "rule:admin_api",
|
||||
"share_extension:manage": "rule:admin_api",
|
||||
"share_extension:unmanage": "rule:admin_api",
|
||||
"share_extension:availability_zones": "",
|
||||
|
||||
"security_service:index": "",
|
||||
|
Loading…
x
Reference in New Issue
Block a user