From 3dc1cc6c50924383d30b3ddc8ced389cc691b7ca Mon Sep 17 00:00:00 2001 From: Alexei Kornienko Date: Thu, 27 Jun 2013 10:52:45 +0300 Subject: Port flavor_disabled extension to v3 API Part 2 Ports the flavor_disabled extension and the corresponding unittests to the v3 framework. Partially implements blueprint nova-v3-api Change-Id: I8af3f69ebc0584b79499e2695d6120c7c0833d24 --- etc/nova/policy.json | 1 + .../compute/plugins/v3/flavor_disabled.py | 26 ++++++++++++---------- .../compute/plugins/v3/test_flavor_disabled.py | 25 +++++++++------------ nova/tests/fake_policy.py | 1 + setup.cfg | 1 + 5 files changed, 27 insertions(+), 27 deletions(-) diff --git a/etc/nova/policy.json b/etc/nova/policy.json index d37ee60a4..7c563b936 100644 --- a/etc/nova/policy.json +++ b/etc/nova/policy.json @@ -59,6 +59,7 @@ "compute_extension:flavor_access": "", "compute_extension:v3:os-flavor-access": "", "compute_extension:flavor_disabled": "", + "compute_extension:v3:os-flavor-disabled": "", "compute_extension:flavor_rxtx": "", "compute_extension:flavor_swap": "", "compute_extension:flavorextradata": "", diff --git a/nova/api/openstack/compute/plugins/v3/flavor_disabled.py b/nova/api/openstack/compute/plugins/v3/flavor_disabled.py index 62f902409..79f6df9ce 100644 --- a/nova/api/openstack/compute/plugins/v3/flavor_disabled.py +++ b/nova/api/openstack/compute/plugins/v3/flavor_disabled.py @@ -18,15 +18,15 @@ from nova.api.openstack import extensions from nova.api.openstack import wsgi from nova.api.openstack import xmlutil - -authorize = extensions.soft_extension_authorizer('compute', 'flavor_disabled') +ALIAS = 'os-flavor-disabled' +authorize = extensions.soft_extension_authorizer('compute', 'v3:' + ALIAS) class FlavorDisabledController(wsgi.Controller): def _extend_flavors(self, req, flavors): for flavor in flavors: db_flavor = req.get_db_flavor(flavor['id']) - key = "%s:disabled" % Flavor_disabled.alias + key = "%s:disabled" % FlavorDisabled.alias flavor[key] = db_flavor['disabled'] def _show(self, req, resp_obj): @@ -52,24 +52,26 @@ class FlavorDisabledController(wsgi.Controller): self._extend_flavors(req, list(resp_obj.obj['flavors'])) -class Flavor_disabled(extensions.ExtensionDescriptor): +class FlavorDisabled(extensions.V3APIExtensionBase): """Support to show the disabled status of a flavor.""" name = "FlavorDisabled" - alias = "OS-FLV-DISABLED" - namespace = ("http://docs.openstack.org/compute/ext/" - "flavor_disabled/api/v1.1") - updated = "2012-08-29T00:00:00+00:00" + alias = ALIAS + namespace = "http://docs.openstack.org/compute/ext/%s/api/v3" % ALIAS + version = 1 def get_controller_extensions(self): controller = FlavorDisabledController() extension = extensions.ControllerExtension(self, 'flavors', controller) return [extension] + def get_resources(self): + return [] + def make_flavor(elem): - elem.set('{%s}disabled' % Flavor_disabled.namespace, - '%s:disabled' % Flavor_disabled.alias) + elem.set('{%s}disabled' % FlavorDisabled.namespace, + '%s:disabled' % FlavorDisabled.alias) class FlavorDisabledTemplate(xmlutil.TemplateBuilder): @@ -77,7 +79,7 @@ class FlavorDisabledTemplate(xmlutil.TemplateBuilder): root = xmlutil.TemplateElement('flavor', selector='flavor') make_flavor(root) return xmlutil.SlaveTemplate(root, 1, nsmap={ - Flavor_disabled.alias: Flavor_disabled.namespace}) + FlavorDisabled.alias: FlavorDisabled.namespace}) class FlavorsDisabledTemplate(xmlutil.TemplateBuilder): @@ -86,4 +88,4 @@ class FlavorsDisabledTemplate(xmlutil.TemplateBuilder): elem = xmlutil.SubTemplateElement(root, 'flavor', selector='flavors') make_flavor(elem) return xmlutil.SlaveTemplate(root, 1, nsmap={ - Flavor_disabled.alias: Flavor_disabled.namespace}) + FlavorDisabled.alias: FlavorDisabled.namespace}) diff --git a/nova/tests/api/openstack/compute/plugins/v3/test_flavor_disabled.py b/nova/tests/api/openstack/compute/plugins/v3/test_flavor_disabled.py index e46e02a44..5ff7f4035 100644 --- a/nova/tests/api/openstack/compute/plugins/v3/test_flavor_disabled.py +++ b/nova/tests/api/openstack/compute/plugins/v3/test_flavor_disabled.py @@ -15,7 +15,7 @@ from lxml import etree import webob -from nova.api.openstack.compute.contrib import flavor_disabled +from nova.api.openstack.compute.plugins.v3 import flavor_disabled from nova.compute import flavors from nova.openstack.common import jsonutils from nova import test @@ -49,13 +49,10 @@ def fake_flavor_get_all(*args, **kwargs): class FlavorDisabledTest(test.TestCase): content_type = 'application/json' - prefix = '%s:' % flavor_disabled.Flavor_disabled.alias + prefix = '%s:' % flavor_disabled.FlavorDisabled.alias def setUp(self): super(FlavorDisabledTest, self).setUp() - ext = ('nova.api.openstack.compute.contrib' - '.flavor_disabled.Flavor_disabled') - self.flags(osapi_compute_extension=[ext]) fakes.stub_out_nw_api(self.stubs) self.stubs.Set(flavors, "get_all_flavors", fake_flavor_get_all) @@ -66,8 +63,9 @@ class FlavorDisabledTest(test.TestCase): def _make_request(self, url): req = webob.Request.blank(url) req.headers['Accept'] = self.content_type - res = req.get_response(fakes.wsgi_app()) - return res + app = fakes.wsgi_app_v3(init_only=('servers', 'flavors', + 'os-flavor-disabled')) + return req.get_response(app) def _get_flavor(self, body): return jsonutils.loads(body).get('flavor') @@ -79,17 +77,14 @@ class FlavorDisabledTest(test.TestCase): self.assertEqual(str(flavor.get('%sdisabled' % self.prefix)), disabled) def test_show(self): - url = '/v2/fake/flavors/1' - res = self._make_request(url) - - self.assertEqual(res.status_int, 200) + res = self._make_request('/v3/flavors/1') + self.assertEqual(res.status_int, 200, res.body) self.assertFlavorDisabled(self._get_flavor(res.body), 'False') def test_detail(self): - url = '/v2/fake/flavors/detail' - res = self._make_request(url) + res = self._make_request('/v3/flavors/detail') - self.assertEqual(res.status_int, 200) + self.assertEqual(res.status_int, 200, res.body) flavors = self._get_flavors(res.body) self.assertFlavorDisabled(flavors[0], 'False') self.assertFlavorDisabled(flavors[1], 'True') @@ -97,7 +92,7 @@ class FlavorDisabledTest(test.TestCase): class FlavorDisabledXmlTest(FlavorDisabledTest): content_type = 'application/xml' - prefix = '{%s}' % flavor_disabled.Flavor_disabled.namespace + prefix = '{%s}' % flavor_disabled.FlavorDisabled.namespace def _get_flavor(self, body): return etree.XML(body) diff --git a/nova/tests/fake_policy.py b/nova/tests/fake_policy.py index bbde1787a..da43115d0 100644 --- a/nova/tests/fake_policy.py +++ b/nova/tests/fake_policy.py @@ -135,6 +135,7 @@ policy_data = """ "compute_extension:flavor_access": "", "compute_extension:v3:os-flavor-access": "", "compute_extension:flavor_disabled": "", + "compute_extension:v3:os-flavor-disabled": "", "compute_extension:flavor_rxtx": "", "compute_extension:flavor_swap": "", "compute_extension:flavorextradata": "", diff --git a/setup.cfg b/setup.cfg index 5b52a5464..3d90a8a44 100644 --- a/setup.cfg +++ b/setup.cfg @@ -61,6 +61,7 @@ nova.api.v3.extensions = fixed_ips = nova.api.openstack.compute.plugins.v3.fixed_ips:FixedIPs flavors = nova.api.openstack.compute.plugins.v3.flavors:Flavors flavor_access = nova.api.openstack.compute.plugins.v3.flavor_access:FlavorAccess + flavor_disabled = nova.api.openstack.compute.plugins.v3.flavor_disabled:FlavorDisabled ips = nova.api.openstack.compute.plugins.v3.ips:IPs keypairs = nova.api.openstack.compute.plugins.v3.keypairs:Keypairs quota_sets = nova.api.openstack.compute.plugins.v3.quota_sets:QuotaSets -- cgit