Merge "Port manage/unmanage extensions to core API"
This commit is contained in:
commit
82e38ad2fa
|
@ -28,6 +28,8 @@
|
||||||
"share:delete_share_metadata": "rule:default",
|
"share:delete_share_metadata": "rule:default",
|
||||||
"share:update_share_metadata": "rule:default",
|
"share:update_share_metadata": "rule:default",
|
||||||
"share:migrate": "rule:admin_api",
|
"share:migrate": "rule:admin_api",
|
||||||
|
"share:manage": "rule:admin_api",
|
||||||
|
"share:unmanage": "rule:admin_api",
|
||||||
|
|
||||||
"share_type:index": "rule:default",
|
"share_type:index": "rule:default",
|
||||||
"share_type:show": "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:addProjectAccess": "rule:admin_api",
|
||||||
"share_extension:share_type_access:removeProjectAccess": "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:create": "rule:default",
|
||||||
"security_service:delete": "rule:default",
|
"security_service:delete": "rule:default",
|
||||||
"security_service:update": "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 scheduler_stats
|
||||||
from manila.api.v1 import security_service
|
from manila.api.v1 import security_service
|
||||||
from manila.api.v1 import share_instances
|
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_metadata
|
||||||
from manila.api.v1 import share_networks
|
from manila.api.v1 import share_networks
|
||||||
from manila.api.v1 import share_servers
|
from manila.api.v1 import share_servers
|
||||||
from manila.api.v1 import share_snapshots
|
from manila.api.v1 import share_snapshots
|
||||||
from manila.api.v1 import share_types
|
from manila.api.v1 import share_types
|
||||||
|
from manila.api.v1 import share_unmanage
|
||||||
from manila.api.v1 import shares
|
from manila.api.v1 import shares
|
||||||
from manila.api import versions
|
from manila.api import versions
|
||||||
|
|
||||||
|
@ -65,6 +67,21 @@ class APIRouter(manila.api.openstack.APIRouter):
|
||||||
"os-availability-zone",
|
"os-availability-zone",
|
||||||
controller=self.resources["availability_zones"])
|
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()
|
self.resources['shares'] = shares.create_resource()
|
||||||
mapper.resource("share", "shares",
|
mapper.resource("share", "shares",
|
||||||
controller=self.resources['shares'],
|
controller=self.resources['shares'],
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
import six
|
import six
|
||||||
from webob import exc
|
from webob import exc
|
||||||
|
|
||||||
from manila.api import extensions
|
|
||||||
from manila.api.openstack import wsgi
|
from manila.api.openstack import wsgi
|
||||||
from manila.api.views import shares as share_views
|
from manila.api.views import shares as share_views
|
||||||
from manila import exception
|
from manila import exception
|
||||||
|
@ -25,20 +24,22 @@ from manila.share import share_types
|
||||||
from manila.share import utils as share_utils
|
from manila.share import utils as share_utils
|
||||||
from manila import utils
|
from manila import utils
|
||||||
|
|
||||||
authorize = extensions.extension_authorizer('share', 'manage')
|
|
||||||
|
|
||||||
|
|
||||||
class ShareManageController(wsgi.Controller):
|
class ShareManageController(wsgi.Controller):
|
||||||
|
"""Allows existing share to be 'managed' by Manila."""
|
||||||
|
|
||||||
|
resource_name = "share"
|
||||||
_view_builder_class = share_views.ViewBuilder
|
_view_builder_class = share_views.ViewBuilder
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(ShareManageController, self).__init__(*args, **kwargs)
|
super(self.__class__, self).__init__(*args, **kwargs)
|
||||||
self.share_api = share.API()
|
self.share_api = share.API()
|
||||||
|
|
||||||
def create(self, req, body):
|
def create(self, req, body):
|
||||||
|
# TODO(vponomaryov): move it to shares controller.
|
||||||
|
|
||||||
context = req.environ['manila.context']
|
context = req.environ['manila.context']
|
||||||
authorize(context)
|
self.authorize(req.environ['manila.context'], 'manage')
|
||||||
share_data = self._validate_manage_parameters(context, body)
|
share_data = self._validate_manage_parameters(context, body)
|
||||||
|
|
||||||
# NOTE(vponomaryov): compatibility actions are required between API and
|
# 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")
|
msg = _("Share entity not found in request body")
|
||||||
raise exc.HTTPUnprocessableEntity(explanation=msg)
|
raise exc.HTTPUnprocessableEntity(explanation=msg)
|
||||||
|
|
||||||
required_parameters = ['export_path', 'service_host', 'protocol']
|
required_parameters = ('export_path', 'service_host', 'protocol')
|
||||||
|
|
||||||
data = body['share']
|
data = body['share']
|
||||||
|
|
||||||
|
@ -115,15 +116,5 @@ class ShareManageController(wsgi.Controller):
|
||||||
raise exc.HTTPNotFound(explanation=six.text_type(e))
|
raise exc.HTTPNotFound(explanation=six.text_type(e))
|
||||||
|
|
||||||
|
|
||||||
class Share_manage(extensions.ExtensionDescriptor):
|
def create_resource():
|
||||||
"""Allows existing share to be 'managed' by Manila."""
|
return wsgi.Resource(ShareManageController())
|
||||||
|
|
||||||
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]
|
|
|
@ -17,29 +17,30 @@ import six
|
||||||
import webob
|
import webob
|
||||||
from webob import exc
|
from webob import exc
|
||||||
|
|
||||||
from manila.api import extensions
|
|
||||||
from manila.api.openstack import wsgi
|
from manila.api.openstack import wsgi
|
||||||
from manila.common import constants
|
from manila.common import constants
|
||||||
from manila import exception
|
from manila import exception
|
||||||
from manila.i18n import _
|
from manila.i18n import _, _LI
|
||||||
from manila.i18n import _LI
|
|
||||||
from manila import share
|
from manila import share
|
||||||
|
|
||||||
authorize = extensions.extension_authorizer('share', 'unmanage')
|
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class ShareUnmanageController(wsgi.Controller):
|
class ShareUnmanageController(wsgi.Controller):
|
||||||
|
"""The Unmanage API controller for the OpenStack API."""
|
||||||
|
|
||||||
|
resource_name = "share"
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(ShareUnmanageController, self).__init__(*args, **kwargs)
|
super(self.__class__, self).__init__(*args, **kwargs)
|
||||||
self.share_api = share.API()
|
self.share_api = share.API()
|
||||||
|
|
||||||
@wsgi.action('create')
|
@wsgi.action("unmanage")
|
||||||
def unmanage(self, req, id):
|
def unmanage(self, req, id):
|
||||||
"""Unmanage a share."""
|
"""Unmanage a share."""
|
||||||
|
# TODO(vponomaryov): move it to shares controller as 'unmanage' action.
|
||||||
context = req.environ['manila.context']
|
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)
|
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)
|
return webob.Response(status_int=202)
|
||||||
|
|
||||||
|
|
||||||
class Share_unmanage(extensions.ExtensionDescriptor):
|
def create_resource():
|
||||||
"""Enable share unmanage operation."""
|
return wsgi.Resource(ShareUnmanageController())
|
||||||
|
|
||||||
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]
|
|
|
@ -17,7 +17,7 @@ import ddt
|
||||||
import mock
|
import mock
|
||||||
import webob
|
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.db import api as db_api
|
||||||
from manila import exception
|
from manila import exception
|
||||||
from manila.share import api as share_api
|
from manila.share import api as share_api
|
||||||
|
@ -165,7 +165,7 @@ class ShareManageTest(test.TestCase):
|
||||||
def test_wrong_permissions(self):
|
def test_wrong_permissions(self):
|
||||||
body = get_fake_manage_body()
|
body = get_fake_manage_body()
|
||||||
|
|
||||||
self.assertRaises(exception.PolicyNotAuthorized,
|
self.assertRaises(webob.exc.HTTPForbidden,
|
||||||
self.controller.create,
|
self.controller.create,
|
||||||
fakes.HTTPRequest.blank('/share/manage',
|
fakes.HTTPRequest.blank('/share/manage',
|
||||||
use_admin_context=False),
|
use_admin_context=False),
|
|
@ -17,7 +17,7 @@ import ddt
|
||||||
import mock
|
import mock
|
||||||
import webob
|
import webob
|
||||||
|
|
||||||
from manila.api.contrib import share_unmanage
|
from manila.api.v1 import share_unmanage
|
||||||
from manila.common import constants
|
from manila.common import constants
|
||||||
from manila import exception
|
from manila import exception
|
||||||
from manila.share import api as share_api
|
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,
|
req = fakes.HTTPRequest.blank('/share/%s/unmanage' % share_id,
|
||||||
use_admin_context=False)
|
use_admin_context=False)
|
||||||
|
|
||||||
self.assertRaises(exception.PolicyNotAuthorized,
|
self.assertRaises(webob.exc.HTTPForbidden,
|
||||||
self.controller.unmanage,
|
self.controller.unmanage,
|
||||||
req,
|
req,
|
||||||
share_id)
|
share_id)
|
|
@ -19,6 +19,8 @@
|
||||||
"share:get_all_snapshots": "",
|
"share:get_all_snapshots": "",
|
||||||
"share:extend": "",
|
"share:extend": "",
|
||||||
"share:shrink": "",
|
"share:shrink": "",
|
||||||
|
"share:manage": "rule:admin_api",
|
||||||
|
"share:unmanage": "rule:admin_api",
|
||||||
|
|
||||||
"share_type:index": "rule:default",
|
"share_type:index": "rule:default",
|
||||||
"share_type:show": "rule:default",
|
"share_type:show": "rule:default",
|
||||||
|
@ -58,8 +60,6 @@
|
||||||
"share_extension:share_type_access": "",
|
"share_extension:share_type_access": "",
|
||||||
"share_extension:share_type_access:addProjectAccess": "rule:admin_api",
|
"share_extension:share_type_access:addProjectAccess": "rule:admin_api",
|
||||||
"share_extension:share_type_access:removeProjectAccess": "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": "",
|
"share_extension:availability_zones": "",
|
||||||
|
|
||||||
"security_service:index": "",
|
"security_service:index": "",
|
||||||
|
|
Loading…
Reference in New Issue