Example #1
0
def get_all_types(context, inactive=0, search_opts={}):
    """Get all non-deleted volume_types.

    Pass true as argument if you want deleted volume types returned also.

    """
    vol_types = db.volume_type_get_all(context, inactive)

    if search_opts:
        LOG.debug("Searching by: %s" % search_opts)

        def _check_extra_specs_match(vol_type, searchdict):
            for k, v in searchdict.iteritems():
                if k not in vol_type["extra_specs"].keys() or vol_type["extra_specs"][k] != v:
                    return False
            return True

        # search_option to filter_name mapping.
        filter_mapping = {"extra_specs": _check_extra_specs_match}

        result = {}
        for type_name, type_args in vol_types.iteritems():
            # go over all filters in the list
            for opt, values in search_opts.iteritems():
                try:
                    filter_func = filter_mapping[opt]
                except KeyError:
                    # no such filter - ignore it, go to next filter
                    continue
                else:
                    if filter_func(type_args, values):
                        result[type_name] = type_args
                        break
        vol_types = result
    return vol_types
Example #2
0
def get_all_types(
    context,
    inactive=0,
    filters=None,
    marker=None,
    limit=None,
    sort_keys=None,
    sort_dirs=None,
    offset=None,
    list_result=False,
):
    """Get all non-deleted volume_types.

    Pass true as argument if you want deleted volume types returned also.

    """
    vol_types = db.volume_type_get_all(
        context,
        inactive,
        filters=filters,
        marker=marker,
        limit=limit,
        sort_keys=sort_keys,
        sort_dirs=sort_dirs,
        offset=offset,
        list_result=list_result,
    )
    return vol_types
Example #3
0
def make_body(root=True, gigabytes=1000, snapshots=10,
              volumes=10, backups=10,
              backup_gigabytes=1000, per_volume_gigabytes=-1,
              volume_types_faked=None,
              tenant_id=fake.PROJECT_ID, groups=10):
    resources = {'gigabytes': gigabytes,
                 'snapshots': snapshots,
                 'volumes': volumes,
                 'backups': backups,
                 'per_volume_gigabytes': per_volume_gigabytes,
                 'backup_gigabytes': backup_gigabytes,
                 'groups': groups}
    if not volume_types_faked:
        volume_types_faked = {'fake_type': None}
    for volume_type in volume_types_faked:
        resources['gigabytes_' + volume_type] = -1
        resources['snapshots_' + volume_type] = -1
        resources['volumes_' + volume_type] = -1

    # need to consider preexisting volume types as well
    volume_types = db.volume_type_get_all(context.get_admin_context())

    for volume_type in volume_types:
        resources['gigabytes_' + volume_type] = -1
        resources['snapshots_' + volume_type] = -1
        resources['volumes_' + volume_type] = -1

    if tenant_id:
        resources['id'] = tenant_id
    if root:
        result = {'quota_class_set': resources}
    else:
        result = resources
    return result
Example #4
0
def make_body(root=True,
              gigabytes=1000,
              snapshots=10,
              volumes=10,
              backups=10,
              backup_gigabytes=1000,
              tenant_id='foo',
              per_volume_gigabytes=-1):
    resources = {
        'gigabytes': gigabytes,
        'snapshots': snapshots,
        'volumes': volumes,
        'backups': backups,
        'backup_gigabytes': backup_gigabytes,
        'per_volume_gigabytes': per_volume_gigabytes,
    }
    # need to consider preexisting volume types as well
    volume_types = db.volume_type_get_all(context.get_admin_context())
    for volume_type in volume_types:
        resources['gigabytes_' + volume_type] = -1
        resources['snapshots_' + volume_type] = -1
        resources['volumes_' + volume_type] = -1

    if tenant_id:
        resources['id'] = tenant_id
    if root:
        result = {'quota_set': resources}
    else:
        result = resources
    return result
Example #5
0
def make_body(root=True, gigabytes=1000, snapshots=10,
              volumes=10, backups=10, backup_gigabytes=1000,
              tenant_id=fake.PROJECT_ID, per_volume_gigabytes=-1, groups=10):
    resources = {'gigabytes': gigabytes,
                 'snapshots': snapshots,
                 'volumes': volumes,
                 'backups': backups,
                 'backup_gigabytes': backup_gigabytes,
                 'per_volume_gigabytes': per_volume_gigabytes,
                 'groups': groups}
    # need to consider preexisting volume types as well
    volume_types = db.volume_type_get_all(context.get_admin_context())

    for volume_type in volume_types:
        resources['gigabytes_' + volume_type] = -1
        resources['snapshots_' + volume_type] = -1
        resources['volumes_' + volume_type] = -1

    if tenant_id:
        resources['id'] = tenant_id
    if root:
        result = {'quota_set': resources}
    else:
        result = resources
    return result
Example #6
0
def make_body(
    root=True,
    gigabytes=1000,
    snapshots=10,
    volumes=10,
    backups=10,
    backup_gigabytes=1000,
    tenant_id=fake.PROJECT_ID,
    per_volume_gigabytes=-1,
):
    resources = {
        "gigabytes": gigabytes,
        "snapshots": snapshots,
        "volumes": volumes,
        "backups": backups,
        "backup_gigabytes": backup_gigabytes,
        "per_volume_gigabytes": per_volume_gigabytes,
    }
    # need to consider preexisting volume types as well
    volume_types = db.volume_type_get_all(context.get_admin_context())

    for volume_type in volume_types:
        resources["gigabytes_" + volume_type] = -1
        resources["snapshots_" + volume_type] = -1
        resources["volumes_" + volume_type] = -1

    if tenant_id:
        resources["id"] = tenant_id
    if root:
        result = {"quota_set": resources}
    else:
        result = resources
    return result
Example #7
0
def make_body(root=True, gigabytes=1000, snapshots=10,
              volumes=10, backups=10, backup_gigabytes=1000,
              tenant_id=fake.PROJECT_ID, per_volume_gigabytes=-1, groups=10,
              subproject=False):
    resources = {'gigabytes': gigabytes,
                 'snapshots': snapshots,
                 'volumes': volumes,
                 'backups': backups,
                 'backup_gigabytes': backup_gigabytes,
                 'per_volume_gigabytes': per_volume_gigabytes,
                 'groups': groups}
    # need to consider preexisting volume types as well
    volume_types = db.volume_type_get_all(context.get_admin_context())

    for volume_type in volume_types:
        # default values for subproject are 0
        quota = 0 if subproject else -1
        resources['gigabytes_' + volume_type] = quota
        resources['snapshots_' + volume_type] = quota
        resources['volumes_' + volume_type] = quota

    if tenant_id:
        resources['id'] = tenant_id
    if root:
        result = {'quota_set': resources}
    else:
        result = resources
    return result
    def test_volume_type_get_all(self):
        expected_specs = self.vol_type1_specs.copy()

        types = db.volume_type_get_all(context.get_admin_context())

        self.assertEquals(types[self.vol_type1["name"]]["extra_specs"], expected_specs)

        self.assertEquals(types[self.vol_type2_noextra["name"]]["extra_specs"], {})
    def test_volume_type_get_all(self):
        expected_specs = self.vol_type1_specs.copy()

        types = db.volume_type_get_all(context.get_admin_context())

        self.assertEqual(
            types[self.vol_type1['name']]['extra_specs'], expected_specs)

        self.assertEqual(
            types[self.vol_type2_noextra['name']]['extra_specs'], {})
    def test_volume_type_get_all(self):
        expected_specs = self.vol_type1_specs.copy()

        types = db.volume_type_get_all(context.get_admin_context())

        self.assertEqual(expected_specs,
                         types[self.vol_type1['name']]['extra_specs'])

        self.assertEqual({},
                         types[self.vol_type2_noextra['name']]['extra_specs'])
def get_all_types(context, inactive=0, filters=None, marker=None,
                  limit=None, sort_keys=None, sort_dirs=None,
                  offset=None, list_result=False):
    """Get all non-deleted volume_types.

    Pass true as argument if you want deleted volume types returned also.

    """
    vol_types = db.volume_type_get_all(context, inactive, filters=filters,
                                       marker=marker, limit=limit,
                                       sort_keys=sort_keys,
                                       sort_dirs=sort_dirs, offset=offset,
                                       list_result=list_result)
    return vol_types
Example #12
0
    def schedule_create_volume(self, context, request_spec, filter_properties):
        """Use volume type extra_specs to store tenant info for tenant isolation"""

        volume_id = request_spec.get('volume_id')
        snapshot_id = request_spec.get('snapshot_id')
        image_id = request_spec.get('image_id')
        volume_properties = request_spec.get('volume_properties')
        availability_zone = volume_properties.get('availability_zone')

        context_dict = context.to_dict()
        tenant_name = context_dict['project_name']

        # check if request has volume type and volume type matching tenant
        # if no volume type in request, search db for tenant's bind volume type
        # if no bind volume type, add default volume type to create volume
        volume_type = request_spec.get('volume_type')
        if volume_type:
            specs = volume_type.get('extra_specs')
            if 'tenant_name' in specs:
                if specs['tenant_name'] != tenant_name:
                    msg = _("Tenant cannot use volume type %s." %
                            volume_type['name'])
                    raise exception.InvalidVolumeType(reason=msg)
        else:
            #check db if user's tenant has been bond to a volume type
            bindType = False
            volume_types = db.volume_type_get_all(context)
            for key in volume_types:
                specs = volume_types[key].get('extra_specs')
                if 'tenant_name' in specs:
                    if specs['tenant_name'] == tenant_name:
                        bindType = True
                        request_spec['volume_type'] = volume_types[key]
                        break
            if not bindType:
                request_spec['volume_type'] = db.volume_type_get_by_name(
                    context, 'DEFAULT')

        LOG.debug(str(request_spec))

        host = 'MyHost'
        updated_volume = driver.volume_update_db(context, volume_id, host)
        self.volume_rpcapi.create_volume(context,
                                         updated_volume,
                                         host,
                                         request_spec,
                                         filter_properties,
                                         snapshot_id=snapshot_id,
                                         image_id=image_id)
        return None
Example #13
0
def get_all_types(context, inactive=0, search_opts=None):
    """Get all non-deleted volume_types.

    Pass true as argument if you want deleted volume types returned also.

    """
    search_opts = search_opts or {}
    filters = {}

    if 'is_public' in search_opts:
        filters['is_public'] = search_opts['is_public']
        del search_opts['is_public']

    vol_types = db.volume_type_get_all(context, inactive, filters=filters)

    if search_opts:
        LOG.debug("Searching by: %s" % search_opts)

        def _check_extra_specs_match(vol_type, searchdict):
            for k, v in searchdict.items():
                if (k not in vol_type['extra_specs'].keys()
                        or vol_type['extra_specs'][k] != v):
                    return False
            return True

        # search_option to filter_name mapping.
        filter_mapping = {'extra_specs': _check_extra_specs_match}

        result = {}
        for type_name, type_args in vol_types.items():
            # go over all filters in the list
            for opt, values in search_opts.items():
                try:
                    filter_func = filter_mapping[opt]
                except KeyError:
                    # no such filter - ignore it, go to next filter
                    continue
                else:
                    if filter_func(type_args, values):
                        result[type_name] = type_args
                        break
        vol_types = result
    return vol_types
Example #14
0
    def resources(self):
        """Fetches all possible quota resources."""

        result = {}
        # Global quotas.
        argses = [('volumes', '_sync_volumes', 'quota_volumes'),
                  ('snapshots', '_sync_snapshots', 'quota_snapshots'),
                  ('gigabytes', '_sync_gigabytes', 'quota_gigabytes'), ]
        for args in argses:
            resource = ReservableResource(*args)
            result[resource.name] = resource

        # Volume type quotas.
        volume_types = db.volume_type_get_all(context.get_admin_context(),
                                              False)
        for volume_type in volume_types.values():
            for part_name in ('volumes', 'gigabytes', 'snapshots'):
                resource = VolumeTypeResource(part_name, volume_type)
                result[resource.name] = resource
        return result
Example #15
0
def get_all_types(context: context.RequestContext,
                  inactive: int = 0,
                  filters: Optional[dict] = None,
                  marker: Optional[dict[str, Any]] = None,
                  limit: Optional[int] = None,
                  sort_keys: Optional[list[str]] = None,
                  sort_dirs: Optional[list[str]] = None,
                  offset: Optional[int] = None,
                  list_result: bool = False) -> Union[dict[str, Any], list]:
    """Get all non-deleted volume_types.

    Pass true as argument if you want deleted volume types returned also.

    """
    vol_types = db.volume_type_get_all(context, inactive, filters=filters,
                                       marker=marker, limit=limit,
                                       sort_keys=sort_keys,
                                       sort_dirs=sort_dirs, offset=offset,
                                       list_result=list_result)
    return vol_types
Example #16
0
    def resources(self):
        """Fetches all possible quota resources."""

        result = {}
        # Global quotas.
        argses = [('volumes', '_sync_volumes', 'quota_volumes'),
                  ('snapshots', '_sync_snapshots', 'quota_snapshots'),
                  ('gigabytes', '_sync_gigabytes', 'quota_gigabytes'), ]
        for args in argses:
            resource = ReservableResource(*args)
            result[resource.name] = resource

        # Volume type quotas.
        # NOTE(jdg): We also want to check deleted types here as well
        # if we don't the _get_quotas resource len check on will fail
        volume_types = db.volume_type_get_all(context.get_admin_context(),
                                              True)
        for volume_type in volume_types.values():
            for part_name in ('volumes', 'gigabytes', 'snapshots'):
                resource = VolumeTypeResource(part_name, volume_type)
                result[resource.name] = resource
        return result
Example #17
0
    def resources(self):
        """Fetches all possible quota resources."""

        result = {}
        # Global quotas.
        argses = [
            ('volumes', '_sync_volumes', 'quota_volumes'),
            ('snapshots', '_sync_snapshots', 'quota_snapshots'),
            ('gigabytes', '_sync_gigabytes', 'quota_gigabytes'),
        ]
        for args in argses:
            resource = ReservableResource(*args)
            result[resource.name] = resource

        # Volume type quotas.
        volume_types = db.volume_type_get_all(context.get_admin_context(),
                                              False)
        for volume_type in volume_types.values():
            for part_name in ('volumes', 'gigabytes', 'snapshots'):
                resource = VolumeTypeResource(part_name, volume_type)
                result[resource.name] = resource
        return result
Example #18
0
    def resources(self):
        """Fetches all possible quota resources."""

        result = {}
        # Global quotas.
        argses = [
            ('volumes', '_sync_volumes', 'quota_volumes'),
            ('snapshots', '_sync_snapshots', 'quota_snapshots'),
            ('gigabytes', '_sync_gigabytes', 'quota_gigabytes'),
        ]
        for args in argses:
            resource = ReservableResource(*args)
            result[resource.name] = resource

        # Volume type quotas.
        # NOTE(jdg): We also want to check deleted types here as well
        # if we don't the _get_quotas resource len check on will fail
        volume_types = db.volume_type_get_all(context.get_admin_context(),
                                              True)
        for volume_type in volume_types.values():
            for part_name in ('volumes', 'gigabytes', 'snapshots'):
                resource = VolumeTypeResource(part_name, volume_type)
                result[resource.name] = resource
        return result