Adding support for glance cache-queue Command
Change-Id: I5296fe41b541a3dd40669e49e431828ab3c8e107
This commit is contained in:
@@ -89,4 +89,5 @@ Cache Operations
|
|||||||
|
|
||||||
.. autoclass:: openstack.image.v2._proxy.Proxy
|
.. autoclass:: openstack.image.v2._proxy.Proxy
|
||||||
:noindex:
|
:noindex:
|
||||||
:members: cache_delete_image
|
:members: cache_delete_image, queue_image, get_image_cache
|
||||||
|
|
||||||
|
@@ -89,7 +89,12 @@ class Proxy(proxy.Proxy):
|
|||||||
the metadef namespace does not exist.
|
the metadef namespace does not exist.
|
||||||
:returns: ``None``
|
:returns: ``None``
|
||||||
"""
|
"""
|
||||||
self._delete(_cache.Cache, image, ignore_missing=ignore_missing)
|
return self._delete(_cache.Cache, image, ignore_missing=ignore_missing)
|
||||||
|
|
||||||
|
def queue_image(self, image_id):
|
||||||
|
"""Queue image(s) for caching."""
|
||||||
|
cache = self._get_resource(_cache.Cache, None)
|
||||||
|
return cache.queue(self, image_id)
|
||||||
|
|
||||||
# ====== IMAGES ======
|
# ====== IMAGES ======
|
||||||
def create_image(
|
def create_image(
|
||||||
|
@@ -10,7 +10,9 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
from openstack import exceptions
|
||||||
from openstack import resource
|
from openstack import resource
|
||||||
|
from openstack import utils
|
||||||
|
|
||||||
|
|
||||||
class CachedImage(resource.Resource):
|
class CachedImage(resource.Resource):
|
||||||
@@ -26,9 +28,25 @@ class Cache(resource.Resource):
|
|||||||
|
|
||||||
allow_fetch = True
|
allow_fetch = True
|
||||||
allow_delete = True
|
allow_delete = True
|
||||||
|
allow_create = True
|
||||||
|
|
||||||
_max_microversion = '2.14'
|
_max_microversion = '2.14'
|
||||||
|
|
||||||
cached_images = resource.Body('cached_images', type=list,
|
cached_images = resource.Body('cached_images', type=list,
|
||||||
list_type=CachedImage)
|
list_type=CachedImage)
|
||||||
queued_images = resource.Body('queued_images', type=list)
|
queued_images = resource.Body('queued_images', type=list)
|
||||||
|
|
||||||
|
def queue(self, session, image, *, microversion=None):
|
||||||
|
"""Queue an image into cache.
|
||||||
|
:param session: The session to use for making this request
|
||||||
|
:param image: The image to be queued into cache.
|
||||||
|
:returns: The server response
|
||||||
|
"""
|
||||||
|
if microversion is None:
|
||||||
|
microversion = self._get_microversion(session, action='commit')
|
||||||
|
image_id = resource.Resource._get_id(image)
|
||||||
|
url = utils.urljoin(self.base_path, image_id)
|
||||||
|
|
||||||
|
response = session.put(url, microversion=microversion)
|
||||||
|
exceptions.raise_from_response(response)
|
||||||
|
return response
|
||||||
|
@@ -10,6 +10,9 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
|
from openstack import exceptions
|
||||||
from openstack.image.v2 import cache
|
from openstack.image.v2 import cache
|
||||||
from openstack.tests.unit import base
|
from openstack.tests.unit import base
|
||||||
|
|
||||||
@@ -44,3 +47,15 @@ class TestCache(base.TestCase):
|
|||||||
sot.cached_images,
|
sot.cached_images,
|
||||||
)
|
)
|
||||||
self.assertEqual(EXAMPLE['queued_images'], sot.queued_images)
|
self.assertEqual(EXAMPLE['queued_images'], sot.queued_images)
|
||||||
|
|
||||||
|
@mock.patch.object(exceptions, 'raise_from_response', mock.Mock())
|
||||||
|
def test_queue(self):
|
||||||
|
sot = cache.Cache()
|
||||||
|
sess = mock.Mock()
|
||||||
|
sess.put = mock.Mock()
|
||||||
|
sess.default_microversion = '2.14'
|
||||||
|
|
||||||
|
sot.queue(sess, image='image_id')
|
||||||
|
|
||||||
|
sess.put.assert_called_with('cache/image_id',
|
||||||
|
microversion=sess.default_microversion)
|
||||||
|
@@ -26,6 +26,7 @@ from openstack.image.v2 import metadef_schema as _metadef_schema
|
|||||||
from openstack.image.v2 import schema as _schema
|
from openstack.image.v2 import schema as _schema
|
||||||
from openstack.image.v2 import service_info as _service_info
|
from openstack.image.v2 import service_info as _service_info
|
||||||
from openstack.image.v2 import task as _task
|
from openstack.image.v2 import task as _task
|
||||||
|
from openstack import proxy as proxy_base
|
||||||
from openstack.tests.unit.image.v2 import test_image as fake_image
|
from openstack.tests.unit.image.v2 import test_image as fake_image
|
||||||
from openstack.tests.unit import test_proxy_base
|
from openstack.tests.unit import test_proxy_base
|
||||||
|
|
||||||
@@ -901,3 +902,14 @@ class TestCache(TestImageProxy):
|
|||||||
self.proxy.cache_delete_image,
|
self.proxy.cache_delete_image,
|
||||||
_cache.Cache,
|
_cache.Cache,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@mock.patch.object(proxy_base.Proxy, '_get_resource')
|
||||||
|
def test_image_queue(self, mock_get_resource):
|
||||||
|
fake_cache = _cache.Cache()
|
||||||
|
mock_get_resource.return_value = fake_cache
|
||||||
|
self._verify(
|
||||||
|
"openstack.image.v2.cache.Cache.queue",
|
||||||
|
self.proxy.queue_image,
|
||||||
|
method_args=['image-id'],
|
||||||
|
expected_args=[self.proxy, 'image-id'])
|
||||||
|
mock_get_resource.assert_called_once_with(_cache.Cache, None)
|
||||||
|
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Add support for glance Cache API.
|
Reference in New Issue
Block a user