Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
    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)
Пример #7
0
    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)
Пример #8
0
    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)
Пример #9
0
    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)
Пример #10
0
    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)
Пример #11
0
    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)
Пример #12
0
    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)
Пример #13
0
    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)
Пример #14
0
    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)
Пример #15
0
    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)