Merge "Port image-size extension to work in v2.1/v3 framework"
This commit is contained in:
commit
e4a3042bd9
34
doc/v3/api_samples/image-size/image-get-resp.json
Normal file
34
doc/v3/api_samples/image-size/image-get-resp.json
Normal file
@ -0,0 +1,34 @@
|
||||
{
|
||||
"image": {
|
||||
"OS-EXT-IMG-SIZE:size": "74185822",
|
||||
"created": "2011-01-01T01:02:03Z",
|
||||
"id": "70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/v3/images/70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://openstack.example.com/images/70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"rel": "bookmark"
|
||||
},
|
||||
{
|
||||
"href": "http://glance.openstack.example.com/openstack/images/70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"rel": "alternate",
|
||||
"type": "application/vnd.openstack.image"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"architecture": "x86_64",
|
||||
"auto_disk_config": "True",
|
||||
"kernel_id": "nokernel",
|
||||
"ramdisk_id": "nokernel"
|
||||
},
|
||||
"minDisk": 0,
|
||||
"minRam": 0,
|
||||
"name": "fakeimage7",
|
||||
"progress": 100,
|
||||
"status": "ACTIVE",
|
||||
"updated": "2011-01-01T01:02:03Z"
|
||||
}
|
||||
}
|
219
doc/v3/api_samples/image-size/images-details-get-resp.json
Normal file
219
doc/v3/api_samples/image-size/images-details-get-resp.json
Normal file
@ -0,0 +1,219 @@
|
||||
{
|
||||
"images": [
|
||||
{
|
||||
"OS-EXT-IMG-SIZE:size": "74185822",
|
||||
"created": "2011-01-01T01:02:03Z",
|
||||
"id": "70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/v3/images/70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://openstack.example.com/images/70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"rel": "bookmark"
|
||||
},
|
||||
{
|
||||
"href": "http://glance.openstack.example.com/openstack/images/70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"rel": "alternate",
|
||||
"type": "application/vnd.openstack.image"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"architecture": "x86_64",
|
||||
"auto_disk_config": "True",
|
||||
"kernel_id": "nokernel",
|
||||
"ramdisk_id": "nokernel"
|
||||
},
|
||||
"minDisk": 0,
|
||||
"minRam": 0,
|
||||
"name": "fakeimage7",
|
||||
"progress": 100,
|
||||
"status": "ACTIVE",
|
||||
"updated": "2011-01-01T01:02:03Z"
|
||||
},
|
||||
{
|
||||
"OS-EXT-IMG-SIZE:size": "25165824",
|
||||
"created": "2011-01-01T01:02:03Z",
|
||||
"id": "155d900f-4e14-4e4c-a73d-069cbf4541e6",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/v3/images/155d900f-4e14-4e4c-a73d-069cbf4541e6",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://openstack.example.com/images/155d900f-4e14-4e4c-a73d-069cbf4541e6",
|
||||
"rel": "bookmark"
|
||||
},
|
||||
{
|
||||
"href": "http://glance.openstack.example.com/openstack/images/155d900f-4e14-4e4c-a73d-069cbf4541e6",
|
||||
"rel": "alternate",
|
||||
"type": "application/vnd.openstack.image"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"architecture": "x86_64",
|
||||
"kernel_id": "nokernel",
|
||||
"ramdisk_id": "nokernel"
|
||||
},
|
||||
"minDisk": 0,
|
||||
"minRam": 0,
|
||||
"name": "fakeimage123456",
|
||||
"progress": 100,
|
||||
"status": "ACTIVE",
|
||||
"updated": "2011-01-01T01:02:03Z"
|
||||
},
|
||||
{
|
||||
"OS-EXT-IMG-SIZE:size": "58145823",
|
||||
"created": "2011-01-01T01:02:03Z",
|
||||
"id": "a2459075-d96c-40d5-893e-577ff92e721c",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/v3/images/a2459075-d96c-40d5-893e-577ff92e721c",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://openstack.example.com/images/a2459075-d96c-40d5-893e-577ff92e721c",
|
||||
"rel": "bookmark"
|
||||
},
|
||||
{
|
||||
"href": "http://glance.openstack.example.com/openstack/images/a2459075-d96c-40d5-893e-577ff92e721c",
|
||||
"rel": "alternate",
|
||||
"type": "application/vnd.openstack.image"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernel_id": "nokernel",
|
||||
"ramdisk_id": "nokernel"
|
||||
},
|
||||
"minDisk": 0,
|
||||
"minRam": 0,
|
||||
"name": "fakeimage123456",
|
||||
"progress": 100,
|
||||
"status": "ACTIVE",
|
||||
"updated": "2011-01-01T01:02:03Z"
|
||||
},
|
||||
{
|
||||
"OS-EXT-IMG-SIZE:size": "49163826",
|
||||
"created": "2011-01-01T01:02:03Z",
|
||||
"id": "a440c04b-79fa-479c-bed1-0b816eaec379",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/v3/images/a440c04b-79fa-479c-bed1-0b816eaec379",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://openstack.example.com/images/a440c04b-79fa-479c-bed1-0b816eaec379",
|
||||
"rel": "bookmark"
|
||||
},
|
||||
{
|
||||
"href": "http://glance.openstack.example.com/openstack/images/a440c04b-79fa-479c-bed1-0b816eaec379",
|
||||
"rel": "alternate",
|
||||
"type": "application/vnd.openstack.image"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"architecture": "x86_64",
|
||||
"auto_disk_config": "False",
|
||||
"kernel_id": "nokernel",
|
||||
"ramdisk_id": "nokernel"
|
||||
},
|
||||
"minDisk": 0,
|
||||
"minRam": 0,
|
||||
"name": "fakeimage6",
|
||||
"progress": 100,
|
||||
"status": "ACTIVE",
|
||||
"updated": "2011-01-01T01:02:03Z"
|
||||
},
|
||||
{
|
||||
"OS-EXT-IMG-SIZE:size": "26360814",
|
||||
"created": "2011-01-01T01:02:03Z",
|
||||
"id": "c905cedb-7281-47e4-8a62-f26bc5fc4c77",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/v3/images/c905cedb-7281-47e4-8a62-f26bc5fc4c77",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://openstack.example.com/images/c905cedb-7281-47e4-8a62-f26bc5fc4c77",
|
||||
"rel": "bookmark"
|
||||
},
|
||||
{
|
||||
"href": "http://glance.openstack.example.com/openstack/images/c905cedb-7281-47e4-8a62-f26bc5fc4c77",
|
||||
"rel": "alternate",
|
||||
"type": "application/vnd.openstack.image"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernel_id": "155d900f-4e14-4e4c-a73d-069cbf4541e6",
|
||||
"ramdisk_id": null
|
||||
},
|
||||
"minDisk": 0,
|
||||
"minRam": 0,
|
||||
"name": "fakeimage123456",
|
||||
"progress": 100,
|
||||
"status": "ACTIVE",
|
||||
"updated": "2011-01-01T01:02:03Z"
|
||||
},
|
||||
{
|
||||
"OS-EXT-IMG-SIZE:size": "84035174",
|
||||
"created": "2011-01-01T01:02:03Z",
|
||||
"id": "cedef40a-ed67-4d10-800e-17455edce175",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/v3/images/cedef40a-ed67-4d10-800e-17455edce175",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://openstack.example.com/images/cedef40a-ed67-4d10-800e-17455edce175",
|
||||
"rel": "bookmark"
|
||||
},
|
||||
{
|
||||
"href": "http://glance.openstack.example.com/openstack/images/cedef40a-ed67-4d10-800e-17455edce175",
|
||||
"rel": "alternate",
|
||||
"type": "application/vnd.openstack.image"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernel_id": "nokernel",
|
||||
"ramdisk_id": "nokernel"
|
||||
},
|
||||
"minDisk": 0,
|
||||
"minRam": 0,
|
||||
"name": "fakeimage123456",
|
||||
"progress": 100,
|
||||
"status": "ACTIVE",
|
||||
"updated": "2011-01-01T01:02:03Z"
|
||||
},
|
||||
{
|
||||
"OS-EXT-IMG-SIZE:size": "83594576",
|
||||
"created": "2011-01-01T01:02:03Z",
|
||||
"id": "76fa36fc-c930-4bf3-8c8a-ea2a2420deb6",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/v3/images/76fa36fc-c930-4bf3-8c8a-ea2a2420deb6",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://openstack.example.com/images/76fa36fc-c930-4bf3-8c8a-ea2a2420deb6",
|
||||
"rel": "bookmark"
|
||||
},
|
||||
{
|
||||
"href": "http://glance.openstack.example.com/openstack/images/76fa36fc-c930-4bf3-8c8a-ea2a2420deb6",
|
||||
"rel": "alternate",
|
||||
"type": "application/vnd.openstack.image"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernel_id": "nokernel",
|
||||
"ramdisk_id": "nokernel"
|
||||
},
|
||||
"minDisk": 0,
|
||||
"minRam": 0,
|
||||
"name": "fakeimage123456",
|
||||
"progress": 100,
|
||||
"status": "ACTIVE",
|
||||
"updated": "2011-01-01T01:02:03Z"
|
||||
}
|
||||
]
|
||||
}
|
@ -165,6 +165,8 @@
|
||||
"compute_extension:v3:os-hypervisors:discoverable": "",
|
||||
"compute_extension:image_size": "",
|
||||
"compute_extension:v3:images:discoverable": "",
|
||||
"compute_extension:v3:image-size": "",
|
||||
"compute_extension:v3:image-size:discoverable": "",
|
||||
"compute_extension:instance_actions": "",
|
||||
"compute_extension:v3:os-instance-actions": "",
|
||||
"compute_extension:v3:os-instance-actions:discoverable": "",
|
||||
|
65
nova/api/openstack/compute/plugins/v3/image_size.py
Normal file
65
nova/api/openstack/compute/plugins/v3/image_size.py
Normal file
@ -0,0 +1,65 @@
|
||||
# Copyright 2013 Rackspace Hosting
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from nova.api.openstack import extensions
|
||||
from nova.api.openstack import wsgi
|
||||
|
||||
ALIAS = "image-size"
|
||||
|
||||
authorize = extensions.soft_extension_authorizer('compute', 'v3:' + ALIAS)
|
||||
|
||||
|
||||
class ImageSizeController(wsgi.Controller):
|
||||
|
||||
def _extend_image(self, image, image_cache):
|
||||
key = "OS-EXT-IMG-SIZE:size"
|
||||
image[key] = image_cache['size']
|
||||
|
||||
@wsgi.extends
|
||||
def show(self, req, resp_obj, id):
|
||||
context = req.environ["nova.context"]
|
||||
if authorize(context):
|
||||
image_resp = resp_obj.obj['image']
|
||||
# image guaranteed to be in the cache due to the core API adding
|
||||
# it in its 'show' method
|
||||
image_cached = req.get_db_item('images', image_resp['id'])
|
||||
self._extend_image(image_resp, image_cached)
|
||||
|
||||
@wsgi.extends
|
||||
def detail(self, req, resp_obj):
|
||||
context = req.environ['nova.context']
|
||||
if authorize(context):
|
||||
images_resp = list(resp_obj.obj['images'])
|
||||
# images guaranteed to be in the cache due to the core API adding
|
||||
# it in its 'detail' method
|
||||
for image in images_resp:
|
||||
image_cached = req.get_db_item('images', image['id'])
|
||||
self._extend_image(image, image_cached)
|
||||
|
||||
|
||||
class ImageSize(extensions.V3APIExtensionBase):
|
||||
"""Adds image size to image listings."""
|
||||
|
||||
name = "ImageSize"
|
||||
alias = ALIAS
|
||||
version = 1
|
||||
|
||||
def get_controller_extensions(self):
|
||||
controller = ImageSizeController()
|
||||
extension = extensions.ControllerExtension(self, 'images', controller)
|
||||
return [extension]
|
||||
|
||||
def get_resources(self):
|
||||
return []
|
@ -72,12 +72,12 @@ def fake_detail(*args, **kwargs):
|
||||
return IMAGES
|
||||
|
||||
|
||||
class ImageSizeTest(test.NoDBTestCase):
|
||||
class ImageSizeTestV21(test.NoDBTestCase):
|
||||
content_type = 'application/json'
|
||||
prefix = 'OS-EXT-IMG-SIZE'
|
||||
|
||||
def setUp(self):
|
||||
super(ImageSizeTest, self).setUp()
|
||||
super(ImageSizeTestV21, self).setUp()
|
||||
self.stubs.Set(glance.GlanceImageService, 'show', fake_show)
|
||||
self.stubs.Set(glance.GlanceImageService, 'detail', fake_detail)
|
||||
self.flags(osapi_compute_extension=['nova.api.openstack.compute'
|
||||
@ -86,9 +86,15 @@ class ImageSizeTest(test.NoDBTestCase):
|
||||
def _make_request(self, url):
|
||||
req = webob.Request.blank(url)
|
||||
req.headers['Accept'] = self.content_type
|
||||
res = req.get_response(fakes.wsgi_app())
|
||||
res = req.get_response(self._get_app())
|
||||
return res
|
||||
|
||||
def _get_app(self):
|
||||
return fakes.wsgi_app_v3()
|
||||
|
||||
def _get_url(self):
|
||||
return '/v3'
|
||||
|
||||
def _get_image(self, body):
|
||||
return jsonutils.loads(body).get('image')
|
||||
|
||||
@ -99,7 +105,7 @@ class ImageSizeTest(test.NoDBTestCase):
|
||||
self.assertEqual(image.get('%s:size' % self.prefix), size)
|
||||
|
||||
def test_show(self):
|
||||
url = '/v2/fake/images/1'
|
||||
url = self._get_url() + '/images/1'
|
||||
res = self._make_request(url)
|
||||
|
||||
self.assertEqual(res.status_int, 200)
|
||||
@ -107,7 +113,7 @@ class ImageSizeTest(test.NoDBTestCase):
|
||||
self.assertImageSize(image, 12345678)
|
||||
|
||||
def test_detail(self):
|
||||
url = '/v2/fake/images/detail'
|
||||
url = self._get_url() + '/images/detail'
|
||||
res = self._make_request(url)
|
||||
|
||||
self.assertEqual(res.status_int, 200)
|
||||
@ -116,7 +122,15 @@ class ImageSizeTest(test.NoDBTestCase):
|
||||
self.assertImageSize(images[1], 87654321)
|
||||
|
||||
|
||||
class ImageSizeXmlTest(ImageSizeTest):
|
||||
class ImageSizeTestV2(ImageSizeTestV21):
|
||||
def _get_app(self):
|
||||
return fakes.wsgi_app()
|
||||
|
||||
def _get_url(self):
|
||||
return '/v2/fake'
|
||||
|
||||
|
||||
class ImageSizeXmlTest(ImageSizeTestV2):
|
||||
content_type = 'application/xml'
|
||||
prefix = '{%s}' % image_size.Image_size.namespace
|
||||
|
||||
|
@ -221,6 +221,7 @@ policy_data = """
|
||||
"compute_extension:hypervisors": "rule:admin_api",
|
||||
"compute_extension:v3:os-hypervisors": "rule:admin_api",
|
||||
"compute_extension:image_size": "",
|
||||
"compute_extension:v3:image-size": "",
|
||||
"compute_extension:instance_actions": "",
|
||||
"compute_extension:v3:os-instance-actions": "",
|
||||
"compute_extension:instance_actions:events": "is_admin:True",
|
||||
|
@ -0,0 +1,34 @@
|
||||
{
|
||||
"image": {
|
||||
"created": "2011-01-01T01:02:03Z",
|
||||
"id": "%(image_id)s",
|
||||
"links": [
|
||||
{
|
||||
"href": "%(host)s/v3/images/%(image_id)s",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "%(host)s/images/%(image_id)s",
|
||||
"rel": "bookmark"
|
||||
},
|
||||
{
|
||||
"href": "%(glance_host)s/openstack/images/%(image_id)s",
|
||||
"rel": "alternate",
|
||||
"type": "application/vnd.openstack.image"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"architecture": "x86_64",
|
||||
"auto_disk_config": "True",
|
||||
"kernel_id": "nokernel",
|
||||
"ramdisk_id": "nokernel"
|
||||
},
|
||||
"minDisk": 0,
|
||||
"minRam": 0,
|
||||
"name": "fakeimage7",
|
||||
"OS-EXT-IMG-SIZE:size": %(int)s,
|
||||
"progress": 100,
|
||||
"status": "ACTIVE",
|
||||
"updated": "2011-01-01T01:02:03Z"
|
||||
}
|
||||
}
|
@ -0,0 +1,219 @@
|
||||
{
|
||||
"images": [
|
||||
{
|
||||
"created": "2011-01-01T01:02:03Z",
|
||||
"id": "70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"links": [
|
||||
{
|
||||
"href": "%(host)s/v3/images/70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "%(host)s/images/70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"rel": "bookmark"
|
||||
},
|
||||
{
|
||||
"href": "%(glance_host)s/openstack/images/70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"rel": "alternate",
|
||||
"type": "application/vnd.openstack.image"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"architecture": "x86_64",
|
||||
"auto_disk_config": "True",
|
||||
"kernel_id": "nokernel",
|
||||
"ramdisk_id": "nokernel"
|
||||
},
|
||||
"minDisk": 0,
|
||||
"minRam": 0,
|
||||
"name": "fakeimage7",
|
||||
"OS-EXT-IMG-SIZE:size": %(int)s,
|
||||
"progress": 100,
|
||||
"status": "ACTIVE",
|
||||
"updated": "2011-01-01T01:02:03Z"
|
||||
},
|
||||
{
|
||||
"created": "2011-01-01T01:02:03Z",
|
||||
"id": "155d900f-4e14-4e4c-a73d-069cbf4541e6",
|
||||
"links": [
|
||||
{
|
||||
"href": "%(host)s/v3/images/155d900f-4e14-4e4c-a73d-069cbf4541e6",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "%(host)s/images/155d900f-4e14-4e4c-a73d-069cbf4541e6",
|
||||
"rel": "bookmark"
|
||||
},
|
||||
{
|
||||
"href": "%(glance_host)s/openstack/images/155d900f-4e14-4e4c-a73d-069cbf4541e6",
|
||||
"rel": "alternate",
|
||||
"type": "application/vnd.openstack.image"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"architecture": "x86_64",
|
||||
"kernel_id": "nokernel",
|
||||
"ramdisk_id": "nokernel"
|
||||
},
|
||||
"minDisk": 0,
|
||||
"minRam": 0,
|
||||
"name": "fakeimage123456",
|
||||
"progress": 100,
|
||||
"OS-EXT-IMG-SIZE:size": %(int)s,
|
||||
"status": "ACTIVE",
|
||||
"updated": "2011-01-01T01:02:03Z"
|
||||
},
|
||||
{
|
||||
"created": "2011-01-01T01:02:03Z",
|
||||
"id": "a2459075-d96c-40d5-893e-577ff92e721c",
|
||||
"links": [
|
||||
{
|
||||
"href": "%(host)s/v3/images/a2459075-d96c-40d5-893e-577ff92e721c",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "%(host)s/images/a2459075-d96c-40d5-893e-577ff92e721c",
|
||||
"rel": "bookmark"
|
||||
},
|
||||
{
|
||||
"href": "%(glance_host)s/openstack/images/a2459075-d96c-40d5-893e-577ff92e721c",
|
||||
"rel": "alternate",
|
||||
"type": "application/vnd.openstack.image"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernel_id": "nokernel",
|
||||
"ramdisk_id": "nokernel"
|
||||
},
|
||||
"minDisk": 0,
|
||||
"minRam": 0,
|
||||
"name": "fakeimage123456",
|
||||
"OS-EXT-IMG-SIZE:size": %(int)s,
|
||||
"progress": 100,
|
||||
"status": "ACTIVE",
|
||||
"updated": "2011-01-01T01:02:03Z"
|
||||
},
|
||||
{
|
||||
"created": "2011-01-01T01:02:03Z",
|
||||
"id": "a440c04b-79fa-479c-bed1-0b816eaec379",
|
||||
"links": [
|
||||
{
|
||||
"href": "%(host)s/v3/images/a440c04b-79fa-479c-bed1-0b816eaec379",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "%(host)s/images/a440c04b-79fa-479c-bed1-0b816eaec379",
|
||||
"rel": "bookmark"
|
||||
},
|
||||
{
|
||||
"href": "%(glance_host)s/openstack/images/a440c04b-79fa-479c-bed1-0b816eaec379",
|
||||
"rel": "alternate",
|
||||
"type": "application/vnd.openstack.image"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"architecture": "x86_64",
|
||||
"auto_disk_config": "False",
|
||||
"kernel_id": "nokernel",
|
||||
"ramdisk_id": "nokernel"
|
||||
},
|
||||
"minDisk": 0,
|
||||
"minRam": 0,
|
||||
"name": "fakeimage6",
|
||||
"OS-EXT-IMG-SIZE:size": %(int)s,
|
||||
"progress": 100,
|
||||
"status": "ACTIVE",
|
||||
"updated": "2011-01-01T01:02:03Z"
|
||||
},
|
||||
{
|
||||
"created": "2011-01-01T01:02:03Z",
|
||||
"id": "c905cedb-7281-47e4-8a62-f26bc5fc4c77",
|
||||
"links": [
|
||||
{
|
||||
"href": "%(host)s/v3/images/c905cedb-7281-47e4-8a62-f26bc5fc4c77",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "%(host)s/images/c905cedb-7281-47e4-8a62-f26bc5fc4c77",
|
||||
"rel": "bookmark"
|
||||
},
|
||||
{
|
||||
"href": "%(glance_host)s/openstack/images/c905cedb-7281-47e4-8a62-f26bc5fc4c77",
|
||||
"rel": "alternate",
|
||||
"type": "application/vnd.openstack.image"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernel_id": "155d900f-4e14-4e4c-a73d-069cbf4541e6",
|
||||
"ramdisk_id": null
|
||||
},
|
||||
"minDisk": 0,
|
||||
"minRam": 0,
|
||||
"name": "fakeimage123456",
|
||||
"OS-EXT-IMG-SIZE:size": %(int)s,
|
||||
"progress": 100,
|
||||
"status": "ACTIVE",
|
||||
"updated": "2011-01-01T01:02:03Z"
|
||||
},
|
||||
{
|
||||
"created": "2011-01-01T01:02:03Z",
|
||||
"id": "cedef40a-ed67-4d10-800e-17455edce175",
|
||||
"links": [
|
||||
{
|
||||
"href": "%(host)s/v3/images/cedef40a-ed67-4d10-800e-17455edce175",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "%(host)s/images/cedef40a-ed67-4d10-800e-17455edce175",
|
||||
"rel": "bookmark"
|
||||
},
|
||||
{
|
||||
"href": "%(glance_host)s/openstack/images/cedef40a-ed67-4d10-800e-17455edce175",
|
||||
"rel": "alternate",
|
||||
"type": "application/vnd.openstack.image"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernel_id": "nokernel",
|
||||
"ramdisk_id": "nokernel"
|
||||
},
|
||||
"minDisk": 0,
|
||||
"minRam": 0,
|
||||
"name": "fakeimage123456",
|
||||
"OS-EXT-IMG-SIZE:size": %(int)s,
|
||||
"progress": 100,
|
||||
"status": "ACTIVE",
|
||||
"updated": "2011-01-01T01:02:03Z"
|
||||
},
|
||||
{
|
||||
"created": "2011-01-01T01:02:03Z",
|
||||
"id": "76fa36fc-c930-4bf3-8c8a-ea2a2420deb6",
|
||||
"links": [
|
||||
{
|
||||
"href": "%(host)s/v3/images/76fa36fc-c930-4bf3-8c8a-ea2a2420deb6",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "%(host)s/images/76fa36fc-c930-4bf3-8c8a-ea2a2420deb6",
|
||||
"rel": "bookmark"
|
||||
},
|
||||
{
|
||||
"href": "%(glance_host)s/openstack/images/76fa36fc-c930-4bf3-8c8a-ea2a2420deb6",
|
||||
"rel": "alternate",
|
||||
"type": "application/vnd.openstack.image"
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernel_id": "nokernel",
|
||||
"ramdisk_id": "nokernel"
|
||||
},
|
||||
"minDisk": 0,
|
||||
"minRam": 0,
|
||||
"name": "fakeimage123456",
|
||||
"OS-EXT-IMG-SIZE:size": %(int)s,
|
||||
"progress": 100,
|
||||
"status": "ACTIVE",
|
||||
"updated": "2011-01-01T01:02:03Z"
|
||||
}
|
||||
]
|
||||
}
|
37
nova/tests/integrated/v3/test_image_size.py
Normal file
37
nova/tests/integrated/v3/test_image_size.py
Normal file
@ -0,0 +1,37 @@
|
||||
# Copyright 2012 Nebula, Inc.
|
||||
# Copyright 2013 IBM Corp.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
|
||||
from nova.tests.image import fake
|
||||
from nova.tests.integrated.v3 import api_sample_base
|
||||
|
||||
|
||||
class ImageSizeSampleJsonTests(api_sample_base.ApiSampleTestBaseV3):
|
||||
extension_name = "image-size"
|
||||
extra_extensions_to_load = ["images", "image-metadata"]
|
||||
|
||||
def test_show(self):
|
||||
# Get api sample of one single image details request.
|
||||
image_id = fake.get_valid_image_id()
|
||||
response = self._do_get('images/%s' % image_id)
|
||||
subs = self._get_regexes()
|
||||
subs['image_id'] = image_id
|
||||
self._verify_response('image-get-resp', subs, response, 200)
|
||||
|
||||
def test_detail(self):
|
||||
# Get api sample of all images details request.
|
||||
response = self._do_get('images/detail')
|
||||
subs = self._get_regexes()
|
||||
self._verify_response('images-details-get-resp', subs, response, 200)
|
@ -90,6 +90,7 @@ nova.api.v3.extensions =
|
||||
hypervisors = nova.api.openstack.compute.plugins.v3.hypervisors:Hypervisors
|
||||
images = nova.api.openstack.compute.plugins.v3.images:Images
|
||||
image_metadata = nova.api.openstack.compute.plugins.v3.image_metadata:ImageMetadata
|
||||
image_size = nova.api.openstack.compute.plugins.v3.image_size:ImageSize
|
||||
instance_actions = nova.api.openstack.compute.plugins.v3.instance_actions:InstanceActions
|
||||
ips = nova.api.openstack.compute.plugins.v3.ips:IPs
|
||||
keypairs = nova.api.openstack.compute.plugins.v3.keypairs:Keypairs
|
||||
|
Loading…
x
Reference in New Issue
Block a user