mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-10 12:16:49 +00:00
fix(admin): the Users pages keep an administrator in and say what their fields mean
- An administrator could block, delete or demote (unset Active or Superuser on) their own account, and with it the last one, leaving the panel without anyone to undo it. These are now refused. - The user form showed "No password set." for users who have one: its password field never read the user's password. Its "Set password" link went to ../password/, a page this panel does not have. The form now says whether a password is set and links the page that sets it. - "Staff status" said "can log into this admin site"; here it lets a user change and delete the template VMs given to them, and is now called Template editor. - A quota of 0 counted as no limit, like -1, so a user's quota could not be taken away. Now -1 has no limit and 0 allows none; the help says so, and the labels give the units: memory in MiB, disk in GiB. - A user's page for a user that does not exist answered with a server error instead of not found. - The user list said "None" for a user who never logged in; it says "never", and dates fit their column. - The password form's labels no longer break mid-word.
This commit is contained in:
parent
07a2e09c2f
commit
0e8130f1b0
11 changed files with 161 additions and 43 deletions
|
|
@ -49,7 +49,8 @@ QUOTA_UNVERIFIED = "unverified"
|
|||
def check_user_quota(user, instance, cpu, memory, disk_size):
|
||||
"""
|
||||
Which quota the user would exceed by adding these amounts (instances,
|
||||
vCPUs, memory MiB, disk GiB) to their VMs, or "". QUOTA_UNVERIFIED if a
|
||||
vCPUs, memory MiB, disk GiB) to their VMs, or "". A quota of -1 has no
|
||||
limit; 0 allows none. QUOTA_UNVERIFIED if a
|
||||
VM that counts cannot be read (its host is down, the VM is gone): the
|
||||
usage is unknown, so an increase is refused.
|
||||
"""
|
||||
|
|
@ -68,12 +69,12 @@ def check_user_quota(user, instance, cpu, memory, disk_size):
|
|||
"instance__compute"
|
||||
)
|
||||
instance += user_instances.count()
|
||||
if ua.max_instances > 0 and instance > ua.max_instances:
|
||||
if ua.max_instances >= 0 and instance > ua.max_instances:
|
||||
msg = "instance"
|
||||
if quota_debug:
|
||||
msg += f" ({instance} > {ua.max_instances})"
|
||||
return msg
|
||||
if ua.max_cpus <= 0 and ua.max_memory <= 0 and ua.max_disk_size <= 0:
|
||||
if ua.max_cpus < 0 and ua.max_memory < 0 and ua.max_disk_size < 0:
|
||||
return msg
|
||||
|
||||
computes = {} # status is cached per object: check each host once
|
||||
|
|
@ -99,15 +100,15 @@ def check_user_quota(user, instance, cpu, memory, disk_size):
|
|||
except libvirtError:
|
||||
return QUOTA_UNVERIFIED
|
||||
|
||||
if ua.max_cpus > 0 and cpu > ua.max_cpus:
|
||||
if ua.max_cpus >= 0 and cpu > ua.max_cpus:
|
||||
msg = "cpu"
|
||||
if quota_debug:
|
||||
msg += f" ({cpu} > {ua.max_cpus})"
|
||||
if ua.max_memory > 0 and memory > ua.max_memory:
|
||||
if ua.max_memory >= 0 and memory > ua.max_memory:
|
||||
msg = "memory"
|
||||
if quota_debug:
|
||||
msg += f" ({memory} > {ua.max_memory})"
|
||||
if ua.max_disk_size > 0 and disk_size > ua.max_disk_size:
|
||||
if ua.max_disk_size >= 0 and disk_size > ua.max_disk_size:
|
||||
msg = "disk"
|
||||
if quota_debug:
|
||||
msg += f" ({disk_size} > {ua.max_disk_size})"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue