def _get_controller_fs_collection(self, isystem_uuid, marker, limit, sort_key, sort_dir, expand=False, resource_url=None): if self._from_isystems and not isystem_uuid: raise exception.InvalidParameterValue( _("System id not specified.")) limit = utils.validate_limit(limit) sort_dir = utils.validate_sort_dir(sort_dir) marker_obj = None if marker: marker_obj = objects.controller_fs.get_by_uuid( pecan.request.context, marker) if isystem_uuid: controller_fs = pecan.request.dbapi.controller_fs_get_by_isystem( isystem_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) else: controller_fs = \ pecan.request.dbapi.controller_fs_get_list(limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) return ControllerFsCollection.convert_with_links(controller_fs, limit, url=resource_url, expand=expand, sort_key=sort_key, sort_dir=sort_dir)
def _get_tiers_collection(self, uuid, marker, limit, sort_key, sort_dir, expand=False, resource_url=None): if self._from_cluster and not uuid: raise exception.InvalidParameterValue( _("Cluster id not specified.")) limit = utils.validate_limit(limit) sort_dir = utils.validate_sort_dir(sort_dir) marker_obj = None if marker: marker_obj = objects.storage_tier.get_by_uuid( pecan.request.context, marker) if self._from_cluster: storage_tiers = pecan.request.dbapi.storage_tier_get_by_cluster( uuid, limit=limit, marker=marker_obj, sort_key=sort_key, sort_dir=sort_dir) else: storage_tiers = pecan.request.dbapi.storage_tier_get_list( limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) return StorageTierCollection.convert_with_links(storage_tiers, limit, url=resource_url, expand=expand, sort_key=sort_key, sort_dir=sort_dir)
def _get_ceph_mon_collection(self, ihost_uuid, marker, limit, sort_key, sort_dir, expand=False, resource_url=None): if self._from_ihosts and not ihost_uuid: raise exception.InvalidParameterValue(_( "Host id not specified.")) limit = utils.validate_limit(limit) sort_dir = utils.validate_sort_dir(sort_dir) marker_obj = None if marker: marker_obj = objects.ceph_mon.get_by_uuid( pecan.request.context, marker) if ihost_uuid: ceph_mon = pecan.request.dbapi.ceph_mon_get_by_ihost( ihost_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) else: ceph_mon = pecan.request.dbapi.ceph_mon_get_list( limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) return CephMonCollection \ .convert_with_links(ceph_mon, limit, url=resource_url, expand=expand, sort_key=sort_key, sort_dir=sort_dir)
def _get_pci_devices_collection(self, uuid, marker, limit, sort_key, sort_dir, expand=False, resource_url=None): if self._from_ihosts and not uuid: raise exception.InvalidParameterValue(_("Host id not specified.")) limit = utils.validate_limit(limit) sort_dir = utils.validate_sort_dir(sort_dir) marker_obj = None if marker: marker_obj = objects.pci_device.get_by_uuid( pecan.request.context, marker) if self._from_ihosts: devices = pecan.request.dbapi.pci_device_get_by_host( uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) else: if uuid: devices = pecan.request.dbapi.pci_device_get_by_host( uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) else: devices = pecan.request.dbapi.pci_device_get_list( limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) return PCIDeviceCollection.convert_with_links(devices, limit, url=resource_url, expand=expand, sort_key=sort_key, sort_dir=sort_dir)
def _get_labels_collection(self, host_uuid, marker, limit, sort_key, sort_dir, expand=False, resource_url=None): if self._from_ihosts and not host_uuid: raise exception.InvalidParameterValue(_( "Host id not specified.")) limit = utils.validate_limit(limit) sort_dir = utils.validate_sort_dir(sort_dir) marker_obj = None if marker: marker_obj = objects.label.get_by_uuid( pecan.request.context, marker) if self._from_ihosts: host_label = pecan.request.dbapi.label_get_by_host( host_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) else: if host_uuid: host_label = pecan.request.dbapi.label_get_by_host( host_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) else: host_label = pecan.request.dbapi.label_get_list( limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) return LabelCollection.convert_with_links(host_label, limit, url=resource_url, expand=expand, sort_key=sort_key, sort_dir=sort_dir)
def _get_extoams_collection(self, isystem_uuid, marker, limit, sort_key, sort_dir, expand=False, resource_url=None): if self._from_isystems and not isystem_uuid: raise exception.InvalidParameterValue(_( "System id not specified.")) limit = utils.validate_limit(limit) sort_dir = utils.validate_sort_dir(sort_dir) marker_obj = None if marker: marker_obj = objects.oam_network.get_by_uuid(pecan.request.context, marker) extoams = pecan.request.dbapi.iextoam_get_list(limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) return OAMNetworkCollection.convert_with_links(extoams, limit, url=resource_url, expand=expand, sort_key=sort_key, sort_dir=sort_dir)
def _get_device_label_collection(self, device_uuid, marker=None, limit=None, sort_key=None, sort_dir=None, expand=False, resource_url=None): if self._parent and not device_uuid: raise exception.InvalidParameterValue( _("Device id not specified.")) limit = utils.validate_limit(limit) sort_dir = utils.validate_sort_dir(sort_dir) marker_obj = None if marker: marker_obj = objects.device_label.get_by_uuid( pecan.request.context, marker) if device_uuid: device_labels = pecan.request.dbapi.device_label_get_by_device( device_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) else: device_labels = pecan.request.dbapi.device_label_get_list( limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) return DeviceLabelCollection.convert_with_links(device_labels, limit, url=resource_url, expand=expand, sort_key=sort_key, sort_dir=sort_dir)
def _get_cpus_collection(self, i_uuid, inode_uuid, marker, limit, sort_key, sort_dir, expand=False, resource_url=None): if self._from_ihosts and not i_uuid: raise exception.InvalidParameterValue(_("Host id not specified.")) if self._from_inode and not i_uuid: raise exception.InvalidParameterValue(_("Node id not specified.")) limit = utils.validate_limit(limit) sort_dir = utils.validate_sort_dir(sort_dir) marker_obj = None if marker: marker_obj = objects.cpu.get_by_uuid(pecan.request.context, marker) if self._from_ihosts: cpus = pecan.request.dbapi.icpu_get_by_ihost(i_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) elif self._from_inode: cpus = pecan.request.dbapi.icpu_get_by_inode(i_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) else: if i_uuid and not inode_uuid: cpus = pecan.request.dbapi.icpu_get_by_ihost(i_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) elif i_uuid and inode_uuid: # Need ihost_uuid ? cpus = pecan.request.dbapi.icpu_get_by_ihost_inode( i_uuid, inode_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) elif inode_uuid: # Need ihost_uuid ? cpus = pecan.request.dbapi.icpu_get_by_ihost_inode( i_uuid, # None inode_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) else: cpus = pecan.request.dbapi.icpu_get_list(limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) return CPUCollection.convert_with_links(cpus, limit, url=resource_url, expand=expand, sort_key=sort_key, sort_dir=sort_dir)
def update_many(self, isystem_uuid, patch): """Update the current controller_fs configuration.""" if self._from_isystems and not isystem_uuid: raise exception.InvalidParameterValue(_( "System id not specified.")) # Validate input filesystem names controller_fs_list = pecan.request.dbapi.controller_fs_get_list() valid_fs_list = [] if controller_fs_list: valid_fs_list = {fs.name: fs.size for fs in controller_fs_list} reinstall_required = False reboot_required = False force_resize = False modified_fs = [] for p_list in patch: p_obj_list = jsonpatch.JsonPatch(p_list) for p_obj in p_obj_list: if p_obj['path'] == '/action': value = p_obj['value'] patch.remove(p_list) if value == constants.FORCE_ACTION: force_resize = True LOG.info("Force action resize selected") break for p_list in patch: p_obj_list = jsonpatch.JsonPatch(p_list) for p_obj in p_obj_list: if p_obj['path'] == '/name': fs_display_name = p_obj['value'] if fs_display_name == constants.FILESYSTEM_DISPLAY_NAME_CGCS: fs_name = constants.FILESYSTEM_NAME_CGCS else: fs_name = fs_display_name elif p_obj['path'] == '/size': size = p_obj['value'] if fs_name not in valid_fs_list.keys() or fs_display_name == constants.FILESYSTEM_NAME_CGCS: msg = _("ControllerFs update failed: invalid filesystem " "'%s' " % fs_display_name) raise wsme.exc.ClientSideError(msg) elif not cutils.is_int_like(size): msg = _("ControllerFs update failed: filesystem '%s' " "size must be an integer " % fs_display_name) raise wsme.exc.ClientSideError(msg) elif int(size) <= int(valid_fs_list[fs_name]): msg = _("ControllerFs update failed: size for filesystem '%s' " "should be bigger than %s " % ( fs_display_name, valid_fs_list[fs_name])) raise wsme.exc.ClientSideError(msg) elif (fs_name == constants.FILESYSTEM_NAME_CGCS and StorageBackendConfig.get_backend(pecan.request.dbapi, constants.CINDER_BACKEND_CEPH)): if force_resize: LOG.warn("Force resize ControllerFs: %s, though Ceph " "storage backend is configured" % fs_display_name) else: raise wsme.exc.ClientSideError( _("ControllerFs %s size is not modifiable as Ceph is " "configured. Update size via Ceph Storage Pools." % fs_display_name)) if fs_name in constants.SUPPORTED_REPLICATED_FILEYSTEM_LIST: if utils.is_drbd_fs_resizing(): raise wsme.exc.ClientSideError( _("A drbd sync operation is currently in progress. " "Retry again later.") ) modified_fs += [fs_name] controller_fs_list_new = [] for fs in controller_fs_list: replaced = False for p_list in patch: p_obj_list = jsonpatch.JsonPatch(p_list) for p_obj in p_obj_list: if p_obj['path'] == '/name': if p_obj['value'] == constants.FILESYSTEM_DISPLAY_NAME_CGCS: p_obj['value'] = constants.FILESYSTEM_NAME_CGCS if p_obj['value'] == fs['name']: try: controller_fs_list_new += [ControllerFs( **jsonpatch.apply_patch(fs.as_dict(), p_obj_list))] replaced = True break except utils.JSONPATCH_EXCEPTIONS as e: raise exception.PatchError(patch=p_list, reason=e) if replaced: break if not replaced: controller_fs_list_new += [fs] cgtsvg_growth_gib = _check_controller_multi_fs_data( pecan.request.context, controller_fs_list_new) if _check_controller_state(): _check_controller_multi_fs(controller_fs_list_new, cgtsvg_growth_gib=cgtsvg_growth_gib) for fs in controller_fs_list_new: if fs.name in modified_fs: value = {'size': fs.size} if fs.replicated: value.update({'state': constants.CONTROLLER_FS_RESIZING_IN_PROGRESS}) pecan.request.dbapi.controller_fs_update(fs.uuid, value) try: # perform rpc to conductor to perform config apply pecan.request.rpcapi.update_storage_config( pecan.request.context, update_storage=False, reinstall_required=reinstall_required, reboot_required=reboot_required, filesystem_list=modified_fs ) except Exception as e: msg = _("Failed to update filesystem size ") LOG.error("%s with patch %s with exception %s" % (msg, patch, e)) raise wsme.exc.ClientSideError(msg)
def _get_sensors_collection(self, uuid, sensorgroup_uuid, marker, limit, sort_key, sort_dir, expand=False, resource_url=None): if self._from_ihosts and not uuid: raise exception.InvalidParameterValue(_( "Host id not specified.")) if self._from_isensorgroup and not uuid: raise exception.InvalidParameterValue(_( "SensorGroup id not specified.")) limit = utils.validate_limit(limit) sort_dir = utils.validate_sort_dir(sort_dir) marker_obj = None if marker: marker_obj = objects.sensor.get_by_uuid( pecan.request.context, marker) if self._from_ihosts: sensors = pecan.request.dbapi.isensor_get_by_ihost( uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) LOG.debug("dbapi.isensor_get_by_ihost=%s" % sensors) elif self._from_isensorgroup: sensors = pecan.request.dbapi.isensor_get_by_sensorgroup( uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) LOG.debug("dbapi.isensor_get_by_sensorgroup=%s" % sensors) else: if uuid and not sensorgroup_uuid: sensors = pecan.request.dbapi.isensor_get_by_ihost( uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) LOG.debug("dbapi.isensor_get_by_ihost=%s" % sensors) elif uuid and sensorgroup_uuid: # Need ihost_uuid ? sensors = pecan.request.dbapi.isensor_get_by_ihost_sensorgroup( uuid, sensorgroup_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) LOG.debug("dbapi.isensor_get_by_ihost_sensorgroup=%s" % sensors) elif sensorgroup_uuid: # Need ihost_uuid ? sensors = pecan.request.dbapi.isensor_get_by_ihost_sensorgroup( uuid, # None sensorgroup_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) else: sensors = pecan.request.dbapi.isensor_get_list( limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) return SensorCollection.convert_with_links(sensors, limit, url=resource_url, expand=expand, sort_key=sort_key, sort_dir=sort_dir)
def update_many(self, isystem_uuid, patch): """Update the current controller_fs configuration.""" if self._from_isystems and not isystem_uuid: raise exception.InvalidParameterValue( _("System id not specified.")) # Validate input filesystem names controller_fs_list = pecan.request.dbapi.controller_fs_get_list() valid_fs_list = [] if controller_fs_list: valid_fs_list = {fs.name: fs.size for fs in controller_fs_list} reinstall_required = False reboot_required = False modified_fs = [] update_fs_list = [] for p_list in patch: p_obj_list = jsonpatch.JsonPatch(p_list) for p_obj in p_obj_list: if p_obj['path'] == '/name': fs_name = p_obj['value'] if fs_name in update_fs_list: msg = _("Duplicate fs_name " "'%s' in parameter list" % fs_name) raise wsme.exc.ClientSideError(msg) else: update_fs_list.append(fs_name) elif p_obj['path'] == '/size': size = p_obj['value'] if fs_name not in valid_fs_list.keys(): msg = _("ControllerFs update failed: invalid filesystem " "'%s' " % fs_name) raise wsme.exc.ClientSideError(msg) elif not cutils.is_int_like(size): msg = _("ControllerFs update failed: filesystem '%s' " "size must be an integer " % fs_name) raise wsme.exc.ClientSideError(msg) elif int(size) <= int(valid_fs_list[fs_name]): msg = _("ControllerFs update failed: size for filesystem '%s' " "should be bigger than %s " % (fs_name, valid_fs_list[fs_name])) raise wsme.exc.ClientSideError(msg) if fs_name in constants.SUPPORTED_REPLICATED_FILEYSTEM_LIST: if utils.is_drbd_fs_resizing(): raise wsme.exc.ClientSideError( _("A drbd sync operation is currently in progress. " "Retry again later.")) modified_fs += [fs_name] controller_fs_list_new = [] for fs in controller_fs_list: replaced = False for p_list in patch: p_obj_list = jsonpatch.JsonPatch(p_list) for p_obj in p_obj_list: if p_obj['value'] == fs['name']: try: controller_fs_list_new += [ ControllerFs(**jsonpatch.apply_patch( fs.as_dict(), p_obj_list)) ] replaced = True break except utils.JSONPATCH_EXCEPTIONS as e: raise exception.PatchError(patch=p_list, reason=e) if replaced: break if not replaced: controller_fs_list_new += [fs] cgtsvg_growth_gib = _check_controller_multi_fs_data( pecan.request.context, controller_fs_list_new) if _check_controller_state(): _check_controller_multi_fs(controller_fs_list_new, cgtsvg_growth_gib=cgtsvg_growth_gib) for fs in controller_fs_list_new: if fs.name in modified_fs: value = {'size': fs.size} if fs.replicated: value.update({ 'state': constants.CONTROLLER_FS_RESIZING_IN_PROGRESS }) pecan.request.dbapi.controller_fs_update(fs.uuid, value) try: # perform rpc to conductor to perform config apply pecan.request.rpcapi.update_storage_config( pecan.request.context, update_storage=False, reinstall_required=reinstall_required, reboot_required=reboot_required, filesystem_list=modified_fs) except Exception as e: msg = _("Failed to update filesystem size ") LOG.error("%s with patch %s with exception %s" % (msg, patch, e)) raise wsme.exc.ClientSideError(msg)
def _get_disks_collection(self, i_uuid, istor_uuid, ipv_uuid, marker, limit, sort_key, sort_dir, expand=False, resource_url=None): if self._from_ihosts and not i_uuid: raise exception.InvalidParameterValue(_("Host id not specified.")) if self._from_istor and not i_uuid: raise exception.InvalidParameterValue( _("Interface id not specified.")) if self._from_ipv and not i_uuid: raise exception.InvalidParameterValue( _("Physical Volume id not specified.")) limit = utils.validate_limit(limit) sort_dir = utils.validate_sort_dir(sort_dir) marker_obj = None if marker: marker_obj = objects.disk.get_by_uuid(pecan.request.context, marker) if self._from_ihosts: disks = pecan.request.dbapi.idisk_get_by_ihost(i_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) elif self._from_istor: disks = pecan.request.dbapi.idisk_get_by_istor(i_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) elif self._from_ipv: disks = pecan.request.dbapi.idisk_get_by_ipv(i_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) else: if i_uuid and not istor_uuid and not ipv_uuid: disks = pecan.request.dbapi.idisk_get_by_ihost( i_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) elif i_uuid and istor_uuid: # Need ihost_uuid ? disks = pecan.request.dbapi.idisk_get_by_ihost_istor( i_uuid, istor_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) elif istor_uuid: # Need ihost_uuid ? disks = pecan.request.dbapi.idisk_get_by_ihost_istor( i_uuid, # None istor_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) elif i_uuid and ipv_uuid: # Need ihost_uuid ? disks = pecan.request.dbapi.idisk_get_by_ihost_ipv( i_uuid, ipv_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) elif ipv_uuid: # Need ihost_uuid ? disks = pecan.request.dbapi.idisk_get_by_ihost_ipv( i_uuid, # None ipv_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) else: disks = pecan.request.dbapi.idisk_get_list(limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) return DiskCollection.convert_with_links(disks, limit, url=resource_url, expand=expand, sort_key=sort_key, sort_dir=sort_dir)
def _get_ports_collection(self, uuid, interface_uuid, node_uuid, marker, limit, sort_key, sort_dir, expand=False, resource_url=None): if self._from_ihosts and not uuid: raise exception.InvalidParameterValue(_( "Host id not specified.")) if self._from_iinterface and not uuid: raise exception.InvalidParameterValue(_( "Interface id not specified.")) if self._from_inode and not uuid: raise exception.InvalidParameterValue(_( "inode id not specified.")) limit = utils.validate_limit(limit) sort_dir = utils.validate_sort_dir(sort_dir) marker_obj = None if marker: marker_obj = objects.ethernet_port.get_by_uuid( pecan.request.context, marker) if self._from_ihosts: ports = pecan.request.dbapi.ethernet_port_get_by_host( uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) elif self._from_inode: ports = pecan.request.dbapi.ethernet_port_get_by_numa_node( uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) elif self._from_iinterface: ports = pecan.request.dbapi.ethernet_port_get_by_interface( uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) else: if uuid and not interface_uuid: ports = pecan.request.dbapi.ethernet_port_get_by_host( uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) elif uuid and interface_uuid: # Need ihost_uuid ? ports = pecan.request.dbapi.ethernet_port_get_by_host_interface( uuid, interface_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) elif interface_uuid: # Need ihost_uuid ? ports = pecan.request.dbapi.ethernet_port_get_by_host_interface( uuid, # None interface_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) else: ports = pecan.request.dbapi.ethernet_port_get_list( limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) return EthernetPortCollection.convert_with_links(ports, limit, url=resource_url, expand=expand, sort_key=sort_key, sort_dir=sort_dir)
def _get_storage_backend_collection(self, isystem_uuid, marker, limit, sort_key, sort_dir, expand=False, resource_url=None): if self._from_isystems and not isystem_uuid: raise exception.InvalidParameterValue( _("System id not specified.")) limit = utils.validate_limit(limit) sort_dir = utils.validate_sort_dir(sort_dir) marker_obj = None if marker: marker_obj = objects.storage_backend.get_by_uuid( pecan.request.context, marker) if isystem_uuid: storage_backends = \ pecan.request.dbapi.storage_backend_get_by_isystem( isystem_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) else: storage_backends = \ pecan.request.dbapi.storage_backend_get_list( limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) # TODO: External backend case for emc_vnx, hpe3par, hpelefthand will be # handled in a separate task # If cinder is not configured yet, calling cinder_has_external_backend() will # timeout. If any of these loosely coupled backend exists, create an external # backend with services set to cinder if external backend is not created yet. # if api_helper.is_svc_enabled(storage_backends, constants.SB_SVC_CINDER): # try: # if pecan.request.rpcapi.cinder_has_external_backend(pecan.request.context): # # # Check if external backend already exists. # need_soft_ext_sb = True # for s_b in storage_backends: # if s_b.backend == constants.SB_TYPE_EXTERNAL: # if s_b.services is None: # s_b.services = [constants.SB_SVC_CINDER] # elif constants.SB_SVC_CINDER not in s_b.services: # s_b.services.append(constants.SB_SVC_CINDER) # need_soft_ext_sb = False # break # # if need_soft_ext_sb: # ext_sb = StorageBackend() # ext_sb.backend = constants.SB_TYPE_EXTERNAL # ext_sb.state = constants.SB_STATE_CONFIGURED # ext_sb.task = constants.SB_TASK_NONE # ext_sb.services = [constants.SB_SVC_CINDER] # storage_backends.extend([ext_sb]) # except Timeout: # LOG.exception("Timeout while getting external backend list!") return StorageBackendCollection\ .convert_with_links(storage_backends, limit, url=resource_url, expand=expand, sort_key=sort_key, sort_dir=sort_dir)
def _get_partitions_collection(self, ihost_uuid, disk_uuid, ipv_uuid, marker, limit, sort_key, sort_dir, expand=False, resource_url=None): if self._from_ihosts and not ihost_uuid: raise exception.InvalidParameterValue(_("Host id not specified.")) if self._from_idisk and not disk_uuid: raise exception.InvalidParameterValue(_("Disk id not specified.")) if self._from_ipv and not ipv_uuid: raise exception.InvalidParameterValue( _("Physical Volume id not specified.")) limit = utils.validate_limit(limit) sort_dir = utils.validate_sort_dir(sort_dir) marker_obj = None if marker: marker_obj = objects.partition.get_by_uuid(pecan.request.context, marker) if self._from_ihosts and self._from_idisk: partitions = pecan.request.dbapi.partition_get_by_idisk( disk_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) elif self._from_ihosts: partitions = pecan.request.dbapi.partition_get_by_ihost( ihost_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) elif self._from_ipv: partitions = pecan.request.dbapi.partition_get_by_ipv( ipv_uuid, limit, marker_obj, sort_key=sort_key, sort_dir=sort_dir) # Only return user created partitions. partitions = [ p for p in partitions if p.type_guid == constants.USER_PARTITION_PHYSICAL_VOLUME ] return PartitionCollection.convert_with_links(partitions, limit, url=resource_url, expand=expand, sort_key=sort_key, sort_dir=sort_dir)