diff options
| author | Jenkins <jenkins@review.openstack.org> | 2011-12-12 00:45:28 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2011-12-12 00:45:28 +0000 |
| commit | a4e2ed8cb9ba71e96dfadb96f8171054a0d30914 (patch) | |
| tree | 1eb57529f5fcfbd97b3c1f3c3285ba5b61e1721d /nova/api | |
| parent | ce2d62f95cd9b62858c9b4ef37b418881ceaef07 (diff) | |
| parent | a33b4d616d8bb877f295383e8649df14c1e19b3c (diff) | |
| download | nova-a4e2ed8cb9ba71e96dfadb96f8171054a0d30914.tar.gz nova-a4e2ed8cb9ba71e96dfadb96f8171054a0d30914.tar.xz nova-a4e2ed8cb9ba71e96dfadb96f8171054a0d30914.zip | |
Merge "Add templates for selected resource extensions."
Diffstat (limited to 'nova/api')
| -rw-r--r-- | nova/api/openstack/v2/contrib/virtual_storage_arrays.py | 228 |
1 files changed, 179 insertions, 49 deletions
diff --git a/nova/api/openstack/v2/contrib/virtual_storage_arrays.py b/nova/api/openstack/v2/contrib/virtual_storage_arrays.py index f3a7831d5..cd87e3462 100644 --- a/nova/api/openstack/v2/contrib/virtual_storage_arrays.py +++ b/nova/api/openstack/v2/contrib/virtual_storage_arrays.py @@ -26,6 +26,7 @@ from nova.api.openstack.v2.contrib import volumes from nova.api.openstack.v2 import extensions from nova.api.openstack.v2 import servers from nova.api.openstack import wsgi +from nova.api.openstack import xmlutil from nova import compute from nova.compute import instance_types from nova import network @@ -84,22 +85,6 @@ def _vsa_view(context, vsa, details=False, instances=None): class VsaController(object): """The Virtual Storage Array API controller for the OpenStack API.""" - _serialization_metadata = { - 'application/xml': { - "attributes": { - "vsa": [ - "id", - "name", - "displayName", - "displayDescription", - "createTime", - "status", - "vcType", - "vcCount", - "driveCount", - "ipAddress", - ]}}} - def __init__(self): self.vsa_api = vsa.API() self.compute_api = compute.API() @@ -230,6 +215,45 @@ class VsaController(object): # Placeholder +def make_vsa(elem): + elem.set('id') + elem.set('name') + elem.set('displayName') + elem.set('displayDescription') + elem.set('createTime') + elem.set('status') + elem.set('vcType') + elem.set('vcCount') + elem.set('driveCount') + elem.set('ipAddress') + + +class VsaTemplate(xmlutil.TemplateBuilder): + def construct(self): + root = xmlutil.TemplateElement('vsa', selector='vsa') + make_vsa(root) + return xmlutil.MasterTemplate(root, 1) + + +class VsaSetTemplate(xmlutil.TemplateBuilder): + def construct(self): + root = xmlutil.TemplateElement('vsaSet') + elem = xmlutil.SubTemplateElement(root, 'vsa', selector='vsaSet') + make_vsa(elem) + return xmlutil.MasterTemplate(root, 1) + + +class VsaSerializer(xmlutil.XMLTemplateSerializer): + def default(self): + return VsaTemplate() + + def index(self): + return VsaSetTemplate() + + def detail(self): + return VsaSetTemplate() + + class VsaVolumeDriveController(volumes.VolumeController): """The base class for VSA volumes & drives. @@ -238,21 +262,6 @@ class VsaVolumeDriveController(volumes.VolumeController): """ - _serialization_metadata = { - 'application/xml': { - "attributes": { - "volume": [ - "id", - "name", - "status", - "size", - "availabilityZone", - "createdAt", - "displayName", - "displayDescription", - "vsaId", - ]}}} - def __init__(self): self.volume_api = volume.API() self.vsa_api = vsa.API() @@ -401,6 +410,12 @@ class VsaVolumeDriveController(volumes.VolumeController): return super(VsaVolumeDriveController, self).show(req, id) +def make_volume(elem): + volumes.make_volume(elem) + elem.set('name') + elem.set('vsaId') + + class VsaVolumeController(VsaVolumeDriveController): """The VSA volume API controller for the Openstack API. @@ -416,6 +431,32 @@ class VsaVolumeController(VsaVolumeDriveController): super(VsaVolumeController, self).__init__() +class VsaVolumeTemplate(xmlutil.TemplateBuilder): + def construct(self): + root = xmlutil.TemplateElement('volume', selector='volume') + make_volume(root) + return xmlutil.MasterTemplate(root, 1) + + +class VsaVolumesTemplate(xmlutil.TemplateBuilder): + def construct(self): + root = xmlutil.TemplateElement('volumes') + elem = xmlutil.SubTemplateElement(root, 'volume', selector='volumes') + make_volume(elem) + return xmlutil.MasterTemplate(root, 1) + + +class VsaVolumeSerializer(xmlutil.XMLTemplateSerializer): + def default(self): + return VsaVolumeTemplate() + + def index(self): + return VsaVolumesTemplate() + + def detail(self): + return VsaVolumesTemplate() + + class VsaDriveController(VsaVolumeDriveController): """The VSA Drive API controller for the Openstack API. @@ -443,27 +484,35 @@ class VsaDriveController(VsaVolumeDriveController): raise exc.HTTPBadRequest() +class VsaDriveTemplate(xmlutil.TemplateBuilder): + def construct(self): + root = xmlutil.TemplateElement('drive', selector='drive') + make_volume(root) + return xmlutil.MasterTemplate(root, 1) + + +class VsaDrivesTemplate(xmlutil.TemplateBuilder): + def construct(self): + root = xmlutil.TemplateElement('drives') + elem = xmlutil.SubTemplateElement(root, 'drive', selector='drives') + make_volume(elem) + return xmlutil.MasterTemplate(root, 1) + + +class VsaDriveSerializer(xmlutil.XMLTemplateSerializer): + def default(self): + return VsaDriveTemplate() + + def index(self): + return VsaDrivesTemplate() + + def detail(self): + return VsaDrivesTemplate() + + class VsaVPoolController(object): """The vPool VSA API controller for the OpenStack API.""" - _serialization_metadata = { - 'application/xml': { - "attributes": { - "vpool": [ - "id", - "vsaId", - "name", - "displayName", - "displayDescription", - "driveCount", - "driveIds", - "protection", - "stripeSize", - "stripeWidth", - "createTime", - "status", - ]}}} - def __init__(self): self.vsa_api = vsa.API() super(VsaVPoolController, self).__init__() @@ -489,6 +538,48 @@ class VsaVPoolController(object): raise exc.HTTPBadRequest() +def make_vpool(elem): + elem.set('id') + elem.set('vsaId') + elem.set('name') + elem.set('displayName') + elem.set('displayDescription') + elem.set('driveCount') + elem.set('protection') + elem.set('stripeSize') + elem.set('stripeWidth') + elem.set('createTime') + elem.set('status') + + drive_ids = xmlutil.SubTemplateElement(elem, 'driveIds') + drive_id = xmlutil.SubTemplateElement(drive_ids, 'driveId', + selector='driveIds') + drive_id.text = xmlutil.Selector() + + +class VsaVPoolTemplate(xmlutil.TemplateBuilder): + def construct(self): + root = xmlutil.TemplateElement('vpool', selector='vpool') + make_vpool(root) + return xmlutil.MasterTemplate(root, 1) + + +class VsaVPoolsTemplate(xmlutil.TemplateBuilder): + def construct(self): + root = xmlutil.TemplateElement('vpools') + elem = xmlutil.SubTemplateElement(root, 'vpool', selector='vpools') + make_vpool(elem) + return xmlutil.MasterTemplate(root, 1) + + +class VsaVPoolSerializer(xmlutil.XMLTemplateSerializer): + def default(self): + return VsaVPoolTemplate() + + def index(self): + return VsaVPoolsTemplate() + + class VsaVCController(servers.Controller): """The VSA Virtual Controller API controller for the OpenStack API.""" @@ -554,9 +645,16 @@ class Virtual_storage_arrays(extensions.ExtensionDescriptor): def get_resources(self): resources = [] + + body_serializers = { + 'application/xml': VsaSerializer(), + } + serializer = wsgi.ResponseSerializer(body_serializers) + res = extensions.ResourceExtension( 'zadr-vsa', VsaController(), + serializer=serializer, collection_actions={'detail': 'GET'}, member_actions={'add_capacity': 'POST', 'remove_capacity': 'POST', @@ -564,31 +662,63 @@ class Virtual_storage_arrays(extensions.ExtensionDescriptor): 'disassociate_address': 'POST'}) resources.append(res) + body_serializers = { + 'application/xml': VsaVolumeSerializer(), + } + serializer = wsgi.ResponseSerializer(body_serializers) + res = extensions.ResourceExtension('volumes', VsaVolumeController(), + serializer=serializer, collection_actions={'detail': 'GET'}, parent=dict( member_name='vsa', collection_name='zadr-vsa')) resources.append(res) + body_serializers = { + 'application/xml': VsaDriveSerializer(), + } + serializer = wsgi.ResponseSerializer(body_serializers) + res = extensions.ResourceExtension('drives', VsaDriveController(), + serializer=serializer, collection_actions={'detail': 'GET'}, parent=dict( member_name='vsa', collection_name='zadr-vsa')) resources.append(res) + body_serializers = { + 'application/xml': VsaVPoolSerializer(), + } + serializer = wsgi.ResponseSerializer(body_serializers) + res = extensions.ResourceExtension('vpools', VsaVPoolController(), + serializer=serializer, parent=dict( member_name='vsa', collection_name='zadr-vsa')) resources.append(res) + headers_serializer = servers.HeadersSerializer() + body_serializers = { + 'application/xml': servers.ServerXMLSerializer(), + } + serializer = wsgi.ResponseSerializer(body_serializers, + headers_serializer) + + body_deserializers = { + 'application/xml': servers.ServerXMLDeserializer(), + } + deserializer = wsgi.RequestDeserializer(body_deserializers) + res = extensions.ResourceExtension('instances', VsaVCController(), + serializer=serializer, + deserializer=deserializer, parent=dict( member_name='vsa', collection_name='zadr-vsa')) |
