diff --git a/shade/openstackcloud.py b/shade/openstackcloud.py index a87334e4d..9647ac9f8 100644 --- a/shade/openstackcloud.py +++ b/shade/openstackcloud.py @@ -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( diff --git a/shade/tests/functional/test_image.py b/shade/tests/functional/test_image.py index 8c630a4e7..e603acee9 100644 --- a/shade/tests/functional/test_image.py +++ b/shade/tests/functional/test_image.py @@ -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) diff --git a/shade/tests/unit/test_caching.py b/shade/tests/unit/test_caching.py index a637c7994..82f95a699 100644 --- a/shade/tests/unit/test_caching.py +++ b/shade/tests/unit/test_caching.py @@ -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)