Fix for min_disk/min_ram in create_image API

If min_disk or min_ram are passed in as keyword arguments, the
values must be integers or glance hates us even more than usual.

Change-Id: I1ed04174796e12258055840e9184aa9f8bcf3ea8
This commit is contained in:
David Shrewsbury 2015-11-23 11:14:24 -05:00
parent 4c7583b33a
commit 31cdee11dd
3 changed files with 11 additions and 4 deletions

View File

@ -1963,6 +1963,10 @@ class OpenStackCloud(object):
img_props = image_kwargs.pop('properties')
for k, v in iter(img_props.items()):
image_kwargs[k] = str(v)
# some MUST be integer
for k in ('min_disk', 'min_ram'):
if k in image_kwargs:
image_kwargs[k] = int(image_kwargs[k])
image = self.manager.submitTask(_tasks.ImageCreate(
name=name, **image_kwargs))
self.manager.submitTask(_tasks.ImageUpload(

View File

@ -42,6 +42,8 @@ class TestImage(base.TestCase):
filename=test_image.name,
disk_format='raw',
container_format='bare',
min_disk=10,
min_ram=1024,
wait=True)
finally:
self.cloud.delete_image(image_name, wait=True)

View File

@ -294,13 +294,13 @@ class TestMemoryCache(base.TestCase):
# therefore we should _not_ expect to see the new one here
self.assertEqual([first_image], self.cloud.list_images())
def _call_create_image(self, name, container=None):
def _call_create_image(self, name, container=None, **kwargs):
imagefile = tempfile.NamedTemporaryFile(delete=False)
imagefile.write(b'\0')
imagefile.close()
self.cloud.create_image(
name, imagefile.name, container=container, wait=True,
is_public=False)
is_public=False, **kwargs)
@mock.patch.object(occ.cloud_config.CloudConfig, 'get_api_version')
@mock.patch.object(shade.OpenStackCloud, 'glance_client')
@ -336,12 +336,13 @@ class TestMemoryCache(base.TestCase):
fake_image = fakes.FakeImage('42', '42 name', 'success')
glance_mock.images.create.return_value = fake_image
glance_mock.images.list.return_value = [fake_image]
self._call_create_image('42 name')
self._call_create_image('42 name', min_disk=0, min_ram=0)
args = {'name': '42 name',
'container_format': 'bare', 'disk_format': 'qcow2',
'owner_specified.shade.md5': mock.ANY,
'owner_specified.shade.sha256': mock.ANY,
'visibility': 'private'}
'visibility': 'private',
'min_disk': 0, 'min_ram': 0}
glance_mock.images.create.assert_called_with(**args)
glance_mock.images.upload.assert_called_with(
image_data=mock.ANY, image_id=fake_image.id)