1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2026-11-08 11:16:47 +00:00
webvirtcloud/computes
catborise fb3f686532 fix(instances): the quota counts every VM and refuses what it cannot verify
check_user_quota added up the vCPUs, memory and disks of the user's
VMs, but skipped a VM whose host failed a TCP probe. A host that was
down therefore let users exceed their quota, and the probe always failed
for ssh computes named by an ssh_config alias or reached through
ProxyJump, so their VMs were never counted. A VM that could not be read
turned the page into the error page instead.

- Hosts are checked with Compute.status, the connection WebVirtCloud
  uses, once per host. A VM that cannot be read (host down, VM gone)
  makes the usage unknown: clone and resize up are refused with their
  own message (fail closed).
- A request that adds nothing is not checked, so a user over quota can
  still shrink a VM. Users without limits, and an exceeded instance
  count (from the database), need no host either.
- Memory resize of a running VM changes only the current memory, but
  the quota was charged with the submitted maximum. It is now charged
  with no change, and resize_mem gets the current maximum, so a VM that
  shuts down meanwhile cannot take an unchecked one.
- The VM page no longer computes the quota on every load (it read every
  VM of the user on every host for a "quota reached" banner). The limit
  is reported when a change is refused.

The test that expected a down host to pass the quota now expects it to
be refused. Checked against the test hosts: with a VM behind an
ssh_config alias the previous code counted 29 vCPUs, the new one 31;
with a VM on an unreachable host the previous code allowed +1 vCPU,
the new one refuses it after 5.1 s and allows -1 at once. The new
tests fail on the previous code, except the ones guarding unchanged
behaviour.
2026-10-05 12:26:57 +03:00
..
api fix(api): typed URLs and accurate response schemas 2026-10-04 01:08:11 +03:00
migrations Added missing migrations 2020-06-15 12:38:44 +06:00
templates fix(computes): overview state comes from the connection 2026-10-05 11:10:01 +03:00
__init__.py Initial commit 2015-02-27 10:53:51 +02:00
apps.py fix: track migrations; installs apply them instead of generating them 2026-10-04 01:08:11 +03:00
forms.py format python code with black 2022-11-02 08:54:35 +03:00
models.py fix(vrtManager): libvirt connections open within a time limit 2026-10-05 09:06:52 +03:00
test_api_security.py fix(instances): disk edits keep their XML; changes lock per VM 2026-10-04 01:08:11 +03:00
test_operation_locks.py fix(instances): disk edits keep their XML; changes lock per VM 2026-10-04 01:08:11 +03:00
test_overview_status.py fix(computes): overview state comes from the connection 2026-10-05 11:10:01 +03:00
test_ownership.py fix(vrtManager): libvirt connections open within a time limit 2026-10-05 09:06:52 +03:00
test_quota_down_host.py fix(instances): the quota counts every VM and refuses what it cannot verify 2026-10-05 12:26:57 +03:00
test_reconciliation.py fix(computes): instance sync asks libvirt outside the DB transaction 2026-10-05 10:47:35 +03:00
tests.py fix(vrtManager): libvirt connections open within a time limit 2026-10-05 09:06:52 +03:00
urls.py chore: drop references to the local roadmap from code and tests 2026-10-04 11:09:25 +03:00
utils.py fix(computes): instance sync asks libvirt outside the DB transaction 2026-10-05 10:47:35 +03:00
validators.py format python code with black 2022-11-02 08:54:35 +03:00
views.py fix(computes): overview state comes from the connection 2026-10-05 11:10:01 +03:00