diff --git a/nova/image/glance.py b/nova/image/glance.py index f9022fcdb407..ec2c2e441993 100644 --- a/nova/image/glance.py +++ b/nova/image/glance.py @@ -509,14 +509,25 @@ def _convert_to_string(metadata): def _extract_attributes(image): + #NOTE(hdd): If a key is not found, base.Resource.__getattr__() may perform + # a get(), resulting in a useless request back to glance. This list is + # therefore sorted, with dependent attributes as the end + # 'deleted_at' depends on 'deleted' + # 'checksum' depends on 'status' == 'active' IMAGE_ATTRIBUTES = ['size', 'disk_format', 'owner', - 'container_format', 'checksum', 'id', + 'container_format', 'status', 'id', 'name', 'created_at', 'updated_at', - 'deleted_at', 'deleted', 'status', + 'deleted', 'deleted_at', 'checksum', 'min_disk', 'min_ram', 'is_public'] output = {} + for attr in IMAGE_ATTRIBUTES: - output[attr] = getattr(image, attr, None) + if attr == 'deleted_at' and not output['deleted']: + output[attr] = None + elif attr == 'checksum' and output['status'] != 'active': + output[attr] = None + else: + output[attr] = getattr(image, attr) output['properties'] = getattr(image, 'properties', {})