Merge "Port image-size extension to work in v2.1/v3 framework"
This commit is contained in:
commit
e4a3042bd9
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
|
@ -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:v3:os-hypervisors:discoverable": "",
|
||||||
"compute_extension:image_size": "",
|
"compute_extension:image_size": "",
|
||||||
"compute_extension:v3:images:discoverable": "",
|
"compute_extension:v3:images:discoverable": "",
|
||||||
|
"compute_extension:v3:image-size": "",
|
||||||
|
"compute_extension:v3:image-size:discoverable": "",
|
||||||
"compute_extension:instance_actions": "",
|
"compute_extension:instance_actions": "",
|
||||||
"compute_extension:v3:os-instance-actions": "",
|
"compute_extension:v3:os-instance-actions": "",
|
||||||
"compute_extension:v3:os-instance-actions:discoverable": "",
|
"compute_extension:v3:os-instance-actions:discoverable": "",
|
||||||
|
|
|
@ -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
|
return IMAGES
|
||||||
|
|
||||||
|
|
||||||
class ImageSizeTest(test.NoDBTestCase):
|
class ImageSizeTestV21(test.NoDBTestCase):
|
||||||
content_type = 'application/json'
|
content_type = 'application/json'
|
||||||
prefix = 'OS-EXT-IMG-SIZE'
|
prefix = 'OS-EXT-IMG-SIZE'
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(ImageSizeTest, self).setUp()
|
super(ImageSizeTestV21, self).setUp()
|
||||||
self.stubs.Set(glance.GlanceImageService, 'show', fake_show)
|
self.stubs.Set(glance.GlanceImageService, 'show', fake_show)
|
||||||
self.stubs.Set(glance.GlanceImageService, 'detail', fake_detail)
|
self.stubs.Set(glance.GlanceImageService, 'detail', fake_detail)
|
||||||
self.flags(osapi_compute_extension=['nova.api.openstack.compute'
|
self.flags(osapi_compute_extension=['nova.api.openstack.compute'
|
||||||
|
@ -86,9 +86,15 @@ class ImageSizeTest(test.NoDBTestCase):
|
||||||
def _make_request(self, url):
|
def _make_request(self, url):
|
||||||
req = webob.Request.blank(url)
|
req = webob.Request.blank(url)
|
||||||
req.headers['Accept'] = self.content_type
|
req.headers['Accept'] = self.content_type
|
||||||
res = req.get_response(fakes.wsgi_app())
|
res = req.get_response(self._get_app())
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
def _get_app(self):
|
||||||
|
return fakes.wsgi_app_v3()
|
||||||
|
|
||||||
|
def _get_url(self):
|
||||||
|
return '/v3'
|
||||||
|
|
||||||
def _get_image(self, body):
|
def _get_image(self, body):
|
||||||
return jsonutils.loads(body).get('image')
|
return jsonutils.loads(body).get('image')
|
||||||
|
|
||||||
|
@ -99,7 +105,7 @@ class ImageSizeTest(test.NoDBTestCase):
|
||||||
self.assertEqual(image.get('%s:size' % self.prefix), size)
|
self.assertEqual(image.get('%s:size' % self.prefix), size)
|
||||||
|
|
||||||
def test_show(self):
|
def test_show(self):
|
||||||
url = '/v2/fake/images/1'
|
url = self._get_url() + '/images/1'
|
||||||
res = self._make_request(url)
|
res = self._make_request(url)
|
||||||
|
|
||||||
self.assertEqual(res.status_int, 200)
|
self.assertEqual(res.status_int, 200)
|
||||||
|
@ -107,7 +113,7 @@ class ImageSizeTest(test.NoDBTestCase):
|
||||||
self.assertImageSize(image, 12345678)
|
self.assertImageSize(image, 12345678)
|
||||||
|
|
||||||
def test_detail(self):
|
def test_detail(self):
|
||||||
url = '/v2/fake/images/detail'
|
url = self._get_url() + '/images/detail'
|
||||||
res = self._make_request(url)
|
res = self._make_request(url)
|
||||||
|
|
||||||
self.assertEqual(res.status_int, 200)
|
self.assertEqual(res.status_int, 200)
|
||||||
|
@ -116,7 +122,15 @@ class ImageSizeTest(test.NoDBTestCase):
|
||||||
self.assertImageSize(images[1], 87654321)
|
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'
|
content_type = 'application/xml'
|
||||||
prefix = '{%s}' % image_size.Image_size.namespace
|
prefix = '{%s}' % image_size.Image_size.namespace
|
||||||
|
|
||||||
|
|
|
@ -221,6 +221,7 @@ policy_data = """
|
||||||
"compute_extension:hypervisors": "rule:admin_api",
|
"compute_extension:hypervisors": "rule:admin_api",
|
||||||
"compute_extension:v3:os-hypervisors": "rule:admin_api",
|
"compute_extension:v3:os-hypervisors": "rule:admin_api",
|
||||||
"compute_extension:image_size": "",
|
"compute_extension:image_size": "",
|
||||||
|
"compute_extension:v3:image-size": "",
|
||||||
"compute_extension:instance_actions": "",
|
"compute_extension:instance_actions": "",
|
||||||
"compute_extension:v3:os-instance-actions": "",
|
"compute_extension:v3:os-instance-actions": "",
|
||||||
"compute_extension:instance_actions:events": "is_admin:True",
|
"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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -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
|
hypervisors = nova.api.openstack.compute.plugins.v3.hypervisors:Hypervisors
|
||||||
images = nova.api.openstack.compute.plugins.v3.images:Images
|
images = nova.api.openstack.compute.plugins.v3.images:Images
|
||||||
image_metadata = nova.api.openstack.compute.plugins.v3.image_metadata:ImageMetadata
|
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
|
instance_actions = nova.api.openstack.compute.plugins.v3.instance_actions:InstanceActions
|
||||||
ips = nova.api.openstack.compute.plugins.v3.ips:IPs
|
ips = nova.api.openstack.compute.plugins.v3.ips:IPs
|
||||||
keypairs = nova.api.openstack.compute.plugins.v3.keypairs:Keypairs
|
keypairs = nova.api.openstack.compute.plugins.v3.keypairs:Keypairs
|
||||||
|
|
Loading…
Reference in New Issue