Merge ~alexsander-souza/maas:lp2043970_to_35 into maas:3.5

Proposed by Alexsander de Souza
Status: Merged
Approved by: Alexsander de Souza
Approved revision: 59ea73b2cfd8a1dfcfc8702d45d8969cb549364f
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~alexsander-souza/maas:lp2043970_to_35
Merge into: maas:3.5
Diff against target: 126 lines (+60/-2)
4 files modified
src/maasserver/forms/settings.py (+14/-0)
src/maasserver/models/config.py (+1/-0)
src/metadataserver/builtin_scripts/network.py (+15/-2)
src/metadataserver/builtin_scripts/tests/test_network.py (+30/-0)
Reviewer Review Type Date Requested Status
Alexsander de Souza Approve
MAAS Lander Approve
Review via email: mp+463048@code.launchpad.net

Commit message

fix(metadataserver): leave discovered interfaces disconnected

don't create a default VLAN for interfaces discovered by hardware sync
when MAAS cannot figure out the correct one.

fixes LP#2043970

(cherry picked from commit 253fdfa645f5596ff824f01f5cea6f2f5d316f13)

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

UNIT TESTS
-b lp2043970_to_35 lp:~alexsander-souza/maas/+git/maas into -b 3.5 lp:~maas-committers/maas

STATUS: SUCCESS
COMMIT: 59ea73b2cfd8a1dfcfc8702d45d8969cb549364f

review: Approve
Revision history for this message
Alexsander de Souza (alexsander-souza) wrote :

self-approving back-port

review: Approve
Revision history for this message
MAAS Lander (maas-lander) wrote :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/src/maasserver/forms/settings.py b/src/maasserver/forms/settings.py
index 10dc6f1..5c354b8 100644
--- a/src/maasserver/forms/settings.py
+++ b/src/maasserver/forms/settings.py
@@ -1077,6 +1077,20 @@ CONFIG_ITEMS = {
1077 "max_value": 1209600,1077 "max_value": 1209600,
1078 },1078 },
1079 },1079 },
1080 "auto_vlan_creation": {
1081 "default": True,
1082 "form": forms.BooleanField,
1083 "form_kwargs": {
1084 "label": "Automatically create VLANs and Fabrics for interfaces",
1085 "required": False,
1086 "help_text": (
1087 "Enables the creation of a default VLAN and Fabric for "
1088 "discovered network interfaces when MAAS cannot connect it "
1089 "to an existing one. When disabled, the interface is left "
1090 "disconnected in these cases."
1091 ),
1092 },
1093 },
1080}1094}
10811095
10821096
diff --git a/src/maasserver/models/config.py b/src/maasserver/models/config.py
index 491b517..b85801c 100644
--- a/src/maasserver/models/config.py
+++ b/src/maasserver/models/config.py
@@ -148,6 +148,7 @@ def get_default_config():
148 "windows_kms_host": None,148 "windows_kms_host": None,
149 # Session timeout length (s)149 # Session timeout length (s)
150 "session_length": 1209600,150 "session_length": 1209600,
151 "auto_vlan_creation": True,
151 }152 }
152153
153154
diff --git a/src/metadataserver/builtin_scripts/network.py b/src/metadataserver/builtin_scripts/network.py
index 3479c09..9282986 100644
--- a/src/metadataserver/builtin_scripts/network.py
+++ b/src/metadataserver/builtin_scripts/network.py
@@ -1,7 +1,7 @@
1from django.db.models.expressions import RawSQL1from django.db.models.expressions import RawSQL
2from netaddr import IPAddress, IPNetwork2from netaddr import IPAddress, IPNetwork
33
4from maasserver.enum import INTERFACE_TYPE, IPADDRESS_TYPE4from maasserver.enum import INTERFACE_TYPE, IPADDRESS_TYPE, NODE_STATUS
5from maasserver.models.config import Config5from maasserver.models.config import Config
6from maasserver.models.fabric import Fabric6from maasserver.models.fabric import Fabric
7from maasserver.models.interface import (7from maasserver.models.interface import (
@@ -506,13 +506,26 @@ def update_parent_vlans(node, interface, parent_nics, update_ip_addresses):
506 parent_nic.save()506 parent_nic.save()
507507
508508
509def auto_vlan_creation(node) -> bool:
510 if node.is_controller:
511 # Always create controller's vlans
512 return True
513
514 if node.status == NODE_STATUS.DEPLOYED:
515 # don't create empty vlan/fabric for interfaces discovered by HW sync,
516 # they cannot be used.
517 return False
518
519 return Config.objects.get_config("auto_vlan_creation", True)
520
521
509def guess_vlan_for_interface(node, links):522def guess_vlan_for_interface(node, links):
510 # Make sure that the VLAN on the interface is correct. When523 # Make sure that the VLAN on the interface is correct. When
511 # links exists on this interface we place it into the correct524 # links exists on this interface we place it into the correct
512 # VLAN. If it cannot be determined and its a new interface it525 # VLAN. If it cannot be determined and its a new interface it
513 # gets placed on its own fabric.526 # gets placed on its own fabric.
514 new_vlan = get_interface_vlan_from_links(links)527 new_vlan = get_interface_vlan_from_links(links)
515 if new_vlan is None:528 if new_vlan is None and auto_vlan_creation(node):
516 # If the default VLAN on the default fabric has no interfaces529 # If the default VLAN on the default fabric has no interfaces
517 # associated with it, the first interface will be placed there530 # associated with it, the first interface will be placed there
518 # (rather than creating a new fabric).531 # (rather than creating a new fabric).
diff --git a/src/metadataserver/builtin_scripts/tests/test_network.py b/src/metadataserver/builtin_scripts/tests/test_network.py
index a1853b4..214df73 100644
--- a/src/metadataserver/builtin_scripts/tests/test_network.py
+++ b/src/metadataserver/builtin_scripts/tests/test_network.py
@@ -10,6 +10,7 @@ from maasserver.enum import (
10 NODE_TYPE,10 NODE_TYPE,
11)11)
12from maasserver.models import Event, EventType12from maasserver.models import Event, EventType
13from maasserver.models.config import Config
13from maasserver.models.fabric import Fabric14from maasserver.models.fabric import Fabric
14from maasserver.models.interface import (15from maasserver.models.interface import (
15 BondInterface,16 BondInterface,
@@ -86,6 +87,35 @@ class TestUpdateInterfaces(MAASServerTestCase, UpdateInterfacesMixin):
86 eth0 = node.current_config.interface_set.get(name="eth0")87 eth0 = node.current_config.interface_set.get(name="eth0")
87 self.assertEqual(eth0.numa_node, node.default_numanode)88 self.assertEqual(eth0.numa_node, node.default_numanode)
8889
90 def test_dont_create_default_vlan_for_deployed_machines(self):
91 node = factory.make_Machine(status=NODE_STATUS.DEPLOYED)
92 data = FakeCommissioningData()
93 data_eth0 = data.create_physical_network(
94 "eth0",
95 mac_address="11:11:11:11:11:11",
96 )
97 data_eth0.state = "up"
98 self.update_interfaces(node, data)
99 eth0 = PhysicalInterface.objects.get(
100 name="eth0", node_config=node.current_config
101 )
102 self.assertIsNone(eth0.vlan)
103
104 def test_dont_create_default_vlan_if_disabled(self):
105 Config.objects.set_config(name="auto_vlan_creation", value=False)
106 node = factory.make_Machine(status=NODE_STATUS.NEW)
107 data = FakeCommissioningData()
108 data_eth0 = data.create_physical_network(
109 "eth0",
110 mac_address="11:11:11:11:11:11",
111 )
112 data_eth0.state = "up"
113 self.update_interfaces(node, data)
114 eth0 = PhysicalInterface.objects.get(
115 name="eth0", node_config=node.current_config
116 )
117 self.assertIsNone(eth0.vlan)
118
89 def test_all_new_physical_interfaces_no_links(self):119 def test_all_new_physical_interfaces_no_links(self):
90 controller = self.create_empty_controller()120 controller = self.create_empty_controller()
91 data = FakeCommissioningData()121 data = FakeCommissioningData()

Subscribers

People subscribed via source and target branches