]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Revert "Add action extensions to support nova integration."
authorJohn Griffith <john.griffith@solidfire.com>
Wed, 13 Jun 2012 17:51:37 +0000 (17:51 +0000)
committerGerrit Code Review <review@openstack.org>
Wed, 13 Jun 2012 17:51:37 +0000 (17:51 +0000)
This reverts commit 8d8903f466cd7d4270e46ad896817fe94c99b575

cinder/api/openstack/volume/__init__.py
cinder/api/openstack/volume/contrib/volume_actions.py [deleted file]
cinder/tests/api/openstack/fakes.py
cinder/tests/api/openstack/volume/contrib/test_volume_actions.py [deleted file]
cinder/volume/manager.py

index 1b85ed906d03c95130f6ade2742cf02b9b145161..2d9ac302bd83181cf93451cae6563b24ddbe61be 100644 (file)
@@ -50,8 +50,7 @@ class APIRouter(cinder.api.openstack.APIRouter):
         self.resources['volumes'] = volumes.create_resource()
         mapper.resource("volume", "volumes",
                         controller=self.resources['volumes'],
-                        collection={'detail': 'GET'},
-                        member={'action': 'POST'})
+                        collection={'detail': 'GET'})
 
         self.resources['types'] = types.create_resource()
         mapper.resource("type", "types",
diff --git a/cinder/api/openstack/volume/contrib/volume_actions.py b/cinder/api/openstack/volume/contrib/volume_actions.py
deleted file mode 100644 (file)
index 1610002..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-#   Copyright 2012 OpenStack, LLC.
-#
-#   Licensed under the Apache License, Version 2.0 (the "License"); you may
-#   not use this file except in compliance with the License. You may obtain
-#   a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#   License for the specific language governing permissions and limitations
-#   under the License.
-
-import os.path
-import traceback
-
-import webob
-from webob import exc
-
-from cinder.api.openstack import common
-from cinder.api.openstack import extensions
-from cinder.api.openstack import wsgi
-from cinder import volume
-from cinder import exception
-from cinder import flags
-from cinder import log as logging
-
-
-FLAGS = flags.FLAGS
-LOG = logging.getLogger(__name__)
-
-
-def authorize(context, action_name):
-    action = 'volume_actions:%s' % action_name
-    extensions.extension_authorizer('volume', action)(context)
-
-
-class VolumeActionsController(wsgi.Controller):
-    def __init__(self, *args, **kwargs):
-        super(VolumeActionsController, self).__init__(*args, **kwargs)
-        self.volume_api = volume.API()
-
-    @wsgi.action('os-attach')
-    def _attach(self, req, id, body):
-        """Add attachment metadata."""
-        context = req.environ['cinder.context']
-        volume = self.volume_api.get(context, id)
-
-        instance_uuid = body['os-attach']['instance_uuid']
-        mountpoint = body['os-attach']['mountpoint']
-
-        self.volume_api.attach(context, volume,
-                               instance_uuid, mountpoint)
-        return webob.Response(status_int=202)
-
-    @wsgi.action('os-detach')
-    def _detach(self, req, id, body):
-        """Clear attachment metadata."""
-        context = req.environ['cinder.context']
-        volume = self.volume_api.get(context, id)
-        self.volume_api.detach(context, volume)
-        return webob.Response(status_int=202)
-
-    @wsgi.action('os-reserve')
-    def _reserve(self, req, id, body):
-        """Mark volume as reserved."""
-        context = req.environ['cinder.context']
-        volume = self.volume_api.get(context, id)
-        self.volume_api.reserve_volume(context, volume)
-        return webob.Response(status_int=202)
-
-    @wsgi.action('os-unreserve')
-    def _unreserve(self, req, id, body):
-        """Unmark volume as reserved."""
-        context = req.environ['cinder.context']
-        volume = self.volume_api.get(context, id)
-        self.volume_api.unreserve_volume(context, volume)
-        return webob.Response(status_int=202)
-
-    @wsgi.action('os-initialize_connection')
-    def _initialize_connection(self, req, id, body):
-        """Initialize volume attachment."""
-        context = req.environ['cinder.context']
-        volume = self.volume_api.get(context, id)
-        connector = body['os-initialize_connection']['connector']
-        info = self.volume_api.initialize_connection(context,
-                                                     volume,
-                                                     connector)
-        return {'connection_info': info}
-
-    @wsgi.action('os-terminate_connection')
-    def _terminate_connection(self, req, id, body):
-        """Terminate volume attachment."""
-        context = req.environ['cinder.context']
-        volume = self.volume_api.get(context, id)
-        connector = body['os-terminate_connection']['connector']
-        self.volume_api.terminate_connection(context, volume, connector)
-        return webob.Response(status_int=202)
-
-
-class Volume_actions(extensions.ExtensionDescriptor):
-    """Enable volume actions
-    """
-
-    name = "VolumeActions"
-    alias = "os-volume-actions"
-    namespace = "http://docs.openstack.org/volume/ext/volume-actions/api/v1.1"
-    updated = "2012-05-31T00:00:00+00:00"
-
-    def get_controller_extensions(self):
-        controller = VolumeActionsController()
-        extension = extensions.ControllerExtension(self, 'volumes', controller)
-        return [extension]
index 959606ffe801042fecaed408652ead79ac41b205..019acf62ea69028bb1cfd4b0511aab52f5cf714a 100644 (file)
@@ -26,7 +26,6 @@ from cinder.api import auth as api_auth
 from cinder.api import openstack as openstack_api
 from cinder.api.openstack import auth
 from cinder.api.openstack import urlmap
-from cinder.api.openstack import volume
 from cinder.api.openstack.volume import versions
 from cinder.api.openstack import wsgi as os_wsgi
 from cinder import context
@@ -61,27 +60,28 @@ def fake_wsgi(self, req):
     return self.application
 
 
-def wsgi_app(inner_app_v1=None, fake_auth=True, fake_auth_context=None,
+def wsgi_app(inner_app_v2=None, fake_auth=True, fake_auth_context=None,
         use_no_auth=False, ext_mgr=None):
-    if not inner_app_v1:
-        inner_app_v1 = volume.APIRouter(ext_mgr)
+    if not inner_app_v2:
+        inner_app_v2 = compute.APIRouter(ext_mgr)
 
     if fake_auth:
         if fake_auth_context is not None:
             ctxt = fake_auth_context
         else:
             ctxt = context.RequestContext('fake', 'fake', auth_token=True)
-        api_v1 = openstack_api.FaultWrapper(api_auth.InjectContext(ctxt,
-              inner_app_v1))
+        api_v2 = openstack_api.FaultWrapper(api_auth.InjectContext(ctxt,
+              limits.RateLimitingMiddleware(inner_app_v2)))
     elif use_no_auth:
-        api_v1 = openstack_api.FaultWrapper(auth.NoAuthMiddleware(
-              limits.RateLimitingMiddleware(inner_app_v1)))
+        api_v2 = openstack_api.FaultWrapper(auth.NoAuthMiddleware(
+              limits.RateLimitingMiddleware(inner_app_v2)))
     else:
-        api_v1 = openstack_api.FaultWrapper(auth.AuthMiddleware(
-              limits.RateLimitingMiddleware(inner_app_v1)))
+        api_v2 = openstack_api.FaultWrapper(auth.AuthMiddleware(
+              limits.RateLimitingMiddleware(inner_app_v2)))
 
     mapper = urlmap.URLMap()
-    mapper['/v1'] = api_v1
+    mapper['/v2'] = api_v2
+    mapper['/v1.1'] = api_v2
     mapper['/'] = openstack_api.FaultWrapper(versions.Versions())
     return mapper
 
@@ -122,7 +122,7 @@ class HTTPRequest(webob.Request):
 
     @classmethod
     def blank(cls, *args, **kwargs):
-        kwargs['base_url'] = 'http://localhost/v1'
+        kwargs['base_url'] = 'http://localhost/v2'
         use_admin_context = kwargs.pop('use_admin_context', False)
         out = webob.Request.blank(*args, **kwargs)
         out.environ['cinder.context'] = FakeRequestContext('fake_user', 'fake',
diff --git a/cinder/tests/api/openstack/volume/contrib/test_volume_actions.py b/cinder/tests/api/openstack/volume/contrib/test_volume_actions.py
deleted file mode 100644 (file)
index 5790220..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-#   Copyright 2012 OpenStack LLC.
-#
-#   Licensed under the Apache License, Version 2.0 (the "License"); you may
-#   not use this file except in compliance with the License. You may obtain
-#   a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#   Unless required by applicable law or agreed to in writing, software
-#   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#   License for the specific language governing permissions and limitations
-#   under the License.
-
-import datetime
-import json
-
-import webob
-
-from cinder.api.openstack import volume as volume_api
-from cinder import volume
-from cinder import context
-from cinder import exception
-from cinder import flags
-from cinder import test
-from cinder.tests.api.openstack import fakes
-from cinder import utils
-
-
-FLAGS = flags.FLAGS
-
-
-def fake_volume_api(*args, **kwargs):
-    return True
-
-
-def fake_volume_get(*args, **kwargs):
-    return {'id': 'fake', 'host': 'fake'}
-
-
-class VolumeActionsTest(test.TestCase):
-
-    _actions = ('os-detach', 'os-reserve', 'os-unreserve')
-
-    _methods = ('attach', 'detach', 'reserve_volume', 'unreserve_volume')
-
-    def setUp(self):
-        super(VolumeActionsTest, self).setUp()
-        self.stubs.Set(volume.API, 'get', fake_volume_api)
-        self.UUID = utils.gen_uuid()
-        for _method in self._methods:
-            self.stubs.Set(volume.API, _method, fake_volume_api)
-
-        self.stubs.Set(volume.API, 'get', fake_volume_get)
-
-    def test_simple_api_actions(self):
-        app = fakes.wsgi_app()
-        for _action in self._actions:
-            req = webob.Request.blank('/v1/fake/volumes/%s/action' %
-                    self.UUID)
-            req.method = 'POST'
-            req.body = json.dumps({_action: None})
-            req.content_type = 'application/json'
-            res = req.get_response(app)
-            self.assertEqual(res.status_int, 202)
-
-    def test_initialize_connection(self):
-        def fake_initialize_connection(*args, **kwargs):
-            return {}
-        self.stubs.Set(volume.API, 'initialize_connection',
-                       fake_initialize_connection)
-
-        body = {'os-initialize_connection': {'connector': 'fake'}}
-        req = webob.Request.blank('/v1/fake/volumes/1/action')
-        req.method = "POST"
-        req.body = json.dumps(body)
-        req.headers["content-type"] = "application/json"
-
-        res = req.get_response(fakes.wsgi_app())
-        output = json.loads(res.body)
-        self.assertEqual(res.status_int, 200)
-
-    def test_terminate_connection(self):
-        def fake_terminate_connection(*args, **kwargs):
-            return {}
-        self.stubs.Set(volume.API, 'terminate_connection',
-                       fake_terminate_connection)
-
-        body = {'os-terminate_connection': {'connector': 'fake'}}
-        req = webob.Request.blank('/v1/fake/volumes/1/action')
-        req.method = "POST"
-        req.body = json.dumps(body)
-        req.headers["content-type"] = "application/json"
-
-        res = req.get_response(fakes.wsgi_app())
-        self.assertEqual(res.status_int, 202)
-
-    def test_attach(self):
-        body = {'os-attach': {'instance_uuid': 'fake',
-                              'mountpoint': '/dev/vdc'}}
-        req = webob.Request.blank('/v1/fake/volumes/1/action')
-        req.method = "POST"
-        req.body = json.dumps(body)
-        req.headers["content-type"] = "application/json"
-
-        res = req.get_response(fakes.wsgi_app())
-        self.assertEqual(res.status_int, 202)
index d4f6ab592cf05e5adc3a3089cc08fd6a4207e03a..b53eb5b14e82d38a69af8bc6170bb061cce7aa33 100644 (file)
@@ -230,11 +230,10 @@ class VolumeManager(manager.SchedulerDependentManager):
     def attach_volume(self, context, volume_id, instance_uuid, mountpoint):
         """Updates db to show volume is attached"""
         # TODO(vish): refactor this into a more general "reserve"
-        # TODO(sleepsonthefloor): Is this 'elevated' appropriate?
         if not utils.is_uuid_like(instance_uuid):
             raise exception.InvalidUUID(instance_uuid)
 
-        self.db.volume_attached(context.elevated(),
+        self.db.volume_attached(context,
                                 volume_id,
                                 instance_uuid,
                                 mountpoint)
@@ -242,8 +241,7 @@ class VolumeManager(manager.SchedulerDependentManager):
     def detach_volume(self, context, volume_id):
         """Updates db to show volume is detached"""
         # TODO(vish): refactor this into a more general "unreserve"
-        # TODO(sleepsonthefloor): Is this 'elevated' appropriate?
-        self.db.volume_detached(context.elevated(), volume_id)
+        self.db.volume_detached(context, volume_id)
 
     def initialize_connection(self, context, volume_id, connector):
         """Prepare volume for connection from host represented by connector.