1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2026-11-08 11:16:47 +00:00

fix(networks, storages): a name in use is refused by the page again

The create forms of networks and storage pools checked the new name
against the host's list of networks or pools, but that list holds one
dict per object, so the name never matched and the check never fired;
libvirt refused the duplicate with its own wording. The check now
compares names: the page shows its own message, nothing is sent to
libvirt, and the Logs page gets a failed row "...: add: name already
in use".
This commit is contained in:
catborise 2026-10-23 13:32:08 +03:00
parent 1eaa3524d5
commit d5df187de4
4 changed files with 13 additions and 14 deletions

View file

@ -86,8 +86,6 @@ class NetworkRowTests(TestCase):
self.client.post(url, {"create": "", "name": "audit-net", "forward": "nat", "subnet": "198.51.100.0/24",
"dhcp4": "on"})
self.client.post(url, {"create": "", "name": "bad name!", "forward": "nat"}) # invalid form
self.client.post(url, {"create": "", "name": "lab", "forward": "nat", "subnet": "203.0.113.0/24"})
[first, second] = rows()
self.assertEqual(first, ("Network audit-net: add", True))
self.assertFalse(second[1])
self.assertTrue(second[0].startswith("Network lab: add: "), second[0])
response = self.client.post(url, {"create": "", "name": "lab", "forward": "nat", "subnet": "203.0.113.0/24"})
self.assertIn("Network pool name already in use", [str(m) for m in get_messages(response.wsgi_request)])
self.assertEqual(rows(), [("Network audit-net: add", True), ("Network lab: add: name already in use", False)])

View file

@ -6,7 +6,7 @@ from django.shortcuts import get_object_or_404, render
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from libvirt import libvirtError
from logs.audit import audit
from logs.audit import audit, failed
from vrtManager.network import network_size, wvmNetwork, wvmNetworks
from networks.forms import AddNetPool
@ -40,9 +40,10 @@ def networks(request, compute_id):
form = AddNetPool(request.POST)
if form.is_valid():
data = form.cleaned_data
if data["name"] in networks:
if data["name"] in [net["name"] for net in networks]:
msg = _("Network pool name already in use")
messages.error(request, msg)
failed(request, compute, f"Network {data['name']}", "add", "name already in use")
errors = True
if (
data["forward"] in ["bridge", "macvtap"]

View file

@ -161,14 +161,13 @@ class PoolAndVolumeRowTests(TransactionTestCase):
url = reverse("storages", args=[self.compute.pk])
self.client.post(url, {"create": "1", "name": "audit-pool", "stg_type": "dir", "target": "/srv/audit-pool"})
self.client.post(url, {"create": "1", "name": "bad name!", "stg_type": "dir", "target": "/srv/x"}) # invalid
from libvirt import libvirtError
# libvirt refuses a name in use (the page's own name check compares names with dicts)
self.pools.create_storage.side_effect = libvirtError("pool 'default' already exists")
self.pools.get_storages_info.return_value = [{"name": "default"}]
self.pools.create_storage.reset_mock()
self.client.post(url, {"create": "1", "name": "default", "stg_type": "dir", "target": "/srv/default"})
self.pools.create_storage.assert_not_called()
self.assertEqual(rows(), [
("Storage pool audit-pool: add", True),
("Storage pool default: add: pool 'default' already exists", False),
("Storage pool default: add: name already in use", False),
])
def test_volume_add_and_delete(self):

View file

@ -12,7 +12,7 @@ from django.utils.translation import gettext_lazy as _
from libvirt import libvirtError
from operations import claims, jobs
from operations.utils import busy_message
from logs.audit import audit
from logs.audit import audit, failed
from vrtManager.util import OperationError
from vrtManager.storage import wvmStorage, wvmStorages
@ -80,9 +80,10 @@ def storages(request, compute_id):
form = AddStgPool(request.POST)
if form.is_valid():
data = form.cleaned_data
if data["name"] in storages:
if data["name"] in [stg["name"] for stg in storages]:
msg = _("Pool name already use")
messages.error(request, msg)
failed(request, compute, f"Storage pool {data['name']}", "add", "name already in use")
errors = True
if data["stg_type"] == "rbd":
if not data["secret"]: