Get rid of normalization for image service
Stop using any normalization in the image service. Change-Id: Id64199794214f282165836a76725b606c1a6947b
This commit is contained in:
@@ -15,7 +15,6 @@
|
||||
# openstack.resource.Resource.list and openstack.resource2.Resource.list
|
||||
import types # noqa
|
||||
|
||||
from openstack.cloud import _normalize
|
||||
from openstack.cloud import _utils
|
||||
from openstack.cloud import exc
|
||||
from openstack import utils
|
||||
@@ -29,7 +28,7 @@ def _no_pending_images(images):
|
||||
return True
|
||||
|
||||
|
||||
class ImageCloudMixin(_normalize.Normalizer):
|
||||
class ImageCloudMixin:
|
||||
|
||||
def __init__(self):
|
||||
self.image_api_use_tasks = self.config.config['image_api_use_tasks']
|
||||
@@ -81,7 +80,7 @@ class ImageCloudMixin(_normalize.Normalizer):
|
||||
images.append(image)
|
||||
elif image.status.lower() != 'deleted':
|
||||
images.append(image)
|
||||
return self._normalize_images(images)
|
||||
return images
|
||||
|
||||
def get_image(self, name_or_id, filters=None):
|
||||
"""Get an image by name or ID.
|
||||
@@ -112,12 +111,10 @@ class ImageCloudMixin(_normalize.Normalizer):
|
||||
""" Get a image by ID
|
||||
|
||||
:param id: ID of the image.
|
||||
:returns: An image ``munch.Munch``.
|
||||
:returns: An image
|
||||
:class:`openstack.image.v2.image.Image` object.
|
||||
"""
|
||||
image = self._normalize_image(
|
||||
self.image.get_image(image={'id': id}))
|
||||
|
||||
return image
|
||||
return self.image.get_image(image={'id': id})
|
||||
|
||||
def download_image(
|
||||
self, name_or_id, output_path=None, output_file=None,
|
||||
@@ -213,10 +210,10 @@ class ImageCloudMixin(_normalize.Normalizer):
|
||||
# Task API means an image was uploaded to swift
|
||||
# TODO(gtema) does it make sense to move this into proxy?
|
||||
if self.image_api_use_tasks and (
|
||||
self.image._IMAGE_OBJECT_KEY in image
|
||||
or self.image._SHADE_IMAGE_OBJECT_KEY in image):
|
||||
(container, objname) = image.get(
|
||||
self.image._IMAGE_OBJECT_KEY, image.get(
|
||||
self.image._IMAGE_OBJECT_KEY in image.properties
|
||||
or self.image._SHADE_IMAGE_OBJECT_KEY in image.properties):
|
||||
(container, objname) = image.properties.get(
|
||||
self.image._IMAGE_OBJECT_KEY, image.properties.get(
|
||||
self.image._SHADE_IMAGE_OBJECT_KEY)).split('/', 1)
|
||||
self.delete_object(container=container, name=objname)
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ from openstack.compute.v2 import flavor as _flavor
|
||||
from openstack import exceptions
|
||||
from openstack.identity.v3 import project as _project
|
||||
from openstack.identity.v3 import user as _user
|
||||
from openstack.image.v2 import image as _image
|
||||
from openstack.network.v2 import port as _port
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
@@ -104,11 +105,10 @@ class TestMemoryCache(base.TestCase):
|
||||
super(TestMemoryCache, self).setUp(
|
||||
cloud_config_fixture='clouds_cache.yaml')
|
||||
|
||||
def _image_dict(self, fake_image):
|
||||
return self.cloud._normalize_image(meta.obj_to_munch(fake_image))
|
||||
|
||||
def _munch_images(self, fake_image):
|
||||
return self.cloud._normalize_images([fake_image])
|
||||
def _compare_images(self, exp, real):
|
||||
self.assertDictEqual(
|
||||
_image.Image(**exp).to_dict(computed=False),
|
||||
real.to_dict(computed=False))
|
||||
|
||||
def _compare_volumes(self, exp, real):
|
||||
self.assertDictEqual(
|
||||
@@ -468,8 +468,9 @@ class TestMemoryCache(base.TestCase):
|
||||
self.assertEqual([], self.cloud.list_images())
|
||||
self.assertEqual([], self.cloud.list_images())
|
||||
self.cloud.list_images.invalidate(self.cloud)
|
||||
self.assertEqual(
|
||||
self._munch_images(fake_image), self.cloud.list_images())
|
||||
[self._compare_images(a, b) for a, b in zip(
|
||||
[fake_image],
|
||||
self.cloud.list_images())]
|
||||
|
||||
self.assert_calls()
|
||||
|
||||
@@ -488,13 +489,13 @@ class TestMemoryCache(base.TestCase):
|
||||
json=list_return),
|
||||
])
|
||||
|
||||
self.assertEqual(
|
||||
[self.cloud._normalize_image(active_image)],
|
||||
self.cloud.list_images())
|
||||
[self._compare_images(a, b) for a, b in zip(
|
||||
[active_image],
|
||||
self.cloud.list_images())]
|
||||
|
||||
self.assertEqual(
|
||||
[self.cloud._normalize_image(active_image)],
|
||||
self.cloud.list_images())
|
||||
[self._compare_images(a, b) for a, b in zip(
|
||||
[active_image],
|
||||
self.cloud.list_images())]
|
||||
|
||||
# We should only have one call
|
||||
self.assert_calls()
|
||||
@@ -515,23 +516,20 @@ class TestMemoryCache(base.TestCase):
|
||||
json={'images': [fi, fi2]}),
|
||||
])
|
||||
|
||||
self.assertEqual(
|
||||
self._munch_images(fi),
|
||||
self.cloud.list_images())
|
||||
[self._compare_images(a, b) for a, b in zip(
|
||||
[fi],
|
||||
self.cloud.list_images())]
|
||||
|
||||
# Now test that the list was cached
|
||||
self.assertEqual(
|
||||
self._munch_images(fi),
|
||||
self.cloud.list_images())
|
||||
[self._compare_images(a, b) for a, b in zip(
|
||||
[fi],
|
||||
self.cloud.list_images())]
|
||||
|
||||
# Invalidation too
|
||||
self.cloud.list_images.invalidate(self.cloud)
|
||||
self.assertEqual(
|
||||
[
|
||||
self.cloud._normalize_image(fi),
|
||||
self.cloud._normalize_image(fi2)
|
||||
],
|
||||
self.cloud.list_images())
|
||||
[self._compare_images(a, b) for a, b in zip(
|
||||
[fi, fi2],
|
||||
self.cloud.list_images())]
|
||||
|
||||
def test_list_ports_filtered(self):
|
||||
down_port = test_port.TestPort.mock_neutron_port_create_rep['port']
|
||||
@@ -577,6 +575,11 @@ class TestCacheIgnoresQueuedStatus(base.TestCase):
|
||||
self.steady_list_return = {
|
||||
'images': [self.active_image, self.steady_image]}
|
||||
|
||||
def _compare_images(self, exp, real):
|
||||
self.assertDictEqual(
|
||||
_image.Image(**exp).to_dict(computed=False),
|
||||
real.to_dict(computed=False))
|
||||
|
||||
def test_list_images_ignores_pending_status(self):
|
||||
|
||||
self.register_uris([
|
||||
@@ -588,17 +591,14 @@ class TestCacheIgnoresQueuedStatus(base.TestCase):
|
||||
json=self.steady_list_return),
|
||||
])
|
||||
|
||||
self.assertEqual(
|
||||
[self.cloud._normalize_image(self.active_image)],
|
||||
self.cloud.list_images())
|
||||
[self._compare_images(a, b) for a, b in zip(
|
||||
[self.active_image],
|
||||
self.cloud.list_images())]
|
||||
|
||||
# Should expect steady_image to appear if active wasn't cached
|
||||
self.assertEqual(
|
||||
[
|
||||
self.cloud._normalize_image(self.active_image),
|
||||
self.cloud._normalize_image(self.steady_image)
|
||||
],
|
||||
self.cloud.list_images())
|
||||
[self._compare_images(a, b) for a, b in zip(
|
||||
[self.active_image, self.steady_image],
|
||||
self.cloud.list_images())]
|
||||
|
||||
|
||||
class TestCacheSteadyStatus(base.TestCase):
|
||||
@@ -617,6 +617,11 @@ class TestCacheSteadyStatus(base.TestCase):
|
||||
image_id=active_image_id, status=self.status)
|
||||
self.active_list_return = {'images': [self.active_image]}
|
||||
|
||||
def _compare_images(self, exp, real):
|
||||
self.assertDictEqual(
|
||||
_image.Image(**exp).to_dict(computed=False),
|
||||
real.to_dict(computed=False))
|
||||
|
||||
def test_list_images_caches_steady_status(self):
|
||||
|
||||
self.register_uris([
|
||||
@@ -625,13 +630,13 @@ class TestCacheSteadyStatus(base.TestCase):
|
||||
json=self.active_list_return),
|
||||
])
|
||||
|
||||
self.assertEqual(
|
||||
[self.cloud._normalize_image(self.active_image)],
|
||||
self.cloud.list_images())
|
||||
[self._compare_images(a, b) for a, b in zip(
|
||||
[self.active_image],
|
||||
self.cloud.list_images())]
|
||||
|
||||
self.assertEqual(
|
||||
[self.cloud._normalize_image(self.active_image)],
|
||||
self.cloud.list_images())
|
||||
[self._compare_images(a, b) for a, b in zip(
|
||||
[self.active_image],
|
||||
self.cloud.list_images())]
|
||||
|
||||
# We should only have one call
|
||||
self.assert_calls()
|
||||
|
||||
@@ -20,6 +20,8 @@ import uuid
|
||||
from openstack.cloud import exc
|
||||
from openstack.cloud import meta
|
||||
from openstack import exceptions
|
||||
from openstack.image.v1 import image as image_v1
|
||||
from openstack.image.v2 import image
|
||||
from openstack.tests import fakes
|
||||
from openstack.tests.unit import base
|
||||
|
||||
@@ -46,6 +48,16 @@ class BaseTestImage(base.TestCase):
|
||||
self.fake_search_return = {'images': [self.fake_image_dict]}
|
||||
self.container_name = self.getUniqueString('container')
|
||||
|
||||
def _compare_images(self, exp, real):
|
||||
self.assertDictEqual(
|
||||
image.Image(**exp).to_dict(computed=False),
|
||||
real.to_dict(computed=False))
|
||||
|
||||
def _compare_images_v1(self, exp, real):
|
||||
self.assertDictEqual(
|
||||
image_v1.Image(**exp).to_dict(computed=False),
|
||||
real.to_dict(computed=False))
|
||||
|
||||
|
||||
class TestImage(BaseTestImage):
|
||||
|
||||
@@ -166,9 +178,10 @@ class TestImage(BaseTestImage):
|
||||
base_url_append='v2'),
|
||||
json=self.fake_image_dict)
|
||||
])
|
||||
self.assertDictEqual(
|
||||
self.cloud._normalize_image(self.fake_image_dict),
|
||||
self.cloud.get_image_by_id(self.image_id))
|
||||
self._compare_images(
|
||||
self.fake_image_dict,
|
||||
self.cloud.get_image_by_id(self.image_id)
|
||||
)
|
||||
self.assert_calls()
|
||||
|
||||
def test_get_image_id(self, cloud=None):
|
||||
@@ -216,9 +229,9 @@ class TestImage(BaseTestImage):
|
||||
'image', append=['images'], base_url_append='v2'),
|
||||
json=self.fake_search_return)
|
||||
])
|
||||
self.assertEqual(
|
||||
self.cloud._normalize_images([self.fake_image_dict]),
|
||||
self.cloud.list_images())
|
||||
[self._compare_images(a, b) for a, b in zip(
|
||||
[self.fake_image_dict],
|
||||
self.cloud.list_images())]
|
||||
self.assert_calls()
|
||||
|
||||
def test_list_images_show_all(self):
|
||||
@@ -229,9 +242,9 @@ class TestImage(BaseTestImage):
|
||||
qs_elements=['member_status=all']),
|
||||
json=self.fake_search_return)
|
||||
])
|
||||
self.assertEqual(
|
||||
self.cloud._normalize_images([self.fake_image_dict]),
|
||||
self.cloud.list_images(show_all=True))
|
||||
[self._compare_images(a, b) for a, b in zip(
|
||||
[self.fake_image_dict],
|
||||
self.cloud.list_images(show_all=True))]
|
||||
self.assert_calls()
|
||||
|
||||
def test_list_images_show_all_deleted(self):
|
||||
@@ -244,10 +257,9 @@ class TestImage(BaseTestImage):
|
||||
qs_elements=['member_status=all']),
|
||||
json={'images': [self.fake_image_dict, deleted_image]})
|
||||
])
|
||||
self.assertEqual(
|
||||
self.cloud._normalize_images([
|
||||
self.fake_image_dict, deleted_image]),
|
||||
self.cloud.list_images(show_all=True))
|
||||
[self._compare_images(a, b) for a, b in zip(
|
||||
[self.fake_image_dict],
|
||||
self.cloud.list_images(show_all=True))]
|
||||
self.assert_calls()
|
||||
|
||||
def test_list_images_no_filter_deleted(self):
|
||||
@@ -259,10 +271,9 @@ class TestImage(BaseTestImage):
|
||||
'image', append=['images'], base_url_append='v2'),
|
||||
json={'images': [self.fake_image_dict, deleted_image]})
|
||||
])
|
||||
self.assertEqual(
|
||||
self.cloud._normalize_images([
|
||||
self.fake_image_dict, deleted_image]),
|
||||
self.cloud.list_images(filter_deleted=False))
|
||||
[self._compare_images(a, b) for a, b in zip(
|
||||
[self.fake_image_dict],
|
||||
self.cloud.list_images(filter_deleted=False))]
|
||||
self.assert_calls()
|
||||
|
||||
def test_list_images_filter_deleted(self):
|
||||
@@ -274,9 +285,9 @@ class TestImage(BaseTestImage):
|
||||
'image', append=['images'], base_url_append='v2'),
|
||||
json={'images': [self.fake_image_dict, deleted_image]})
|
||||
])
|
||||
self.assertEqual(
|
||||
self.cloud._normalize_images([self.fake_image_dict]),
|
||||
self.cloud.list_images())
|
||||
[self._compare_images(a, b) for a, b in zip(
|
||||
[self.fake_image_dict],
|
||||
self.cloud.list_images())]
|
||||
self.assert_calls()
|
||||
|
||||
def test_list_images_string_properties(self):
|
||||
@@ -289,9 +300,10 @@ class TestImage(BaseTestImage):
|
||||
json={'images': [image_dict]}),
|
||||
])
|
||||
images = self.cloud.list_images()
|
||||
self.assertEqual(
|
||||
self.cloud._normalize_images([image_dict]),
|
||||
images)
|
||||
[self._compare_images(a, b) for a, b in zip(
|
||||
[image_dict],
|
||||
images)]
|
||||
|
||||
self.assertEqual(
|
||||
images[0]['properties']['properties'],
|
||||
'list,of,properties')
|
||||
@@ -312,10 +324,9 @@ class TestImage(BaseTestImage):
|
||||
qs_elements=['marker={marker}'.format(marker=marker)]),
|
||||
json=self.fake_search_return)
|
||||
])
|
||||
self.assertEqual(
|
||||
self.cloud._normalize_images([
|
||||
self.fake_image_dict, self.fake_image_dict]),
|
||||
self.cloud.list_images())
|
||||
[self._compare_images(a, b) for a, b in zip(
|
||||
[self.fake_image_dict],
|
||||
self.cloud.list_images())]
|
||||
self.assert_calls()
|
||||
|
||||
def test_create_image_put_v2_no_import(self):
|
||||
@@ -894,7 +905,8 @@ class TestImage(BaseTestImage):
|
||||
json={'images': [ret]}),
|
||||
])
|
||||
self._call_create_image(self.image_name)
|
||||
self.assertEqual(self._munch_images(ret), self.cloud.list_images())
|
||||
[self._compare_images_v1(b, a) for a, b in zip(
|
||||
self.cloud.list_images(), [ret])]
|
||||
|
||||
def test_create_image_put_v1_bad_delete(self):
|
||||
self.cloud.config.config['image_api_version'] = '1'
|
||||
@@ -1306,9 +1318,9 @@ class TestImageSuburl(BaseTestImage):
|
||||
'image', append=['images'], base_url_append='v2'),
|
||||
json=self.fake_search_return)
|
||||
])
|
||||
self.assertEqual(
|
||||
self.cloud._normalize_images([self.fake_image_dict]),
|
||||
self.cloud.list_images())
|
||||
[self._compare_images(b, a) for a, b in zip(
|
||||
self.cloud.list_images(),
|
||||
[self.fake_image_dict])]
|
||||
self.assert_calls()
|
||||
|
||||
def test_list_images_paginated(self):
|
||||
@@ -1326,10 +1338,9 @@ class TestImageSuburl(BaseTestImage):
|
||||
qs_elements=['marker={marker}'.format(marker=marker)]),
|
||||
json=self.fake_search_return)
|
||||
])
|
||||
self.assertEqual(
|
||||
self.cloud._normalize_images([
|
||||
self.fake_image_dict, self.fake_image_dict]),
|
||||
self.cloud.list_images())
|
||||
[self._compare_images(b, a) for a, b in zip(
|
||||
self.cloud.list_images(),
|
||||
[self.fake_image_dict, self.fake_image_dict])]
|
||||
self.assert_calls()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user