summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEoghan Glynn <eglynn@redhat.com>2012-07-30 16:23:11 +0100
committerEoghan Glynn <eglynn@redhat.com>2012-08-14 19:14:51 +0100
commit3b6207976a51d33ee2ec701d21fa2a0cc6eca2e8 (patch)
tree99323df4740f01c6a1f9eb5b93d7bf8d6b110fe8
parent9deb489a8ba5ca2417787ba5e5429a60cf1712c2 (diff)
downloadnova-3b6207976a51d33ee2ec701d21fa2a0cc6eca2e8.tar.gz
nova-3b6207976a51d33ee2ec701d21fa2a0cc6eca2e8.tar.xz
nova-3b6207976a51d33ee2ec701d21fa2a0cc6eca2e8.zip
Allow XML payload for volume creation.
Fixes nova-volume aspect of LP 1030330 Tolerate volume size attribute of type string as opposed to int. Change-Id: I7cccb760a246d562792dec1669d634803bb9bc57
-rw-r--r--nova/api/openstack/volume/volumes.py12
-rw-r--r--nova/tests/api/openstack/volume/test_volumes.py10
2 files changed, 19 insertions, 3 deletions
diff --git a/nova/api/openstack/volume/volumes.py b/nova/api/openstack/volume/volumes.py
index 4c12638b4..ec9a47a74 100644
--- a/nova/api/openstack/volume/volumes.py
+++ b/nova/api/openstack/volume/volumes.py
@@ -218,7 +218,17 @@ class VolumeController(object):
raise exc.HTTPUnprocessableEntity()
volume = body['volume']
- size = volume['size']
+
+ def as_int(s):
+ try:
+ return int(s)
+ except ValueError:
+ return s
+
+ # NOTE(eglynn): we're tolerant of non-int sizes here, as type
+ # integrity is enforced later in the creation codepath
+ size = as_int(volume['size'])
+
LOG.audit(_("Create volume of %s GB"), size, context=context)
kwargs = {}
diff --git a/nova/tests/api/openstack/volume/test_volumes.py b/nova/tests/api/openstack/volume/test_volumes.py
index 6f9a6557b..1a51c8b67 100644
--- a/nova/tests/api/openstack/volume/test_volumes.py
+++ b/nova/tests/api/openstack/volume/test_volumes.py
@@ -42,10 +42,10 @@ class VolumeApiTest(test.TestCase):
self.stubs.Set(volume_api.API, 'get', fakes.stub_volume_get)
self.stubs.Set(volume_api.API, 'delete', fakes.stub_volume_delete)
- def test_volume_create(self):
+ def _do_test_volume_create(self, size):
self.stubs.Set(volume_api.API, "create", fakes.stub_volume_create)
- vol = {"size": 100,
+ vol = {"size": size,
"display_name": "Volume Test Name",
"display_description": "Volume Test Desc",
"availability_zone": "zone1:host1"}
@@ -71,6 +71,12 @@ class VolumeApiTest(test.TestCase):
self.assertEqual(res.code, 200)
self.assertTrue('location' in res.headers)
+ def test_volume_create_int_size(self):
+ self._do_test_volume_create(100)
+
+ def test_volume_create_str_size(self):
+ self._do_test_volume_create('100')
+
def test_volume_creation_fails_with_bad_size(self):
vol = {"size": '',
"display_name": "Volume Test Name",