Resource default limits and visibility ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ We wish to keep track of resources which are not visible to the user or resources that we don't care to impose a certain limit on. For example, we wish to know the total number of CPUs per user without checking a limit and without the user needing to specify a value when applying for a new project. However, the administrator should be able at any time to change either of these parameters. Resource registration ===================== A new resource will be registered with an infinite base quota limit (denoted by 2**63-1). A holding is created in the quotaholder for each accepted user with the said limit. This means that the resource is ready to be used in a commission, but we are not interested in checking a senseful limit. Resource ``cyclades.cpu`` will from now on denote the number of active cpus. Its description will change to explain this. A new resource, ``cyclades.total_cpu``, will also be registered in the system, with the semantics ``cyclades.cpu`` used to have. The reason for this change is that (in our default policy) we would like to control the number of active CPUs but not the total CPUs (the latter would have an infinite limit). However, existing projects have specified a value for the resource ``cyclades.cpu``. If we don't reinterpret it as active CPUs, then this grant will be useless: It will add a value to infinite total CPUs, but provide no active CPUs. Likewise we will change ``cyclades.ram`` and register ``cyclades.total_ram``. There now exists attribute ``allow_in_projects`` in resource definitions, which controls whether a resource appears in a project application in the UI. Currently, this is set to False only for resource ``astakos.pending_app``. This will be renamed to ``ui_visible`` and affect also the appearance in the Usage page. A new attribute ``api_visible`` will also be included in resource definition (True by default), to control whether the resource can appear in related API calls: GET /resources, GET /quotas, POST /projects (applying for a project), etc. ``ui_visible`` will entail ``api_visible``. Both attributes will be adjustable through ``snf-manage resource-modify``. Resources ``cyclades.total_cpu`` and ``cyclades.total_ram`` will be marked with ``ui_visible=False`` and ``api_visible=False``. Changing base quota =================== Base quota for a certain user is currently determined by looking up the default base quota that is registered for the resource, unless there exists a custom limit for the user/resource pair in the model AstakosUserQuota. Resource limit can change with:: snf-manage resource-modify --limit This not only changes the quota scheme for future users but also affects all existing users that have no custom limit for this resource. This is troublesome, because it doesn't allow simply changing the future quota scheme. One is forced to rather set custom quota for new users, just in order to express the new default. This behavior will change: we will discard the distinction between users having default or custom quota. Resource default limits will be viewed as a skeleton for determining base quota for new users. When a new user is accepted, resource defaults will be consulted in order to fill the user-specific entries in AstakosUserQuota. When a resource default changes, this will not affect quota of existing users. For clarity, option ``--limit`` will be renamed ``--default-quota``. We can currently change a user's base quota with:: snf-manage user-modify --set-base-quota This command will be extended with option ``--all`` to allow changing base quota for multiple users; option ``--exclude`` will allow introducing exceptions. ``--set-base-quota`` will be renamed ``--base-quota``. Inspecting base quota ===================== Management command ``quota`` will split into ``quota-list`` and ``quota-verify``. The former will be used to list quota and will provide various filters. Option ``--with-custom`` will allow filtering quota that differ from the default or equal to it. Option ``--filter-by`` will enable filtering specified values, e.g. ``--filter-by "usage>1G"``