33
34
def __init__(self):
34
35
self.image_service = image.get_default_image_service()
36
def _get_metadata(self, context, image_id, image=None):
38
image = self.image_service.show(context, image_id)
39
metadata = image.get('properties', {})
37
def _get_image(self, context, image_id):
39
return self.image_service.show(context, image_id)
40
except exception.NotFound:
41
msg = _("Image not found.")
42
raise exc.HTTPNotFound(explanation=msg)
42
44
def index(self, req, image_id):
43
45
"""Returns the list of metadata for a given instance"""
44
46
context = req.environ['nova.context']
45
metadata = self._get_metadata(context, image_id)
47
metadata = self._get_image(context, image_id)['properties']
46
48
return dict(metadata=metadata)
48
50
def show(self, req, image_id, id):
49
51
context = req.environ['nova.context']
50
metadata = self._get_metadata(context, image_id)
52
metadata = self._get_image(context, image_id)['properties']
52
54
return {'meta': {id: metadata[id]}}
56
58
def create(self, req, image_id, body):
57
59
context = req.environ['nova.context']
58
img = self.image_service.show(context, image_id)
59
metadata = self._get_metadata(context, image_id, img)
60
image = self._get_image(context, image_id)
60
61
if 'metadata' in body:
61
62
for key, value in body['metadata'].iteritems():
63
common.check_img_metadata_quota_limit(context, metadata)
64
img['properties'] = metadata
65
self.image_service.update(context, image_id, img, None)
66
return dict(metadata=metadata)
63
image['properties'][key] = value
64
common.check_img_metadata_quota_limit(context, image['properties'])
65
self.image_service.update(context, image_id, image, None)
66
return dict(metadata=image['properties'])
68
68
def update(self, req, image_id, id, body):
69
69
context = req.environ['nova.context']
81
81
expl = _('Request body contains too many items')
82
82
raise exc.HTTPBadRequest(explanation=expl)
83
img = self.image_service.show(context, image_id)
84
metadata = self._get_metadata(context, image_id, img)
85
metadata[id] = meta[id]
86
common.check_img_metadata_quota_limit(context, metadata)
87
img['properties'] = metadata
88
self.image_service.update(context, image_id, img, None)
84
image = self._get_image(context, image_id)
85
image['properties'][id] = meta[id]
86
common.check_img_metadata_quota_limit(context, image['properties'])
87
self.image_service.update(context, image_id, image, None)
89
88
return dict(meta=meta)
91
90
def update_all(self, req, image_id, body):
92
91
context = req.environ['nova.context']
93
img = self.image_service.show(context, image_id)
92
image = self._get_image(context, image_id)
94
93
metadata = body.get('metadata', {})
95
94
common.check_img_metadata_quota_limit(context, metadata)
96
img['properties'] = metadata
97
self.image_service.update(context, image_id, img, None)
95
image['properties'] = metadata
96
self.image_service.update(context, image_id, image, None)
98
97
return dict(metadata=metadata)
100
99
def delete(self, req, image_id, id):
101
100
context = req.environ['nova.context']
102
img = self.image_service.show(context, image_id)
103
metadata = self._get_metadata(context, image_id)
104
if not id in metadata:
105
raise exc.HTTPNotFound()
107
img['properties'] = metadata
108
self.image_service.update(context, image_id, img, None)
101
image = self._get_image(context, image_id)
102
if not id in image['properties']:
103
msg = _("Invalid metadata key")
104
raise exc.HTTPNotFound(explanation=msg)
105
image['properties'].pop(id)
106
self.image_service.update(context, image_id, image, None)
111
109
def create_resource():