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:
wangxiyuan 2017-04-19 18:16:22 +08:00
parent d51695c1c7
commit e7aac1e973
2 changed files with 15 additions and 5 deletions

View File

@ -65,8 +65,9 @@ class VolumeImageMetadataController(wsgi.Controller):
return
if image_metas:
for vol in resp_volume_list:
image_meta = image_metas.get(vol['id'], {})
vol['volume_image_metadata'] = dict(image_meta)
image_meta = image_metas.get(vol['id'])
if image_meta:
vol['volume_image_metadata'] = dict(image_meta)
@wsgi.extends
def show(self, req, resp_obj, id):

View File

@ -34,7 +34,7 @@ from cinder import volume
def fake_db_volume_get(*args, **kwargs):
return {
'id': fake.VOLUME_ID,
'id': kwargs.get('volume_id') or fake.VOLUME_ID,
'host': 'host001',
'status': 'available',
'size': 5,
@ -53,12 +53,14 @@ def fake_db_volume_get(*args, **kwargs):
def fake_volume_api_get(*args, **kwargs):
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)
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):
@ -129,10 +131,12 @@ class VolumeImageMetadataTest(test.TestCase):
return [
volume['volume_image_metadata']
for volume in jsonutils.loads(body)['volumes']
if volume.get('volume_image_metadata')
]
def _create_volume_and_glance_metadata(self):
ctxt = context.get_admin_context()
# create a bootable volume
db.volume_create(ctxt, {'id': fake.VOLUME_ID, 'status': 'available',
'host': 'test', 'provider_location': '',
'size': 1})
@ -145,6 +149,11 @@ class VolumeImageMetadataTest(test.TestCase):
db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, 'ramdisk_id',
'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):
self._create_volume_and_glance_metadata()
res = self._make_request('/v2/%s/volumes/%s' % (