Don't return empty volume_image_metadata when list volume
Now the response format of volume show and list is not the same if there are some bootable volumes already in Cinder. Volume list will always return volume_image_metadata property but volume show won't return the empty volume_image_metadata. This behavior causes a tempest error.(See bug for more detail) This patch let the response format be the same. Change-Id: If8022b9c06afbcc011db0a62f279ad3520122baa Closes-bug: #1680122
This commit is contained in:
parent
d51695c1c7
commit
e7aac1e973
@ -65,8 +65,9 @@ class VolumeImageMetadataController(wsgi.Controller):
|
|||||||
return
|
return
|
||||||
if image_metas:
|
if image_metas:
|
||||||
for vol in resp_volume_list:
|
for vol in resp_volume_list:
|
||||||
image_meta = image_metas.get(vol['id'], {})
|
image_meta = image_metas.get(vol['id'])
|
||||||
vol['volume_image_metadata'] = dict(image_meta)
|
if image_meta:
|
||||||
|
vol['volume_image_metadata'] = dict(image_meta)
|
||||||
|
|
||||||
@wsgi.extends
|
@wsgi.extends
|
||||||
def show(self, req, resp_obj, id):
|
def show(self, req, resp_obj, id):
|
||||||
|
@ -34,7 +34,7 @@ from cinder import volume
|
|||||||
|
|
||||||
def fake_db_volume_get(*args, **kwargs):
|
def fake_db_volume_get(*args, **kwargs):
|
||||||
return {
|
return {
|
||||||
'id': fake.VOLUME_ID,
|
'id': kwargs.get('volume_id') or fake.VOLUME_ID,
|
||||||
'host': 'host001',
|
'host': 'host001',
|
||||||
'status': 'available',
|
'status': 'available',
|
||||||
'size': 5,
|
'size': 5,
|
||||||
@ -53,12 +53,14 @@ def fake_db_volume_get(*args, **kwargs):
|
|||||||
|
|
||||||
def fake_volume_api_get(*args, **kwargs):
|
def fake_volume_api_get(*args, **kwargs):
|
||||||
ctx = context.RequestContext(fake.USER_ID, fake.PROJECT_ID, True)
|
ctx = context.RequestContext(fake.USER_ID, fake.PROJECT_ID, True)
|
||||||
db_volume = fake_db_volume_get()
|
db_volume = fake_db_volume_get(volume_id=kwargs.get('volume_id'))
|
||||||
return fake_volume.fake_volume_obj(ctx, **db_volume)
|
return fake_volume.fake_volume_obj(ctx, **db_volume)
|
||||||
|
|
||||||
|
|
||||||
def fake_volume_get_all(*args, **kwargs):
|
def fake_volume_get_all(*args, **kwargs):
|
||||||
return objects.VolumeList(objects=[fake_volume_api_get()])
|
return objects.VolumeList(objects=[fake_volume_api_get(),
|
||||||
|
fake_volume_api_get(
|
||||||
|
volume_id=fake.VOLUME2_ID)])
|
||||||
|
|
||||||
|
|
||||||
def fake_volume_get_all_empty(*args, **kwargs):
|
def fake_volume_get_all_empty(*args, **kwargs):
|
||||||
@ -129,10 +131,12 @@ class VolumeImageMetadataTest(test.TestCase):
|
|||||||
return [
|
return [
|
||||||
volume['volume_image_metadata']
|
volume['volume_image_metadata']
|
||||||
for volume in jsonutils.loads(body)['volumes']
|
for volume in jsonutils.loads(body)['volumes']
|
||||||
|
if volume.get('volume_image_metadata')
|
||||||
]
|
]
|
||||||
|
|
||||||
def _create_volume_and_glance_metadata(self):
|
def _create_volume_and_glance_metadata(self):
|
||||||
ctxt = context.get_admin_context()
|
ctxt = context.get_admin_context()
|
||||||
|
# create a bootable volume
|
||||||
db.volume_create(ctxt, {'id': fake.VOLUME_ID, 'status': 'available',
|
db.volume_create(ctxt, {'id': fake.VOLUME_ID, 'status': 'available',
|
||||||
'host': 'test', 'provider_location': '',
|
'host': 'test', 'provider_location': '',
|
||||||
'size': 1})
|
'size': 1})
|
||||||
@ -145,6 +149,11 @@ class VolumeImageMetadataTest(test.TestCase):
|
|||||||
db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, 'ramdisk_id',
|
db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, 'ramdisk_id',
|
||||||
'someramdisk')
|
'someramdisk')
|
||||||
|
|
||||||
|
# create a unbootable volume
|
||||||
|
db.volume_create(ctxt, {'id': fake.VOLUME2_ID, 'status': 'available',
|
||||||
|
'host': 'test', 'provider_location': '',
|
||||||
|
'size': 1})
|
||||||
|
|
||||||
def test_get_volume(self):
|
def test_get_volume(self):
|
||||||
self._create_volume_and_glance_metadata()
|
self._create_volume_and_glance_metadata()
|
||||||
res = self._make_request('/v2/%s/volumes/%s' % (
|
res = self._make_request('/v2/%s/volumes/%s' % (
|
||||||
|
Loading…
Reference in New Issue
Block a user