27
27
from nova.volume import volume_types
30
def make_voltype(elem):
33
extra_specs = xmlutil.make_flat_dict('extra_specs', selector='extra_specs')
34
elem.append(extra_specs)
37
class VolumeTypeTemplate(xmlutil.TemplateBuilder):
39
root = xmlutil.TemplateElement('volume_type', selector='volume_type')
41
return xmlutil.MasterTemplate(root, 1)
44
class VolumeTypesTemplate(xmlutil.TemplateBuilder):
46
root = xmlutil.TemplateElement('volume_types')
47
sel = lambda obj, do_raise=False: obj.values()
48
elem = xmlutil.SubTemplateElement(root, 'volume_type', selector=sel)
50
return xmlutil.MasterTemplate(root, 1)
30
53
class VolumeTypesController(object):
31
54
""" The volume types API controller for the Openstack API """
56
@wsgi.serializers(xml=VolumeTypesTemplate)
33
57
def index(self, req):
34
58
""" Returns the list of volume types """
35
59
context = req.environ['nova.context']
36
60
return volume_types.get_all_types(context)
62
@wsgi.serializers(xml=VolumeTypeTemplate)
38
63
def create(self, req, body):
39
64
"""Creates a new volume type."""
40
65
context = req.environ['nova.context']
93
def make_voltype(elem):
96
extra_specs = xmlutil.make_flat_dict('extra_specs', selector='extra_specs')
97
elem.append(extra_specs)
100
class VolumeTypeTemplate(xmlutil.TemplateBuilder):
102
root = xmlutil.TemplateElement('volume_type', selector='volume_type')
104
return xmlutil.MasterTemplate(root, 1)
107
class VolumeTypesTemplate(xmlutil.TemplateBuilder):
109
root = xmlutil.TemplateElement('volume_types')
110
sel = lambda obj, do_raise=False: obj.values()
111
elem = xmlutil.SubTemplateElement(root, 'volume_type', selector=sel)
113
return xmlutil.MasterTemplate(root, 1)
116
class VolumeTypesSerializer(xmlutil.XMLTemplateSerializer):
118
return VolumeTypesTemplate()
121
return VolumeTypeTemplate()
119
class VolumeTypeExtraSpecsTemplate(xmlutil.TemplateBuilder):
121
root = xmlutil.make_flat_dict('extra_specs', selector='extra_specs')
122
return xmlutil.MasterTemplate(root, 1)
125
class VolumeTypeExtraSpecTemplate(xmlutil.TemplateBuilder):
127
tagname = xmlutil.Selector('key')
129
def extraspec_sel(obj, do_raise=False):
130
# Have to extract the key and value for later use...
131
key, value = obj.items()[0]
132
return dict(key=key, value=value)
134
root = xmlutil.TemplateElement(tagname, selector=extraspec_sel)
136
return xmlutil.MasterTemplate(root, 1)
124
139
class VolumeTypeExtraSpecsController(object):
132
147
return dict(extra_specs=specs_dict)
134
149
def _check_body(self, body):
135
if body == None or body == "":
150
if body is None or body == "":
136
151
expl = _('No Request Body')
137
152
raise exc.HTTPBadRequest(explanation=expl)
154
@wsgi.serializers(xml=VolumeTypeExtraSpecsTemplate)
139
155
def index(self, req, vol_type_id):
140
156
""" Returns the list of extra specs for a given volume type """
141
157
context = req.environ['nova.context']
142
158
return self._get_extra_specs(context, vol_type_id)
160
@wsgi.serializers(xml=VolumeTypeExtraSpecsTemplate)
144
161
def create(self, req, vol_type_id, body):
145
162
self._check_body(body)
146
163
context = req.environ['nova.context']
153
170
self._handle_quota_error(error)
173
@wsgi.serializers(xml=VolumeTypeExtraSpecTemplate)
156
174
def update(self, req, vol_type_id, id, body):
157
175
self._check_body(body)
158
176
context = req.environ['nova.context']
192
@wsgi.serializers(xml=VolumeTypeExtraSpecTemplate)
174
193
def show(self, req, vol_type_id, id):
175
194
""" Return a single extra spec item """
176
195
context = req.environ['nova.context']
195
class VolumeTypeExtraSpecsTemplate(xmlutil.TemplateBuilder):
197
root = xmlutil.make_flat_dict('extra_specs', selector='extra_specs')
198
return xmlutil.MasterTemplate(root, 1)
201
class VolumeTypeExtraSpecTemplate(xmlutil.TemplateBuilder):
203
tagname = xmlutil.Selector('key')
205
def extraspec_sel(obj, do_raise=False):
206
# Have to extract the key and value for later use...
207
key, value = obj.items()[0]
208
return dict(key=key, value=value)
210
root = xmlutil.TemplateElement(tagname, selector=extraspec_sel)
212
return xmlutil.MasterTemplate(root, 1)
215
class VolumeTypeExtraSpecsSerializer(xmlutil.XMLTemplateSerializer):
217
return VolumeTypeExtraSpecsTemplate()
220
return VolumeTypeExtraSpecsTemplate()
223
return VolumeTypeExtraSpecTemplate()
226
return VolumeTypeExtraSpecTemplate()
229
214
class Volumetypes(extensions.ExtensionDescriptor):
230
215
"""Volume types support"""
232
217
name = "VolumeTypes"
233
218
alias = "os-volume-types"
234
namespace = "http://docs.openstack.org/ext/volume_types/api/v1.1"
219
namespace = "http://docs.openstack.org/compute/ext/volume_types/api/v1.1"
235
220
updated = "2011-08-24T00:00:00+00:00"
237
222
def get_resources(self):
241
'application/xml': VolumeTypesSerializer(),
243
serializer = wsgi.ResponseSerializer(body_serializers)
245
225
res = extensions.ResourceExtension(
246
226
'os-volume-types',
247
VolumeTypesController(),
248
serializer=serializer)
227
VolumeTypesController())
249
228
resources.append(res)
252
'application/xml': VolumeTypeExtraSpecsSerializer(),
254
serializer = wsgi.ResponseSerializer(body_serializers)
256
230
res = extensions.ResourceExtension('extra_specs',
257
231
VolumeTypeExtraSpecsController(),
258
serializer=serializer,
260
233
member_name='vol_type',
261
234
collection_name='os-volume-types'))