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:
parent
1eaa3524d5
commit
d5df187de4
4 changed files with 13 additions and 14 deletions
|
|
@ -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)])
|
||||
|
|
|
|||
|
|
@ -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"]
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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"]:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue