From 9e74803d5eb8a70ba829ac0569f1cd6cd372a6f2 Mon Sep 17 00:00:00 2001 From: "vladimir.p" Date: Fri, 22 Jul 2011 15:14:29 -0700 Subject: Reverted volume driver part --- nova/api/ec2/cloud.py | 19 ++++-- nova/api/openstack/contrib/drive_types.py | 55 ++++++++-------- .../openstack/contrib/virtual_storage_arrays.py | 77 +++++++++++----------- 3 files changed, 78 insertions(+), 73 deletions(-) (limited to 'nova/api') diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py index e31b755de..7d0ce360f 100644 --- a/nova/api/ec2/cloud.py +++ b/nova/api/ec2/cloud.py @@ -889,12 +889,15 @@ class CloudController(object): "%(rpm)s %(capabilities)s %(visible)s"), locals()) - rv = drive_types.drive_type_create(context, type, size_gb, rpm, - capabilities, visible, name) + rv = drive_types.create(context, type, size_gb, rpm, + capabilities, visible, name) return {'driveTypeSet': [dict(rv)]} def update_drive_type(self, context, name, **kwargs): LOG.audit(_("Update Drive Type %s"), name) + + dtype = drive_types.get_by_name(context, name) + updatable_fields = ['type', 'size_gb', 'rpm', @@ -906,16 +909,18 @@ class CloudController(object): kwargs[field] is not None and \ kwargs[field] != '': changes[field] = kwargs[field] + if changes: - drive_types.drive_type_update(context, name, **changes) + drive_types.update(context, dtype['id'], **changes) return True def rename_drive_type(self, context, name, new_name): - drive_types.drive_type_rename(context, name, new_name) + drive_types.rename(context, name, new_name) return True def delete_drive_type(self, context, name): - drive_types.drive_type_delete(context, name) + dtype = drive_types.get_by_name(context, name) + drive_types.delete(context, dtype['id']) return True def describe_drive_types(self, context, names=None, visible=True): @@ -923,11 +928,11 @@ class CloudController(object): drives = [] if names is not None: for name in names: - drive = drive_types.drive_type_get_by_name(context, name) + drive = drive_types.get_by_name(context, name) if drive['visible'] == visible: drives.append(drive) else: - drives = drive_types.drive_type_get_all(context, visible) + drives = drive_types.get_all(context, visible) # VP-TODO: Change it later to EC2 compatible func (output) diff --git a/nova/api/openstack/contrib/drive_types.py b/nova/api/openstack/contrib/drive_types.py index 85b3170cb..590eaaec0 100644 --- a/nova/api/openstack/contrib/drive_types.py +++ b/nova/api/openstack/contrib/drive_types.py @@ -21,6 +21,7 @@ from webob import exc from nova.vsa import drive_types +from nova import exception from nova import db from nova import quota from nova import log as logging @@ -32,6 +33,19 @@ from nova.api.openstack import wsgi LOG = logging.getLogger("nova.api.drive_types") +def _drive_type_view(drive): + """Maps keys for drive types view.""" + d = {} + + d['id'] = drive['id'] + d['displayName'] = drive['name'] + d['type'] = drive['type'] + d['size'] = drive['size_gb'] + d['rpm'] = drive['rpm'] + d['capabilities'] = drive['capabilities'] + return d + + class DriveTypeController(object): """The Drive Type API controller for the OpenStack API.""" @@ -47,25 +61,13 @@ class DriveTypeController(object): "capabilities", ]}}} - def _drive_type_view(self, context, drive): - """Maps keys for drive types view.""" - d = {} - - d['id'] = drive['id'] - d['displayName'] = drive['name'] - d['type'] = drive['type'] - d['size'] = drive['size_gb'] - d['rpm'] = drive['rpm'] - d['capabilities'] = drive['capabilities'] - return d - def index(self, req): """Returns a list of drive types.""" context = req.environ['nova.context'] - drive_types = drive_types.drive_type_get_all(context) - limited_list = common.limited(drive_types, req) - res = [self._drive_type_view(context, drive) for drive in limited_list] + dtypes = drive_types.get_all(context) + limited_list = common.limited(dtypes, req) + res = [_drive_type_view(drive) for drive in limited_list] return {'drive_types': res} def show(self, req, id): @@ -73,11 +75,11 @@ class DriveTypeController(object): context = req.environ['nova.context'] try: - drive = drive_types.drive_type_get(context, id) + drive = drive_types.get(context, id) except exception.NotFound: return faults.Fault(exc.HTTPNotFound()) - return {'drive_type': self._drive_type_view(context, drive)} + return {'drive_type': _drive_type_view(drive)} def create(self, req, body): """Creates a new drive type.""" @@ -97,14 +99,14 @@ class DriveTypeController(object): LOG.audit(_("Create drive type %(name)s for "\ "%(type)s:%(size)s:%(rpm)s"), locals(), context=context) - new_drive = drive_types.drive_type_create(context, - type=type, - size_gb=size, - rpm=rpm, - capabilities=capabilities, - name=name) + new_drive = drive_types.create(context, + type=type, + size_gb=size, + rpm=rpm, + capabilities=capabilities, + name=name) - return {'drive_type': self._drive_type_view(context, new_drive)} + return {'drive_type': _drive_type_view(new_drive)} def delete(self, req, id): """Deletes a drive type.""" @@ -113,11 +115,10 @@ class DriveTypeController(object): LOG.audit(_("Delete drive type with id: %s"), id, context=context) try: - drive = drive_types.drive_type_get(context, id) - drive_types.drive_type_delete(context, drive['name']) + drive_types.delete(context, id) except exception.NotFound: return faults.Fault(exc.HTTPNotFound()) - return exc.HTTPAccepted() + # return exc.HTTPAccepted() class Drive_types(extensions.ExtensionDescriptor): diff --git a/nova/api/openstack/contrib/virtual_storage_arrays.py b/nova/api/openstack/contrib/virtual_storage_arrays.py index eca2d68dd..3c1362f0c 100644 --- a/nova/api/openstack/contrib/virtual_storage_arrays.py +++ b/nova/api/openstack/contrib/virtual_storage_arrays.py @@ -39,6 +39,29 @@ FLAGS = flags.FLAGS LOG = logging.getLogger("nova.api.vsa") +def _vsa_view(context, vsa, details=False): + """Map keys for vsa summary/detailed view.""" + d = {} + + d['id'] = vsa.get('id') + d['name'] = vsa.get('name') + d['displayName'] = vsa.get('display_name') + d['displayDescription'] = vsa.get('display_description') + + d['createTime'] = vsa.get('created_at') + d['status'] = vsa.get('status') + + if 'vsa_instance_type' in vsa: + d['vcType'] = vsa['vsa_instance_type'].get('name', None) + else: + d['vcType'] = None + + d['vcCount'] = vsa.get('vc_count') + d['driveCount'] = vsa.get('vol_count') + + return d + + class VsaController(object): """The Virtual Storage Array API controller for the OpenStack API.""" @@ -61,34 +84,12 @@ class VsaController(object): self.vsa_api = vsa.API() super(VsaController, self).__init__() - def _vsa_view(self, context, vsa, details=False): - """Map keys for vsa summary/detailed view.""" - d = {} - - d['id'] = vsa['id'] - d['name'] = vsa['name'] - d['displayName'] = vsa['display_name'] - d['displayDescription'] = vsa['display_description'] - - d['createTime'] = vsa['created_at'] - d['status'] = vsa['status'] - - if vsa['vsa_instance_type']: - d['vcType'] = vsa['vsa_instance_type'].get('name', None) - else: - d['vcType'] = None - - d['vcCount'] = vsa['vc_count'] - d['driveCount'] = vsa['vol_count'] - - return d - def _items(self, req, details): """Return summary or detailed list of VSAs.""" context = req.environ['nova.context'] vsas = self.vsa_api.get_all(context) limited_list = common.limited(vsas, req) - res = [self._vsa_view(context, vsa, details) for vsa in limited_list] + res = [_vsa_view(context, vsa, details) for vsa in limited_list] return {'vsaSet': res} def index(self, req): @@ -108,24 +109,20 @@ class VsaController(object): except exception.NotFound: return faults.Fault(exc.HTTPNotFound()) - return {'vsa': self._vsa_view(context, vsa, details=True)} + return {'vsa': _vsa_view(context, vsa, details=True)} def create(self, req, body): """Create a new VSA.""" context = req.environ['nova.context'] - if not body: + if not body or 'vsa' not in body: + LOG.debug(_("No body provided"), context=context) return faults.Fault(exc.HTTPUnprocessableEntity()) vsa = body['vsa'] display_name = vsa.get('displayName') - display_description = vsa.get('displayDescription') - storage = vsa.get('storage') - shared = vsa.get('shared') vc_type = vsa.get('vcType', FLAGS.default_vsa_instance_type) - availability_zone = vsa.get('placement', {}).get('AvailabilityZone') - try: instance_type = instance_types.get_instance_type_by_name(vc_type) except exception.NotFound: @@ -134,15 +131,17 @@ class VsaController(object): LOG.audit(_("Create VSA %(display_name)s of type %(vc_type)s"), locals(), context=context) - result = self.vsa_api.create(context, - display_name=display_name, - display_description=display_description, - storage=storage, - shared=shared, - instance_type=instance_type, - availability_zone=availability_zone) + args = dict(display_name=display_name, + display_description=vsa.get('displayDescription'), + instance_type=instance_type, + storage=vsa.get('storage'), + shared=vsa.get('shared'), + availability_zone=vsa.get('placement', {}).\ + get('AvailabilityZone')) - return {'vsa': self._vsa_view(context, result, details=True)} + result = self.vsa_api.create(context, **args) + + return {'vsa': _vsa_view(context, result, details=True)} def delete(self, req, id): """Delete a VSA.""" @@ -154,7 +153,7 @@ class VsaController(object): self.vsa_api.delete(context, vsa_id=id) except exception.NotFound: return faults.Fault(exc.HTTPNotFound()) - return exc.HTTPAccepted() + # return exc.HTTPAccepted() class VsaVolumeDriveController(volumes.VolumeController): -- cgit