Exemplo n.º 1
0
def check_metadata_properties(metadata=None):
    """Checks that the volume metadata properties are valid."""

    if not metadata:
        metadata = {}

    for k, v in metadata.items():
        if len(k) == 0:
            msg = _("Metadata property key blank.")
            LOG.debug(msg)
            raise exception.InvalidVolumeMetadata(reason=msg)
        if len(k) > 255:
            msg = _("Metadata property key %s greater than 255 "
                    "characters.") % k
            LOG.debug(msg)
            raise exception.InvalidVolumeMetadataSize(reason=msg)
        if v is None:
            msg = _("Metadata property key '%s' value is None.") % k
            raise exception.InvalidVolumeMetadata(reason=msg)
        if len(v) > 255:
            msg = _("Metadata property key %s value greater than "
                    "255 characters.") % k
            LOG.debug(msg)
            raise exception.InvalidVolumeMetadataSize(reason=msg)
Exemplo n.º 2
0
    def _check_metadata_properties(self, metadata=None):
        if not metadata:
            metadata = {}

        for k, v in metadata.iteritems():
            if len(k) == 0:
                msg = _("Metadata property key blank")
                LOG.warn(msg)
                raise exception.InvalidVolumeMetadata(reason=msg)
            if len(k) > 255:
                msg = _("Metadata property key greater than 255 characters")
                LOG.warn(msg)
                raise exception.InvalidVolumeMetadataSize(reason=msg)
            if len(v) > 255:
                msg = _("Metadata property value greater than 255 characters")
                LOG.warn(msg)
                raise exception.InvalidVolumeMetadataSize(reason=msg)
Exemplo n.º 3
0
    def _check_metadata_properties(metadata=None):
        """Checks that the volume metadata properties are valid."""

        if not metadata:
            metadata = {}

        for (k, v) in metadata.iteritems():
            if len(k) == 0:
                msg = _("Metadata property key blank")
                LOG.warn(msg)
                raise exception.InvalidVolumeMetadata(reason=msg)
            if len(k) > 255:
                msg = _("Metadata property key %s greater than 255 "
                        "characters") % k
                LOG.warn(msg)
                raise exception.InvalidVolumeMetadataSize(reason=msg)
            if len(v) > 255:
                msg = _("Metadata property key %s value greater than"
                        " 255 characters") % k
                LOG.warn(msg)
                raise exception.InvalidVolumeMetadataSize(reason=msg)
Exemplo n.º 4
0
def check_metadata_properties(metadata=None):
    """Checks that the volume metadata properties are valid."""

    if not metadata:
        metadata = {}

    for k, v in metadata.items():
        try:
            check_string_length(k, "Metadata key: %s" % k, min_length=1)
            check_string_length(v, "Value for metadata key: %s" % k)
        except exception.InvalidInput as exc:
            raise exception.InvalidVolumeMetadata(reason=exc)
        # for backward compatibility
        if len(k) > 255:
            msg = _("Metadata property key %s greater than 255 "
                    "characters.") % k
            raise exception.InvalidVolumeMetadataSize(reason=msg)
        if len(v) > 255:
            msg = _("Metadata property key %s value greater than "
                    "255 characters.") % k
            raise exception.InvalidVolumeMetadataSize(reason=msg)
Exemplo n.º 5
0
    def req(self,
            object_type='volumes',
            request_typ='GET',
            data=None,
            name=None,
            idx=None):
        if name and idx:
            LOG.error(_("req can't handle both name and index"))
            raise ValueError("can't handle both name and idx")

        url = '%s/%s' % (self.base_url, object_type)
        key = None
        if name:
            url = '%s?%s' % (url, urllib.urlencode({'name': name}))
            key = name
        elif idx:
            url = '%s/%d' % (url, idx)
            key = str(idx)
        if data and request_typ == 'GET':
            url + '?' + urllib.urlencode(data)
            request = urllib2.Request(url)
        elif data:
            LOG.debug('data: %s', json.dumps(data))
            request = urllib2.Request(url, json.dumps(data))
        else:
            request = urllib2.Request(url)
        LOG.debug('quering url: %s', url)
        request.get_method = lambda: request_typ
        request.add_header("Authorization", "Basic %s" % (self.base64_auth, ))
        try:
            response = urllib2.urlopen(request)
        except (urllib2.HTTPError, ) as exc:
            if exc.code == 400 and hasattr(exc, 'read'):
                error = json.load(exc)
                if error['message'].endswith('obj_not_found'):
                    LOG.warning(_("object %(key)s of type %(typ)s not found"),
                                {
                                    'key': key,
                                    'typ': object_type
                                })
                    raise exception.NotFound()
                elif error['message'] == 'vol_obj_name_not_unique':
                    LOG.error(_("can't create 2 volumes with the same name"))
                    raise (exception.InvalidVolumeMetadata(
                        'Volume by this name already exists'))
            LOG.error(_('Bad response from XMS\n%s'), exc.read())
            raise
        if response.code >= 300:
            LOG.error(_('bad API response, %s'), response.msg)
            raise exception.VolumeBackendAPIException(
                data='bad response from XMS got http code %d, %s' %
                (response.code, response.msg))
        str_result = response.read()
        if str_result:
            try:
                return json.loads(str_result)
            except Exception:
                LOG.exception(
                    _('quering %(typ)s, %(req)s failed to '
                      'parse result, return value = %(res)s'), {
                          'typ': object_type,
                          'req': request_typ,
                          'res': str_result
                      })