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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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