From e411fcd647e3cdcf415465288e527aecfd026fc5 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Tue, 13 Sep 2011 14:15:29 -0400 Subject: add additional data to flavor's ViewBuilder This adds missing fields that were trying to be used by python-novaclient. Previously, 'nova flavor-list' would have empty columns for fields other than 'disk' and 'ram'. Now all columns are filled in appropriately. --- nova/api/openstack/views/flavors.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/nova/api/openstack/views/flavors.py b/nova/api/openstack/views/flavors.py index aea34b424..023acce0d 100644 --- a/nova/api/openstack/views/flavors.py +++ b/nova/api/openstack/views/flavors.py @@ -48,6 +48,10 @@ class ViewBuilder(object): detail = { "ram": flavor_obj["memory_mb"], "disk": flavor_obj["local_gb"], + "swap": flavor_obj["swap"], + "rxtx_quota": flavor_obj["rxtx_quota"], + "rxtx_cap": flavor_obj["rxtx_cap"], + "vcpus": flavor_obj["vcpus"], } detail.update(simple) -- cgit From 877d92845a5d2002c4adc0c8398469e66fd0907e Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Tue, 13 Sep 2011 17:06:15 -0400 Subject: make tests pass --- nova/api/openstack/views/flavors.py | 7 +++---- nova/tests/api/openstack/test_flavors.py | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/nova/api/openstack/views/flavors.py b/nova/api/openstack/views/flavors.py index 023acce0d..4c5e2c1e6 100644 --- a/nova/api/openstack/views/flavors.py +++ b/nova/api/openstack/views/flavors.py @@ -48,12 +48,11 @@ class ViewBuilder(object): detail = { "ram": flavor_obj["memory_mb"], "disk": flavor_obj["local_gb"], - "swap": flavor_obj["swap"], - "rxtx_quota": flavor_obj["rxtx_quota"], - "rxtx_cap": flavor_obj["rxtx_cap"], - "vcpus": flavor_obj["vcpus"], } + for key in ( "vcpus", "swap", "rxtx_quota", "rxtx_cap"): + detail[key] = flavor_obj.get(key,"") + detail.update(simple) return detail diff --git a/nova/tests/api/openstack/test_flavors.py b/nova/tests/api/openstack/test_flavors.py index 812bece42..b7a5d0e09 100644 --- a/nova/tests/api/openstack/test_flavors.py +++ b/nova/tests/api/openstack/test_flavors.py @@ -107,12 +107,20 @@ class FlavorsTest(test.TestCase): "name": "flavor 1", "ram": "256", "disk": "10", + "rxtx_cap": "", + "rxtx_quota": "", + "swap": "", + "vcpus": "", }, { "id": "2", "name": "flavor 2", "ram": "256", "disk": "10", + "rxtx_cap": "", + "rxtx_quota": "", + "swap": "", + "vcpus": "", }, ] self.assertEqual(flavors, expected) @@ -127,6 +135,10 @@ class FlavorsTest(test.TestCase): "name": "flavor 12", "ram": "256", "disk": "10", + "rxtx_cap": "", + "rxtx_quota": "", + "swap": "", + "vcpus": "", } self.assertEqual(flavor, expected) @@ -149,6 +161,10 @@ class FlavorsTest(test.TestCase): "name": "flavor 12", "ram": "256", "disk": "10", + "rxtx_cap": "", + "rxtx_quota": "", + "swap": "", + "vcpus": "", "links": [ { "rel": "self", @@ -216,6 +232,10 @@ class FlavorsTest(test.TestCase): "name": "flavor 1", "ram": "256", "disk": "10", + "rxtx_cap": "", + "rxtx_quota": "", + "swap": "", + "vcpus": "", "links": [ { "rel": "self", @@ -232,6 +252,10 @@ class FlavorsTest(test.TestCase): "name": "flavor 2", "ram": "256", "disk": "10", + "rxtx_cap": "", + "rxtx_quota": "", + "swap": "", + "vcpus": "", "links": [ { "rel": "self", -- cgit From d36e59f4480265741018a1fd5160f5262b7e9331 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Wed, 14 Sep 2011 11:54:13 -0400 Subject: add extension description for FlavorExtraData --- nova/api/openstack/contrib/flavorextradata.py | 46 +++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 nova/api/openstack/contrib/flavorextradata.py diff --git a/nova/api/openstack/contrib/flavorextradata.py b/nova/api/openstack/contrib/flavorextradata.py new file mode 100644 index 000000000..d0554c7b4 --- /dev/null +++ b/nova/api/openstack/contrib/flavorextradata.py @@ -0,0 +1,46 @@ +# Copyright 2011 Canonical Ltd. +# All Rights Reserved. +# +# 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 extra data extension +Openstack API version 1.1 lists "name", "ram", "disk", "vcpus" as flavor +attributes. This extension adds to that list: + rxtx_cap + rxtx_quota + swap +""" + +from nova.api.openstack import extensions + + +class Flavorextradata(extensions.ExtensionDescriptor): + """The Flavor extra data extension for the OpenStack API.""" + + def get_name(self): + return "FlavorExtraData" + + def get_alias(self): + return "os-flavor-extra-data" + + def get_description(self): + return "Provide additional data for flavors" + + def get_namespace(self): + return "http://docs.openstack.org/ext/flavor_extra_data/api/v1.1" + + def get_updated(self): + return "2011-09-14T00:00:00+00:00" + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 -- cgit From efaa0e6590985e3d4bdeeb18e1d41a037856ea89 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Wed, 14 Sep 2011 11:54:56 -0400 Subject: fix test_extensions test to know of new extension FlavorExtraData --- nova/tests/api/openstack/test_extensions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/nova/tests/api/openstack/test_extensions.py b/nova/tests/api/openstack/test_extensions.py index 31443242b..44f4eb055 100644 --- a/nova/tests/api/openstack/test_extensions.py +++ b/nova/tests/api/openstack/test_extensions.py @@ -87,6 +87,7 @@ class ExtensionControllerTest(test.TestCase): self.ext_list = [ "Createserverext", "FlavorExtraSpecs", + "FlavorExtraData", "Floating_ips", "Fox In Socks", "Hosts", -- cgit From c20228123c1774a1e2aa1b4ee7155a62336f5934 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Wed, 14 Sep 2011 11:55:18 -0400 Subject: fix white space for pep8 --- nova/api/openstack/views/flavors.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nova/api/openstack/views/flavors.py b/nova/api/openstack/views/flavors.py index 4c5e2c1e6..def969a6c 100644 --- a/nova/api/openstack/views/flavors.py +++ b/nova/api/openstack/views/flavors.py @@ -50,8 +50,8 @@ class ViewBuilder(object): "disk": flavor_obj["local_gb"], } - for key in ( "vcpus", "swap", "rxtx_quota", "rxtx_cap"): - detail[key] = flavor_obj.get(key,"") + for key in ("vcpus", "swap", "rxtx_quota", "rxtx_cap"): + detail[key] = flavor_obj.get(key, "") detail.update(simple) -- cgit From 092ff28b9f141368aed0d719140212e5fc8652f8 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Wed, 14 Sep 2011 12:25:47 -0400 Subject: add attributes to xml api --- nova/api/openstack/flavors.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nova/api/openstack/flavors.py b/nova/api/openstack/flavors.py index fd36060da..c6c9f096f 100644 --- a/nova/api/openstack/flavors.py +++ b/nova/api/openstack/flavors.py @@ -90,6 +90,9 @@ class FlavorXMLSerializer(wsgi.XMLDictSerializer): flavor_node.setAttribute('ram', str(flavor['ram'])) flavor_node.setAttribute('disk', str(flavor['disk'])) + for attr in ("vcpus", "swap", "rxtx_quota", "rxtx_cap"): + flavor_node.setAttribute(attr, str(flavor.get(attr,""))) + link_nodes = self._create_link_nodes(xml_doc, flavor['links']) for link_node in link_nodes: flavor_node.appendChild(link_node) -- cgit From 95e06c5d88f5500805fb8d9505a4db61560bf8e1 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Wed, 14 Sep 2011 12:59:10 -0400 Subject: update variable name after merge: flavor_node -> flavor_elem --- nova/api/openstack/flavors.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nova/api/openstack/flavors.py b/nova/api/openstack/flavors.py index dd77f1a05..a419b7ec2 100644 --- a/nova/api/openstack/flavors.py +++ b/nova/api/openstack/flavors.py @@ -94,7 +94,7 @@ class FlavorXMLSerializer(wsgi.XMLDictSerializer): flavor_elem.set('disk', str(flavor_dict['disk'])) for attr in ("vcpus", "swap", "rxtx_quota", "rxtx_cap"): - flavor_node.setAttribute(attr, str(flavor.get(attr,""))) + flavor_elem.setAttribute(attr, str(flavor.get(attr,""))) for link in flavor_dict.get('links', []): elem = etree.SubElement(flavor_elem, -- cgit From f9cac7659a761fa32fac0153f8ecb0334149a486 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Wed, 14 Sep 2011 13:10:23 -0400 Subject: make xml-api tests pass --- nova/tests/api/openstack/test_flavors.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/nova/tests/api/openstack/test_flavors.py b/nova/tests/api/openstack/test_flavors.py index fa4e548ac..348042bfe 100644 --- a/nova/tests/api/openstack/test_flavors.py +++ b/nova/tests/api/openstack/test_flavors.py @@ -300,6 +300,10 @@ class FlavorsXMLSerializationTest(test.TestCase): "name": "asdf", "ram": "256", "disk": "10", + "rxtx_cap": "", + "rxtx_quota": "", + "swap": "", + "vcpus": "", "links": [ { "rel": "self", @@ -327,6 +331,10 @@ class FlavorsXMLSerializationTest(test.TestCase): "name": "asdf", "ram": "256", "disk": "10", + "rxtx_cap": "", + "rxtx_quota": "", + "swap": "", + "vcpus": "", "links": [ { "rel": "self", @@ -364,6 +372,10 @@ class FlavorsXMLSerializationTest(test.TestCase): "name": "asdf", "ram": 256, "disk": 10, + "rxtx_cap": "", + "rxtx_quota": "", + "swap": "", + "vcpus": "", "links": [ { "rel": "self", @@ -402,6 +414,10 @@ class FlavorsXMLSerializationTest(test.TestCase): "name": "flavor 23", "ram": "512", "disk": "20", + "rxtx_cap": "", + "rxtx_quota": "", + "swap": "", + "vcpus": "", "links": [ { "rel": "self", @@ -417,6 +433,10 @@ class FlavorsXMLSerializationTest(test.TestCase): "name": "flavor 13", "ram": "256", "disk": "10", + "rxtx_cap": "", + "rxtx_quota": "", + "swap": "", + "vcpus": "", "links": [ { "rel": "self", @@ -459,6 +479,10 @@ class FlavorsXMLSerializationTest(test.TestCase): "name": "flavor 23", "ram": "512", "disk": "20", + "rxtx_cap": "", + "rxtx_quota": "", + "swap": "", + "vcpus": "", "links": [ { "rel": "self", @@ -474,6 +498,10 @@ class FlavorsXMLSerializationTest(test.TestCase): "name": "flavor 13", "ram": "256", "disk": "10", + "rxtx_cap": "", + "rxtx_quota": "", + "swap": "", + "vcpus": "", "links": [ { "rel": "self", -- cgit From 9ce2e4f80f249d58622b7235aec55e823f9cd6c8 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Wed, 14 Sep 2011 14:37:32 -0400 Subject: flavor_elem.setAttribute -> flavor_elem.set, flavor -> flavor_dict --- nova/api/openstack/flavors.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nova/api/openstack/flavors.py b/nova/api/openstack/flavors.py index a419b7ec2..0c435ebeb 100644 --- a/nova/api/openstack/flavors.py +++ b/nova/api/openstack/flavors.py @@ -94,7 +94,7 @@ class FlavorXMLSerializer(wsgi.XMLDictSerializer): flavor_elem.set('disk', str(flavor_dict['disk'])) for attr in ("vcpus", "swap", "rxtx_quota", "rxtx_cap"): - flavor_elem.setAttribute(attr, str(flavor.get(attr,""))) + flavor_elem.set(attr, str(flavor_dict.get(attr,""))) for link in flavor_dict.get('links', []): elem = etree.SubElement(flavor_elem, -- cgit From 74a1045dd133fe708cb0f42bd4fae4198ee337ff Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Wed, 14 Sep 2011 14:51:55 -0400 Subject: add necessary fields to flavor.rng schema --- nova/api/openstack/schemas/v1.1/flavor.rng | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/nova/api/openstack/schemas/v1.1/flavor.rng b/nova/api/openstack/schemas/v1.1/flavor.rng index a00e4e9ee..6d3adc8dc 100644 --- a/nova/api/openstack/schemas/v1.1/flavor.rng +++ b/nova/api/openstack/schemas/v1.1/flavor.rng @@ -4,6 +4,10 @@ + + + + -- cgit From aa0361c41d2e2feff18915ac93107727f52b15ca Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Wed, 14 Sep 2011 14:58:47 -0400 Subject: fix pep8 whitespace error --- nova/api/openstack/flavors.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nova/api/openstack/flavors.py b/nova/api/openstack/flavors.py index 0c435ebeb..8a310c900 100644 --- a/nova/api/openstack/flavors.py +++ b/nova/api/openstack/flavors.py @@ -94,7 +94,7 @@ class FlavorXMLSerializer(wsgi.XMLDictSerializer): flavor_elem.set('disk', str(flavor_dict['disk'])) for attr in ("vcpus", "swap", "rxtx_quota", "rxtx_cap"): - flavor_elem.set(attr, str(flavor_dict.get(attr,""))) + flavor_elem.set(attr, str(flavor_dict.get(attr, ""))) for link in flavor_dict.get('links', []): elem = etree.SubElement(flavor_elem, -- cgit