diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-09-03 00:44:07 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-09-03 00:44:07 +0000 |
| commit | 5f17495ac66dfaec329fa4484efba4bd57a625c2 (patch) | |
| tree | e38f6c0576fae7e06fc6f0be559bf777c2a6990f | |
| parent | ededf4159dbc8aed4afedbae746b115b54af4fd4 (diff) | |
| parent | 30d89919b557fb2e34953641be85eeaa84f06274 (diff) | |
| download | nova-5f17495ac66dfaec329fa4484efba4bd57a625c2.tar.gz nova-5f17495ac66dfaec329fa4484efba4bd57a625c2.tar.xz nova-5f17495ac66dfaec329fa4484efba4bd57a625c2.zip | |
Merge "Add extensions for flavor swap and rxtx_factor"
21 files changed, 449 insertions, 57 deletions
diff --git a/etc/nova/policy.json b/etc/nova/policy.json index 2704bdcd5..688918d66 100644 --- a/etc/nova/policy.json +++ b/etc/nova/policy.json @@ -37,6 +37,8 @@ "compute_extension:extended_status": [], "compute_extension:flavor_access": [], "compute_extension:flavor_disabled": [], + "compute_extension:flavor_rxtx": [], + "compute_extension:flavor_swap": [], "compute_extension:flavorextradata": [], "compute_extension:flavorextraspecs": [], "compute_extension:flavormanage": [["rule:admin_api"]], diff --git a/nova/api/openstack/compute/contrib/flavor_rxtx.py b/nova/api/openstack/compute/contrib/flavor_rxtx.py new file mode 100644 index 000000000..6dce1bee1 --- /dev/null +++ b/nova/api/openstack/compute/contrib/flavor_rxtx.py @@ -0,0 +1,87 @@ +# Copyright 2012 Nebula, Inc. +# +# 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. + +"""The Flavor Rxtx API extension.""" + +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_rxtx') + + +class FlavorRxtxController(wsgi.Controller): + def _extend_flavors(self, req, flavors): + for flavor in flavors: + db_flavor = req.get_db_flavor(flavor['id']) + key = 'rxtx_factor' + flavor[key] = db_flavor['rxtx_factor'] or "" + + def _show(self, req, resp_obj): + if not authorize(req.environ['nova.context']): + return + if 'flavor' in resp_obj.obj: + resp_obj.attach(xml=FlavorRxtxTemplate()) + self._extend_flavors(req, [resp_obj.obj['flavor']]) + + @wsgi.extends + def show(self, req, resp_obj, id): + return self._show(req, resp_obj) + + @wsgi.extends(action='create') + def create(self, req, resp_obj, body): + return self._show(req, resp_obj) + + @wsgi.extends + def detail(self, req, resp_obj): + if not authorize(req.environ['nova.context']): + return + resp_obj.attach(xml=FlavorsRxtxTemplate()) + self._extend_flavors(req, list(resp_obj.obj['flavors'])) + + +class Flavor_rxtx(extensions.ExtensionDescriptor): + """Support to show the rxtx status of a flavor""" + + name = "FlavorRxtx" + alias = "os-flavor-rxtx" + namespace = ("http://docs.openstack.org/compute/ext/" + "flavor_rxtx/api/v1.1") + updated = "2012-08-29T00:00:00+00:00" + + def get_controller_extensions(self): + controller = FlavorRxtxController() + extension = extensions.ControllerExtension(self, 'flavors', controller) + return [extension] + + +def make_flavor(elem): + # NOTE(vish): this was originally added without a namespace + elem.set('rxtx_factor', xmlutil.EmptyStringSelector('rxtx_factor')) + + +class FlavorRxtxTemplate(xmlutil.TemplateBuilder): + def construct(self): + root = xmlutil.TemplateElement('flavor', selector='flavor') + make_flavor(root) + return xmlutil.SlaveTemplate(root, 1) + + +class FlavorsRxtxTemplate(xmlutil.TemplateBuilder): + def construct(self): + root = xmlutil.TemplateElement('flavors') + elem = xmlutil.SubTemplateElement(root, 'flavor', selector='flavors') + make_flavor(elem) + return xmlutil.SlaveTemplate(root, 1) diff --git a/nova/api/openstack/compute/contrib/flavor_swap.py b/nova/api/openstack/compute/contrib/flavor_swap.py new file mode 100644 index 000000000..8e0277979 --- /dev/null +++ b/nova/api/openstack/compute/contrib/flavor_swap.py @@ -0,0 +1,87 @@ +# Copyright 2012 Nebula, Inc. +# +# 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. + +"""The Flavor Swap API extension.""" + +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_swap') + + +class FlavorSwapController(wsgi.Controller): + def _extend_flavors(self, req, flavors): + for flavor in flavors: + db_flavor = req.get_db_flavor(flavor['id']) + key = 'swap' + flavor[key] = db_flavor['swap'] or "" + + def _show(self, req, resp_obj): + if not authorize(req.environ['nova.context']): + return + if 'flavor' in resp_obj.obj: + resp_obj.attach(xml=FlavorSwapTemplate()) + self._extend_flavors(req, [resp_obj.obj['flavor']]) + + @wsgi.extends + def show(self, req, resp_obj, id): + return self._show(req, resp_obj) + + @wsgi.extends(action='create') + def create(self, req, resp_obj, body): + return self._show(req, resp_obj) + + @wsgi.extends + def detail(self, req, resp_obj): + if not authorize(req.environ['nova.context']): + return + resp_obj.attach(xml=FlavorsSwapTemplate()) + self._extend_flavors(req, list(resp_obj.obj['flavors'])) + + +class Flavor_swap(extensions.ExtensionDescriptor): + """Support to show the swap status of a flavor""" + + name = "FlavorSwap" + alias = "os-flavor-swap" + namespace = ("http://docs.openstack.org/compute/ext/" + "flavor_swap/api/v1.1") + updated = "2012-08-29T00:00:00+00:00" + + def get_controller_extensions(self): + controller = FlavorSwapController() + extension = extensions.ControllerExtension(self, 'flavors', controller) + return [extension] + + +def make_flavor(elem): + # NOTE(vish): this was originally added without a namespace + elem.set('swap', xmlutil.EmptyStringSelector('swap')) + + +class FlavorSwapTemplate(xmlutil.TemplateBuilder): + def construct(self): + root = xmlutil.TemplateElement('flavor', selector='flavor') + make_flavor(root) + return xmlutil.SlaveTemplate(root, 1) + + +class FlavorsSwapTemplate(xmlutil.TemplateBuilder): + def construct(self): + root = xmlutil.TemplateElement('flavors') + elem = xmlutil.SubTemplateElement(root, 'flavor', selector='flavors') + make_flavor(elem) + return xmlutil.SlaveTemplate(root, 1) diff --git a/nova/api/openstack/compute/flavors.py b/nova/api/openstack/compute/flavors.py index e04ade437..8aa57a2b1 100644 --- a/nova/api/openstack/compute/flavors.py +++ b/nova/api/openstack/compute/flavors.py @@ -31,9 +31,7 @@ def make_flavor(elem, detailed=False): if detailed: elem.set('ram') elem.set('disk') - - for attr in ("vcpus", "swap", "rxtx_factor"): - elem.set(attr, xmlutil.EmptyStringSelector(attr)) + elem.set('vcpus', xmlutil.EmptyStringSelector('vcpus')) xmlutil.make_links(elem, 'links') diff --git a/nova/api/openstack/compute/schemas/v1.1/flavor.rng b/nova/api/openstack/compute/schemas/v1.1/flavor.rng index 08746ce3d..a97a3a972 100644 --- a/nova/api/openstack/compute/schemas/v1.1/flavor.rng +++ b/nova/api/openstack/compute/schemas/v1.1/flavor.rng @@ -4,8 +4,6 @@ <attribute name="id"> <text/> </attribute> <attribute name="ram"> <text/> </attribute> <attribute name="disk"> <text/> </attribute> - <attribute name="rxtx_factor"> <text/> </attribute> - <attribute name="swap"> <text/> </attribute> <attribute name="vcpus"> <text/> </attribute> <zeroOrMore> <externalRef href="../atom-link.rng"/> diff --git a/nova/api/openstack/compute/views/flavors.py b/nova/api/openstack/compute/views/flavors.py index 2900ccf64..fbbe5c45e 100644 --- a/nova/api/openstack/compute/views/flavors.py +++ b/nova/api/openstack/compute/views/flavors.py @@ -41,8 +41,6 @@ class ViewBuilder(common.ViewBuilder): "ram": flavor["memory_mb"], "disk": flavor["root_gb"], "vcpus": flavor.get("vcpus") or "", - "swap": flavor.get("swap") or "", - "rxtx_factor": flavor.get("rxtx_factor") or "", "links": self._get_links(request, flavor["flavorid"], self._collection_name), diff --git a/nova/tests/api/openstack/compute/contrib/test_flavor_disabled.py b/nova/tests/api/openstack/compute/contrib/test_flavor_disabled.py index ab2066e38..1225b56b9 100644 --- a/nova/tests/api/openstack/compute/contrib/test_flavor_disabled.py +++ b/nova/tests/api/openstack/compute/contrib/test_flavor_disabled.py @@ -1,5 +1,4 @@ -# Copyright 2011 OpenStack LLC. -# All Rights Reserved. +# Copyright 2012 Nebula, Inc. # # 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 diff --git a/nova/tests/api/openstack/compute/contrib/test_flavor_rxtx.py b/nova/tests/api/openstack/compute/contrib/test_flavor_rxtx.py new file mode 100644 index 000000000..52163c700 --- /dev/null +++ b/nova/tests/api/openstack/compute/contrib/test_flavor_rxtx.py @@ -0,0 +1,109 @@ +# Copyright 2012 Nebula, Inc. +# +# 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. + +from lxml import etree +import webob + +from nova.compute import instance_types +from nova import flags +from nova.openstack.common import jsonutils +from nova import test +from nova.tests.api.openstack import fakes + + +FLAGS = flags.FLAGS + + +FAKE_FLAVORS = { + 'flavor 1': { + "flavorid": '1', + "name": 'flavor 1', + "memory_mb": '256', + "root_gb": '10', + "rxtx_factor": '1.0', + }, + 'flavor 2': { + "flavorid": '2', + "name": 'flavor 2', + "memory_mb": '512', + "root_gb": '10', + "rxtx_factor": None, + }, +} + + +def fake_instance_type_get_by_flavor_id(flavorid): + return FAKE_FLAVORS['flavor %s' % flavorid] + + +def fake_instance_type_get_all(*args, **kwargs): + return FAKE_FLAVORS + + +class FlavorRxtxTest(test.TestCase): + content_type = 'application/json' + prefix = '' + + def setUp(self): + super(FlavorRxtxTest, self).setUp() + ext = ('nova.api.openstack.compute.contrib' + '.flavor_rxtx.Flavor_rxtx') + self.flags(osapi_compute_extension=[ext]) + fakes.stub_out_nw_api(self.stubs) + self.stubs.Set(instance_types, "get_all_types", + fake_instance_type_get_all) + self.stubs.Set(instance_types, + "get_instance_type_by_flavor_id", + fake_instance_type_get_by_flavor_id) + + 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 + + def _get_flavor(self, body): + return jsonutils.loads(body).get('flavor') + + def _get_flavors(self, body): + return jsonutils.loads(body).get('flavors') + + def assertFlavorRxtx(self, flavor, rxtx): + self.assertEqual(str(flavor.get('%srxtx_factor' % self.prefix)), rxtx) + + def test_show(self): + url = '/v2/fake/flavors/1' + res = self._make_request(url) + + self.assertEqual(res.status_int, 200) + self.assertFlavorRxtx(self._get_flavor(res.body), '1.0') + + def test_detail(self): + url = '/v2/fake/flavors/detail' + res = self._make_request(url) + + self.assertEqual(res.status_int, 200) + flavors = self._get_flavors(res.body) + self.assertFlavorRxtx(flavors[0], '1.0') + self.assertFlavorRxtx(flavors[1], '') + + +class FlavorRxtxXmlTest(FlavorRxtxTest): + content_type = 'application/xml' + + def _get_flavor(self, body): + return etree.XML(body) + + def _get_flavors(self, body): + return etree.XML(body).getchildren() diff --git a/nova/tests/api/openstack/compute/contrib/test_flavor_swap.py b/nova/tests/api/openstack/compute/contrib/test_flavor_swap.py new file mode 100644 index 000000000..75e9cd76b --- /dev/null +++ b/nova/tests/api/openstack/compute/contrib/test_flavor_swap.py @@ -0,0 +1,109 @@ +# Copyright 2012 Nebula, Inc. +# +# 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. + +from lxml import etree +import webob + +from nova.compute import instance_types +from nova import flags +from nova.openstack.common import jsonutils +from nova import test +from nova.tests.api.openstack import fakes + + +FLAGS = flags.FLAGS + + +FAKE_FLAVORS = { + 'flavor 1': { + "flavorid": '1', + "name": 'flavor 1', + "memory_mb": '256', + "root_gb": '10', + "swap": 512, + }, + 'flavor 2': { + "flavorid": '2', + "name": 'flavor 2', + "memory_mb": '512', + "root_gb": '10', + "swap": None, + }, +} + + +def fake_instance_type_get_by_flavor_id(flavorid): + return FAKE_FLAVORS['flavor %s' % flavorid] + + +def fake_instance_type_get_all(*args, **kwargs): + return FAKE_FLAVORS + + +class FlavorSwapTest(test.TestCase): + content_type = 'application/json' + prefix = '' + + def setUp(self): + super(FlavorSwapTest, self).setUp() + ext = ('nova.api.openstack.compute.contrib' + '.flavor_swap.Flavor_swap') + self.flags(osapi_compute_extension=[ext]) + fakes.stub_out_nw_api(self.stubs) + self.stubs.Set(instance_types, "get_all_types", + fake_instance_type_get_all) + self.stubs.Set(instance_types, + "get_instance_type_by_flavor_id", + fake_instance_type_get_by_flavor_id) + + 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 + + def _get_flavor(self, body): + return jsonutils.loads(body).get('flavor') + + def _get_flavors(self, body): + return jsonutils.loads(body).get('flavors') + + def assertFlavorSwap(self, flavor, swap): + self.assertEqual(str(flavor.get('%sswap' % self.prefix)), swap) + + def test_show(self): + url = '/v2/fake/flavors/1' + res = self._make_request(url) + + self.assertEqual(res.status_int, 200) + self.assertFlavorSwap(self._get_flavor(res.body), '512') + + def test_detail(self): + url = '/v2/fake/flavors/detail' + res = self._make_request(url) + + self.assertEqual(res.status_int, 200) + flavors = self._get_flavors(res.body) + self.assertFlavorSwap(flavors[0], '512') + self.assertFlavorSwap(flavors[1], '') + + +class FlavorSwapXmlTest(FlavorSwapTest): + content_type = 'application/xml' + + def _get_flavor(self, body): + return etree.XML(body) + + def _get_flavors(self, body): + return etree.XML(body).getchildren() diff --git a/nova/tests/api/openstack/compute/contrib/test_flavorextradata.py b/nova/tests/api/openstack/compute/contrib/test_flavorextradata.py index 3f13f4c1d..8f5301a36 100644 --- a/nova/tests/api/openstack/compute/contrib/test_flavorextradata.py +++ b/nova/tests/api/openstack/compute/contrib/test_flavorextradata.py @@ -35,8 +35,6 @@ def fake_get_instance_type_by_flavor_id(flavorid): 'updated_at': None, 'memory_mb': 512, 'vcpus': 1, - 'swap': 512, - 'rxtx_factor': 1.0, 'extra_specs': {}, 'deleted_at': None, 'vcpu_weight': None, @@ -73,8 +71,6 @@ class FlavorextradataTest(test.TestCase): 'vcpus': 1, 'disk': 1, 'OS-FLV-EXT-DATA:ephemeral': 1, - 'swap': 512, - 'rxtx_factor': 1, } } @@ -94,8 +90,6 @@ class FlavorextradataTest(test.TestCase): 'vcpus': 1, 'disk': 1, 'OS-FLV-EXT-DATA:ephemeral': 1, - 'swap': 512, - 'rxtx_factor': 1, }, { 'id': '2', @@ -104,8 +98,6 @@ class FlavorextradataTest(test.TestCase): 'vcpus': 1, 'disk': 1, 'OS-FLV-EXT-DATA:ephemeral': 1, - 'swap': 512, - 'rxtx_factor': 1, }, ] diff --git a/nova/tests/api/openstack/compute/test_extensions.py b/nova/tests/api/openstack/compute/test_extensions.py index 0c4f90815..ef2f4eec4 100644 --- a/nova/tests/api/openstack/compute/test_extensions.py +++ b/nova/tests/api/openstack/compute/test_extensions.py @@ -171,6 +171,8 @@ class ExtensionControllerTest(ExtensionTestCase): "FlavorExtraSpecs", "FlavorExtraData", "FlavorManage", + "FlavorRxtx", + "FlavorSwap", "FloatingIps", "FloatingIpDns", "FloatingIpPools", diff --git a/nova/tests/api/openstack/compute/test_flavors.py b/nova/tests/api/openstack/compute/test_flavors.py index aaf929736..77d40df03 100644 --- a/nova/tests/api/openstack/compute/test_flavors.py +++ b/nova/tests/api/openstack/compute/test_flavors.py @@ -44,14 +44,12 @@ FAKE_FLAVORS = { "name": 'flavor 1', "memory_mb": '256', "root_gb": '10', - "disabled": False, }, 'flavor 2': { "flavorid": '2', "name": 'flavor 2', "memory_mb": '512', "root_gb": '20', - "disabled": False, }, } @@ -89,6 +87,7 @@ def return_instance_type_not_found(flavor_id): class FlavorsTest(test.TestCase): def setUp(self): super(FlavorsTest, self).setUp() + self.flags(osapi_compute_extension=[]) fakes.stub_out_networking(self.stubs) fakes.stub_out_rate_limiting(self.stubs) self.stubs.Set(nova.compute.instance_types, "get_all_types", @@ -116,8 +115,6 @@ class FlavorsTest(test.TestCase): "name": "flavor 1", "ram": "256", "disk": "10", - "rxtx_factor": "", - "swap": "", "vcpus": "", "links": [ { @@ -144,8 +141,6 @@ class FlavorsTest(test.TestCase): "name": "flavor 1", "ram": "256", "disk": "10", - "rxtx_factor": "", - "swap": "", "vcpus": "", "links": [ { @@ -314,8 +309,6 @@ class FlavorsTest(test.TestCase): "name": "flavor 1", "ram": "256", "disk": "10", - "rxtx_factor": "", - "swap": "", "vcpus": "", "links": [ { @@ -333,8 +326,6 @@ class FlavorsTest(test.TestCase): "name": "flavor 2", "ram": "512", "disk": "20", - "rxtx_factor": "", - "swap": "", "vcpus": "", "links": [ { @@ -434,8 +425,6 @@ class FlavorsTest(test.TestCase): "name": "flavor 2", "ram": "512", "disk": "20", - "rxtx_factor": "", - "swap": "", "vcpus": "", "links": [ { @@ -464,8 +453,6 @@ class FlavorsXMLSerializationTest(test.TestCase): "name": "asdf", "ram": "256", "disk": "10", - "rxtx_factor": "1", - "swap": "", "vcpus": "", "links": [ { @@ -481,7 +468,6 @@ class FlavorsXMLSerializationTest(test.TestCase): } output = serializer.serialize(fixture) - print output has_dec = output.startswith("<?xml version='1.0' encoding='UTF-8'?>") self.assertTrue(has_dec) @@ -494,8 +480,6 @@ class FlavorsXMLSerializationTest(test.TestCase): "name": "asdf", "ram": "256", "disk": "10", - "rxtx_factor": "1", - "swap": "", "vcpus": "", "links": [ { @@ -511,7 +495,6 @@ class FlavorsXMLSerializationTest(test.TestCase): } output = serializer.serialize(fixture) - print output root = etree.XML(output) xmlutil.validate_schema(root, 'flavor') flavor_dict = fixture['flavor'] @@ -534,8 +517,6 @@ class FlavorsXMLSerializationTest(test.TestCase): "name": "asdf", "ram": 256, "disk": 10, - "rxtx_factor": "1", - "swap": "", "vcpus": "", "links": [ { @@ -551,7 +532,6 @@ class FlavorsXMLSerializationTest(test.TestCase): } output = serializer.serialize(fixture) - print output root = etree.XML(output) xmlutil.validate_schema(root, 'flavor') flavor_dict = fixture['flavor'] @@ -575,8 +555,6 @@ class FlavorsXMLSerializationTest(test.TestCase): "name": "flavor 23", "ram": "512", "disk": "20", - "rxtx_factor": "1", - "swap": "", "vcpus": "", "links": [ { @@ -594,8 +572,6 @@ class FlavorsXMLSerializationTest(test.TestCase): "name": "flavor 13", "ram": "256", "disk": "10", - "rxtx_factor": "1", - "swap": "", "vcpus": "", "links": [ { @@ -612,7 +588,6 @@ class FlavorsXMLSerializationTest(test.TestCase): } output = serializer.serialize(fixture) - print output root = etree.XML(output) xmlutil.validate_schema(root, 'flavors') flavor_elems = root.findall('{0}flavor'.format(NS)) @@ -639,8 +614,6 @@ class FlavorsXMLSerializationTest(test.TestCase): "name": "flavor 23", "ram": "512", "disk": "20", - "rxtx_factor": "1", - "swap": "", "vcpus": "", "links": [ { @@ -658,8 +631,6 @@ class FlavorsXMLSerializationTest(test.TestCase): "name": "flavor 13", "ram": "256", "disk": "10", - "rxtx_factor": "1", - "swap": "", "vcpus": "", "links": [ { @@ -676,7 +647,6 @@ class FlavorsXMLSerializationTest(test.TestCase): } output = serializer.serialize(fixture) - print output root = etree.XML(output) xmlutil.validate_schema(root, 'flavors_index') flavor_elems = root.findall('{0}flavor'.format(NS)) @@ -701,7 +671,6 @@ class FlavorsXMLSerializationTest(test.TestCase): } output = serializer.serialize(fixture) - print output root = etree.XML(output) xmlutil.validate_schema(root, 'flavors_index') flavor_elems = root.findall('{0}flavor'.format(NS)) diff --git a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json index 1340259a7..22eb1e207 100644 --- a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json +++ b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json @@ -153,6 +153,22 @@ "updated": "2012-01-19T00:00:00+00:00" }, { + "alias": "os-flavor-rxtx", + "description": "Support to show the rxtx status of a flavor", + "links": [], + "name": "FlavorRxtx", + "namespace": "http://docs.openstack.org/compute/ext/flavor_rxtx/api/v1.1", + "updated": "2012-08-29T00:00:00+00:00" + }, + { + "alias": "os-flavor-swap", + "description": "Support to show the swap status of a flavor", + "links": [], + "name": "FlavorSwap", + "namespace": "http://docs.openstack.org/compute/ext/flavor_swap/api/v1.1", + "updated": "2012-08-29T00:00:00+00:00" + }, + { "alias": "os-floating-ip-dns", "description": "Floating IP DNS support", "links": [], diff --git a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl index 1e479f666..62f6a8ece 100644 --- a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl +++ b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.json.tpl @@ -153,6 +153,22 @@ "updated": "%(timestamp)s" }, { + "alias": "os-flavor-rxtx", + "description": "%(text)s", + "links": [], + "name": "FlavorRxtx", + "namespace": "http://docs.openstack.org/compute/ext/flavor_rxtx/api/v1.1", + "updated": "%(timestamp)s" + }, + { + "alias": "os-flavor-swap", + "description": "%(text)s", + "links": [], + "name": "FlavorSwap", + "namespace": "http://docs.openstack.org/compute/ext/flavor_swap/api/v1.1", + "updated": "%(timestamp)s" + }, + { "alias": "os-floating-ip-dns", "description": "%(text)s", "links": [], diff --git a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml index 1644781cc..4532244d9 100644 --- a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml +++ b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml @@ -71,6 +71,12 @@ Flavor create/delete API support </description> </extension> + <extension alias="os-flavor-rxtx" updated="2012-08-29T00:00:00+00:00" namespace="http://docs.openstack.org/compute/ext/flavor_rxtx/api/v1.1" name="FlavorRxtx"> + <description>Support to show the rxtx status of a flavor</description> + </extension> + <extension alias="os-flavor-swap" updated="2012-08-29T00:00:00+00:00" namespace="http://docs.openstack.org/compute/ext/flavor_swap/api/v1.1" name="FlavorSwap"> + <description>Support to show the swap status of a flavor</description> + </extension> <extension alias="os-floating-ip-dns" updated="2011-12-23T00:00:00+00:00" namespace="http://docs.openstack.org/ext/floating_ip_dns/api/v1.1" name="FloatingIpDns"> <description>Floating IP DNS support</description> </extension> diff --git a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl index bd8ff6d1e..cc79f8e84 100644 --- a/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl +++ b/nova/tests/integrated/api_samples/all_extensions/extensions-get-resp.xml.tpl @@ -57,6 +57,12 @@ <extension alias="os-flavor-manage" updated="%(timestamp)s" namespace="http://docs.openstack.org/compute/ext/flavor_manage/api/v1.1" name="FlavorManage"> <description>%(text)s</description> </extension> + <extension alias="os-flavor-rxtx" updated="%(timestamp)s" namespace="http://docs.openstack.org/compute/ext/flavor_rxtx/api/v1.1" name="FlavorRxtx"> + <description>%(text)s</description> + </extension> + <extension alias="os-flavor-swap" updated="%(timestamp)s" namespace="http://docs.openstack.org/compute/ext/flavor_swap/api/v1.1" name="FlavorSwap"> + <description>%(text)s</description> + </extension> <extension alias="os-floating-ip-dns" updated="%(timestamp)s" namespace="http://docs.openstack.org/ext/floating_ip_dns/api/v1.1" name="FloatingIpDns"> <description>%(text)s</description> </extension> diff --git a/nova/tests/integrated/api_samples/flavor-get-resp.json b/nova/tests/integrated/api_samples/flavor-get-resp.json index e2df82862..160238eea 100644 --- a/nova/tests/integrated/api_samples/flavor-get-resp.json +++ b/nova/tests/integrated/api_samples/flavor-get-resp.json @@ -14,8 +14,6 @@ ], "name": "m1.tiny", "ram": 512, - "rxtx_factor": 1.0, - "swap": "", "vcpus": 1 } }
\ No newline at end of file diff --git a/nova/tests/integrated/api_samples/flavor-get-resp.json.tpl b/nova/tests/integrated/api_samples/flavor-get-resp.json.tpl index e2df82862..86ff86fa1 100644 --- a/nova/tests/integrated/api_samples/flavor-get-resp.json.tpl +++ b/nova/tests/integrated/api_samples/flavor-get-resp.json.tpl @@ -14,8 +14,6 @@ ], "name": "m1.tiny", "ram": 512, - "rxtx_factor": 1.0, - "swap": "", "vcpus": 1 } -}
\ No newline at end of file +} diff --git a/nova/tests/integrated/api_samples/flavor-get-resp.xml b/nova/tests/integrated/api_samples/flavor-get-resp.xml index ddc4300ec..93b91a531 100644 --- a/nova/tests/integrated/api_samples/flavor-get-resp.xml +++ b/nova/tests/integrated/api_samples/flavor-get-resp.xml @@ -1,5 +1,5 @@ <?xml version='1.0' encoding='UTF-8'?> -<flavor xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/compute/api/v1.1" name="m1.tiny" ram="512" vcpus="1" swap="" rxtx_factor="1.0" disk="0" id="1"> +<flavor xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/compute/api/v1.1" disk="0" vcpus="1" ram="512" name="m1.tiny" id="1"> <atom:link href="http://openstack.example.com/v2/openstack/flavors/1" rel="self"/> <atom:link href="http://openstack.example.com/openstack/flavors/1" rel="bookmark"/> </flavor>
\ No newline at end of file diff --git a/nova/tests/integrated/api_samples/flavor-get-resp.xml.tpl b/nova/tests/integrated/api_samples/flavor-get-resp.xml.tpl index ddc4300ec..ca49884f3 100644 --- a/nova/tests/integrated/api_samples/flavor-get-resp.xml.tpl +++ b/nova/tests/integrated/api_samples/flavor-get-resp.xml.tpl @@ -1,5 +1,5 @@ <?xml version='1.0' encoding='UTF-8'?> -<flavor xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/compute/api/v1.1" name="m1.tiny" ram="512" vcpus="1" swap="" rxtx_factor="1.0" disk="0" id="1"> +<flavor xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/compute/api/v1.1" name="m1.tiny" ram="512" vcpus="1" disk="0" id="1"> <atom:link href="http://openstack.example.com/v2/openstack/flavors/1" rel="self"/> <atom:link href="http://openstack.example.com/openstack/flavors/1" rel="bookmark"/> -</flavor>
\ No newline at end of file +</flavor> diff --git a/nova/tests/policy.json b/nova/tests/policy.json index 51d811db1..073ba4142 100644 --- a/nova/tests/policy.json +++ b/nova/tests/policy.json @@ -94,6 +94,8 @@ "compute_extension:extended_status": [], "compute_extension:flavor_access": [], "compute_extension:flavor_disabled": [], + "compute_extension:flavor_rxtx": [], + "compute_extension:flavor_swap": [], "compute_extension:flavorextradata": [], "compute_extension:flavorextraspecs": [], "compute_extension:flavormanage": [], |
