Merge ~bjornt/maas:bug-1932136-disconnected-interfaces-enabled into maas:master

Proposed by Björn Tillenius
Status: Merged
Approved by: Björn Tillenius
Approved revision: b08b26442b6241b70c25099535634a1663576a69
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~bjornt/maas:bug-1932136-disconnected-interfaces-enabled
Merge into: maas:master
Diff against target: 102 lines (+15/-9)
2 files modified
src/metadataserver/builtin_scripts/network.py (+8/-8)
src/metadataserver/builtin_scripts/tests/test_network.py (+7/-1)
Reviewer Review Type Date Requested Status
Alberto Donato (community) Approve
MAAS Lander unittests Pending
Review via email: mp+404391@code.launchpad.net

Commit message

LP #1932136: interface with a warning is not configured properly

Now all interfaces are considered enabled, since an admin should
explicitly disable an interface if he doesn't want it configured.

I also noted that we never set link_connected, so all interfaces were
considered connected. Now we set link_connected to False if there's no
link.

To post a comment you must log in.
Revision history for this message
Alberto Donato (ack) wrote :

nice, +1

one comment inline

review: Approve
b08b264... by Björn Tillenius

Fix comment.

Revision history for this message
Björn Tillenius (bjornt) :

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/src/metadataserver/builtin_scripts/network.py b/src/metadataserver/builtin_scripts/network.py
index 886b631..95606a1 100644
--- a/src/metadataserver/builtin_scripts/network.py
+++ b/src/metadataserver/builtin_scripts/network.py
@@ -204,9 +204,9 @@ def update_physical_interface(
204 # associated with them. We still model them as physical NICs.204 # associated with them. We still model them as physical NICs.
205 mac_address = port["address"] if port else network["hwaddr"]205 mac_address = port["address"] if port else network["hwaddr"]
206 update_fields = set()206 update_fields = set()
207 is_enabled = network["state"] == "up"207 is_connected = network["state"] == "up"
208 if port is not None:208 if port is not None:
209 is_enabled = is_enabled and port["link_detected"]209 is_connected = is_connected and port["link_detected"]
210 # If an interface with same name and different MAC exists in the210 # If an interface with same name and different MAC exists in the
211 # machine, delete it. Interface names are unique on a machine, so this211 # machine, delete it. Interface names are unique on a machine, so this
212 # might be an old interface which was removed and recreated with a212 # might be an old interface which was removed and recreated with a
@@ -219,7 +219,7 @@ def update_physical_interface(
219 defaults={219 defaults={
220 "node": node,220 "node": node,
221 "name": name,221 "name": name,
222 "enabled": is_enabled,222 "enabled": True,
223 "acquired": (223 "acquired": (
224 node.is_controller or node.status == NODE_STATUS.DEPLOYED224 node.is_controller or node.status == NODE_STATUS.DEPLOYED
225 ),225 ),
@@ -235,8 +235,8 @@ def update_physical_interface(
235 )235 )
236 # Don't update the VLAN unless:236 # Don't update the VLAN unless:
237 # (1) The interface's VLAN wasn't previously known.237 # (1) The interface's VLAN wasn't previously known.
238 # (2) The interface is administratively enabled.238 # (2) The interface is connected
239 if interface.vlan is None and is_enabled:239 if interface.vlan is None and is_connected:
240 if hints is not None:240 if hints is not None:
241 new_vlan = guess_vlan_from_hints(node, name, hints)241 new_vlan = guess_vlan_from_hints(node, name, hints)
242 if new_vlan is None:242 if new_vlan is None:
@@ -254,9 +254,9 @@ def update_physical_interface(
254 update_fields.add("node")254 update_fields.add("node")
255 interface.name = name255 interface.name = name
256 update_fields.add("name")256 update_fields.add("name")
257 if interface.enabled != is_enabled:257 if interface.link_connected != is_connected:
258 interface.enabled = is_enabled258 interface.link_connected = is_connected
259 update_fields.add("enabled")259 update_fields.add("link_connected")
260260
261 # Update all the IP address on this interface. Fix the VLAN the261 # Update all the IP address on this interface. Fix the VLAN the
262 # interface belongs to so its the same as the links.262 # interface belongs to so its the same as the links.
diff --git a/src/metadataserver/builtin_scripts/tests/test_network.py b/src/metadataserver/builtin_scripts/tests/test_network.py
index 6e27c06..dd1657c 100644
--- a/src/metadataserver/builtin_scripts/tests/test_network.py
+++ b/src/metadataserver/builtin_scripts/tests/test_network.py
@@ -504,13 +504,15 @@ class TestUpdateInterfaces(MAASServerTestCase, UpdateInterfacesMixin):
504 eth0 = PhysicalInterface.objects.get(name="eth0", node=controller)504 eth0 = PhysicalInterface.objects.get(name="eth0", node=controller)
505 self.assertEqual("11:11:11:11:11:11", eth0.mac_address)505 self.assertEqual("11:11:11:11:11:11", eth0.mac_address)
506 self.assertTrue(eth0.enabled)506 self.assertTrue(eth0.enabled)
507 self.assertTrue(eth0.link_connected)
507 self.assertEqual(508 self.assertEqual(
508 Fabric.objects.get_default_fabric().get_default_vlan(), eth0.vlan509 Fabric.objects.get_default_fabric().get_default_vlan(), eth0.vlan
509 )510 )
510 self.assertEqual([], list(eth0.parents.all()))511 self.assertEqual([], list(eth0.parents.all()))
511 eth1 = PhysicalInterface.objects.get(name="eth1", node=controller)512 eth1 = PhysicalInterface.objects.get(name="eth1", node=controller)
512 self.assertEqual("22:22:22:22:22:22", eth1.mac_address)513 self.assertEqual("22:22:22:22:22:22", eth1.mac_address)
513 self.assertFalse(eth1.enabled)514 self.assertTrue(eth1.enabled)
515 self.assertFalse(eth1.link_connected)
514 self.assertIsNone(eth1.vlan)516 self.assertIsNone(eth1.vlan)
515 self.assertEqual([], list(eth1.parents.all()))517 self.assertEqual([], list(eth1.parents.all()))
516518
@@ -527,6 +529,7 @@ class TestUpdateInterfaces(MAASServerTestCase, UpdateInterfacesMixin):
527 eth0 = PhysicalInterface.objects.get(name="eth0", node=controller)529 eth0 = PhysicalInterface.objects.get(name="eth0", node=controller)
528 self.assertEqual(eth0_network.hwaddr, eth0.mac_address)530 self.assertEqual(eth0_network.hwaddr, eth0.mac_address)
529 self.assertTrue(eth0.enabled)531 self.assertTrue(eth0.enabled)
532 self.assertTrue(eth0.link_connected)
530 self.assertEqual([], list(eth0.parents.all()))533 self.assertEqual([], list(eth0.parents.all()))
531 vlan0100 = Interface.objects.get(name="vlan0100", node=controller)534 vlan0100 = Interface.objects.get(name="vlan0100", node=controller)
532 self.assertEqual(INTERFACE_TYPE.VLAN, vlan0100.type)535 self.assertEqual(INTERFACE_TYPE.VLAN, vlan0100.type)
@@ -535,6 +538,7 @@ class TestUpdateInterfaces(MAASServerTestCase, UpdateInterfacesMixin):
535 # have different MAC addresses.538 # have different MAC addresses.
536 self.assertEqual(eth0_network.hwaddr, vlan0100.mac_address)539 self.assertEqual(eth0_network.hwaddr, vlan0100.mac_address)
537 self.assertTrue(vlan0100.enabled)540 self.assertTrue(vlan0100.enabled)
541 self.assertTrue(vlan0100.link_connected)
538 self.assertEqual([eth0], list(vlan0100.parents.all()))542 self.assertEqual([eth0], list(vlan0100.parents.all()))
539 vlan101 = Interface.objects.get(name="vlan101", node=controller)543 vlan101 = Interface.objects.get(name="vlan101", node=controller)
540 self.assertEqual(INTERFACE_TYPE.VLAN, vlan101.type)544 self.assertEqual(INTERFACE_TYPE.VLAN, vlan101.type)
@@ -543,6 +547,7 @@ class TestUpdateInterfaces(MAASServerTestCase, UpdateInterfacesMixin):
543 # have different MAC addresses.547 # have different MAC addresses.
544 self.assertEqual(eth0_network.hwaddr, vlan101.mac_address)548 self.assertEqual(eth0_network.hwaddr, vlan101.mac_address)
545 self.assertTrue(vlan101.enabled)549 self.assertTrue(vlan101.enabled)
550 self.assertTrue(vlan101.link_connected)
546 self.assertEqual([eth0], list(vlan101.parents.all()))551 self.assertEqual([eth0], list(vlan101.parents.all()))
547 eth0_0102 = Interface.objects.get(name="eth0.0102", node=controller)552 eth0_0102 = Interface.objects.get(name="eth0.0102", node=controller)
548 self.assertEqual(INTERFACE_TYPE.VLAN, eth0_0102.type)553 self.assertEqual(INTERFACE_TYPE.VLAN, eth0_0102.type)
@@ -551,6 +556,7 @@ class TestUpdateInterfaces(MAASServerTestCase, UpdateInterfacesMixin):
551 # have different MAC addresses.556 # have different MAC addresses.
552 self.assertEqual(eth0_network.hwaddr, eth0_0102.mac_address)557 self.assertEqual(eth0_network.hwaddr, eth0_0102.mac_address)
553 self.assertTrue(eth0_0102.enabled)558 self.assertTrue(eth0_0102.enabled)
559 self.assertTrue(eth0_0102.link_connected)
554 self.assertEqual([eth0], list(eth0_0102.parents.all()))560 self.assertEqual([eth0], list(eth0_0102.parents.all()))
555561
556 def test_vlans_with_alternate_naming_conventions_vm_host(self):562 def test_vlans_with_alternate_naming_conventions_vm_host(self):

Subscribers

People subscribed via source and target branches