Merge "Port manage/unmanage extensions to core API"

This commit is contained in:
Jenkins 2015-11-06 23:24:16 +00:00 committed by Gerrit Code Review
commit 82e38ad2fa
7 changed files with 45 additions and 48 deletions

View File

@ -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",

View File

@ -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'],

View File

@ -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())

View File

@ -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())

View File

@ -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),

View File

@ -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)

View File

@ -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": "",