Merge ~bjornt/maas:clear-vlan-name into maas:master

Proposed by Björn Tillenius
Status: Merged
Approved by: Björn Tillenius
Approved revision: 2fb8b64ede3d796bee001044ea27c5016284e6a6
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~bjornt/maas:clear-vlan-name
Merge into: maas:master
Diff against target: 79 lines (+35/-8)
2 files modified
src/maasserver/forms/vlan.py (+7/-8)
src/maasserver/websockets/handlers/tests/test_vlan.py (+28/-0)
Reviewer Review Type Date Requested Status
Alberto Donato (community) Approve
MAAS Lander Approve
Review via email: mp+415317@code.launchpad.net

Commit message

Allow VLAN names to be cleared in websocket and API.

Also ensure that you need to be an admin to edit the VLAN.

To post a comment you must log in.
Revision history for this message
MAAS Lander (maas-lander) wrote :

UNIT TESTS
-b clear-vlan-name lp:~bjornt/maas/+git/maas into -b master lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 2fb8b64ede3d796bee001044ea27c5016284e6a6

review: Approve
Revision history for this message
Alberto Donato (ack) wrote :

+1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/maasserver/forms/vlan.py b/src/maasserver/forms/vlan.py
2index 41524c6..a456018 100644
3--- a/src/maasserver/forms/vlan.py
4+++ b/src/maasserver/forms/vlan.py
5@@ -12,6 +12,7 @@ from maasserver.fields import NodeChoiceField, SpecifierOrModelChoiceField
6 from maasserver.forms import MAASModelForm
7 from maasserver.models import Fabric, RackController, Service, Space
8 from maasserver.models.vlan import VLAN
9+from maasserver.permissions import NodePermission
10
11
12 class VLANForm(MAASModelForm):
13@@ -42,6 +43,8 @@ class VLANForm(MAASModelForm):
14 "space",
15 "fabric",
16 )
17+ permission_create = NodePermission.admin
18+ permission_edit = NodePermission.admin
19
20 def __init__(self, *args, **kwargs):
21 self.fabric = kwargs.pop("fabric", None)
22@@ -201,14 +204,10 @@ class VLANForm(MAASModelForm):
23 vlan = super().save(commit=False)
24 if self.fabric is not None:
25 vlan.fabric = self.fabric
26- if "space" in self.data and not self.cleaned_data.get("space"):
27- # 'space' is being cleared.
28- vlan.space = None
29- if "relay_vlan" in self.data and not self.cleaned_data.get(
30- "relay_vlan"
31- ):
32- # 'relay_vlan' is being cleared.
33- vlan.relay_vlan = None
34+ for key in ["space", "relay_vlan", "name"]:
35+ if key in self.data and not self.cleaned_data.get(key):
36+ # key is being cleared.
37+ setattr(vlan, key, None)
38 if vlan.dhcp_on:
39 # 'relay_vlan' cannot be set when dhcp is on.
40 vlan.relay_vlan = None
41diff --git a/src/maasserver/websockets/handlers/tests/test_vlan.py b/src/maasserver/websockets/handlers/tests/test_vlan.py
42index 79927eb..1723dbe 100644
43--- a/src/maasserver/websockets/handlers/tests/test_vlan.py
44+++ b/src/maasserver/websockets/handlers/tests/test_vlan.py
45@@ -109,6 +109,34 @@ class TestVLANHandler(MAASServerTestCase):
46 )
47
48
49+class TestVLANHandlerUpdate(MAASServerTestCase):
50+ def test_update_as_user(self):
51+ user = factory.make_User()
52+ handler = VLANHandler(user, {}, None)
53+ vlan = factory.make_VLAN()
54+ old_name = vlan.name
55+ with ExpectedException(HandlerPermissionError):
56+ handler.update({"id": vlan.id, "name": "new-name"})
57+ vlan = reload_object(vlan)
58+ self.assertEqual(old_name, vlan.name)
59+
60+ def test_update_as_admin(self):
61+ user = factory.make_admin()
62+ handler = VLANHandler(user, {}, None)
63+ vlan = factory.make_VLAN()
64+ handler.update({"id": vlan.id, "name": "new-name"})
65+ vlan = reload_object(vlan)
66+ self.assertEqual("new-name", vlan.name)
67+
68+ def test_update_clear_name(self):
69+ user = factory.make_admin()
70+ handler = VLANHandler(user, {}, None)
71+ vlan = factory.make_VLAN(name="my-name")
72+ handler.update({"id": vlan.id, "name": ""})
73+ vlan = reload_object(vlan)
74+ self.assertIsNone(vlan.name)
75+
76+
77 class TestVLANHandlerDelete(MAASServerTestCase):
78 def test_delete_as_admin_success(self):
79 user = factory.make_admin()

Subscribers

People subscribed via source and target branches