~raxnetworking/nova/bare_bones_melange

« back to all changes in this revision

Viewing changes to nova/api/openstack/image_metadata.py

  • Committer: Rajaram Mallya
  • Date: 2011-09-14 11:46:48 UTC
  • mfrom: (1265.2.302 nova)
  • Revision ID: rajarammallya@gmail.com-20110914114648-a12n6zr1uctd3wxu
Merged from nova trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 
18
18
from webob import exc
19
19
 
 
20
from nova import exception
20
21
from nova import flags
21
22
from nova import image
22
23
from nova import utils
33
34
    def __init__(self):
34
35
        self.image_service = image.get_default_image_service()
35
36
 
36
 
    def _get_metadata(self, context, image_id, image=None):
37
 
        if not image:
38
 
            image = self.image_service.show(context, image_id)
39
 
        metadata = image.get('properties', {})
40
 
        return metadata
 
37
    def _get_image(self, context, image_id):
 
38
        try:
 
39
            return self.image_service.show(context, image_id)
 
40
        except exception.NotFound:
 
41
            msg = _("Image not found.")
 
42
            raise exc.HTTPNotFound(explanation=msg)
41
43
 
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)
47
49
 
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']
51
53
        if id in metadata:
52
54
            return {'meta': {id: metadata[id]}}
53
55
        else:
55
57
 
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():
62
 
                metadata[key] = value
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'])
67
67
 
68
68
    def update(self, req, image_id, id, body):
69
69
        context = req.environ['nova.context']
80
80
        if len(meta) > 1:
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)
 
83
 
 
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)
90
89
 
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)
99
98
 
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()
106
 
        metadata.pop(id)
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)
109
107
 
110
108
 
111
109
def create_resource():