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
1diff --git a/src/metadataserver/builtin_scripts/network.py b/src/metadataserver/builtin_scripts/network.py
2index 886b631..95606a1 100644
3--- a/src/metadataserver/builtin_scripts/network.py
4+++ b/src/metadataserver/builtin_scripts/network.py
5@@ -204,9 +204,9 @@ def update_physical_interface(
6 # associated with them. We still model them as physical NICs.
7 mac_address = port["address"] if port else network["hwaddr"]
8 update_fields = set()
9- is_enabled = network["state"] == "up"
10+ is_connected = network["state"] == "up"
11 if port is not None:
12- is_enabled = is_enabled and port["link_detected"]
13+ is_connected = is_connected and port["link_detected"]
14 # If an interface with same name and different MAC exists in the
15 # machine, delete it. Interface names are unique on a machine, so this
16 # might be an old interface which was removed and recreated with a
17@@ -219,7 +219,7 @@ def update_physical_interface(
18 defaults={
19 "node": node,
20 "name": name,
21- "enabled": is_enabled,
22+ "enabled": True,
23 "acquired": (
24 node.is_controller or node.status == NODE_STATUS.DEPLOYED
25 ),
26@@ -235,8 +235,8 @@ def update_physical_interface(
27 )
28 # Don't update the VLAN unless:
29 # (1) The interface's VLAN wasn't previously known.
30- # (2) The interface is administratively enabled.
31- if interface.vlan is None and is_enabled:
32+ # (2) The interface is connected
33+ if interface.vlan is None and is_connected:
34 if hints is not None:
35 new_vlan = guess_vlan_from_hints(node, name, hints)
36 if new_vlan is None:
37@@ -254,9 +254,9 @@ def update_physical_interface(
38 update_fields.add("node")
39 interface.name = name
40 update_fields.add("name")
41- if interface.enabled != is_enabled:
42- interface.enabled = is_enabled
43- update_fields.add("enabled")
44+ if interface.link_connected != is_connected:
45+ interface.link_connected = is_connected
46+ update_fields.add("link_connected")
47
48 # Update all the IP address on this interface. Fix the VLAN the
49 # interface belongs to so its the same as the links.
50diff --git a/src/metadataserver/builtin_scripts/tests/test_network.py b/src/metadataserver/builtin_scripts/tests/test_network.py
51index 6e27c06..dd1657c 100644
52--- a/src/metadataserver/builtin_scripts/tests/test_network.py
53+++ b/src/metadataserver/builtin_scripts/tests/test_network.py
54@@ -504,13 +504,15 @@ class TestUpdateInterfaces(MAASServerTestCase, UpdateInterfacesMixin):
55 eth0 = PhysicalInterface.objects.get(name="eth0", node=controller)
56 self.assertEqual("11:11:11:11:11:11", eth0.mac_address)
57 self.assertTrue(eth0.enabled)
58+ self.assertTrue(eth0.link_connected)
59 self.assertEqual(
60 Fabric.objects.get_default_fabric().get_default_vlan(), eth0.vlan
61 )
62 self.assertEqual([], list(eth0.parents.all()))
63 eth1 = PhysicalInterface.objects.get(name="eth1", node=controller)
64 self.assertEqual("22:22:22:22:22:22", eth1.mac_address)
65- self.assertFalse(eth1.enabled)
66+ self.assertTrue(eth1.enabled)
67+ self.assertFalse(eth1.link_connected)
68 self.assertIsNone(eth1.vlan)
69 self.assertEqual([], list(eth1.parents.all()))
70
71@@ -527,6 +529,7 @@ class TestUpdateInterfaces(MAASServerTestCase, UpdateInterfacesMixin):
72 eth0 = PhysicalInterface.objects.get(name="eth0", node=controller)
73 self.assertEqual(eth0_network.hwaddr, eth0.mac_address)
74 self.assertTrue(eth0.enabled)
75+ self.assertTrue(eth0.link_connected)
76 self.assertEqual([], list(eth0.parents.all()))
77 vlan0100 = Interface.objects.get(name="vlan0100", node=controller)
78 self.assertEqual(INTERFACE_TYPE.VLAN, vlan0100.type)
79@@ -535,6 +538,7 @@ class TestUpdateInterfaces(MAASServerTestCase, UpdateInterfacesMixin):
80 # have different MAC addresses.
81 self.assertEqual(eth0_network.hwaddr, vlan0100.mac_address)
82 self.assertTrue(vlan0100.enabled)
83+ self.assertTrue(vlan0100.link_connected)
84 self.assertEqual([eth0], list(vlan0100.parents.all()))
85 vlan101 = Interface.objects.get(name="vlan101", node=controller)
86 self.assertEqual(INTERFACE_TYPE.VLAN, vlan101.type)
87@@ -543,6 +547,7 @@ class TestUpdateInterfaces(MAASServerTestCase, UpdateInterfacesMixin):
88 # have different MAC addresses.
89 self.assertEqual(eth0_network.hwaddr, vlan101.mac_address)
90 self.assertTrue(vlan101.enabled)
91+ self.assertTrue(vlan101.link_connected)
92 self.assertEqual([eth0], list(vlan101.parents.all()))
93 eth0_0102 = Interface.objects.get(name="eth0.0102", node=controller)
94 self.assertEqual(INTERFACE_TYPE.VLAN, eth0_0102.type)
95@@ -551,6 +556,7 @@ class TestUpdateInterfaces(MAASServerTestCase, UpdateInterfacesMixin):
96 # have different MAC addresses.
97 self.assertEqual(eth0_network.hwaddr, eth0_0102.mac_address)
98 self.assertTrue(eth0_0102.enabled)
99+ self.assertTrue(eth0_0102.link_connected)
100 self.assertEqual([eth0], list(eth0_0102.parents.all()))
101
102 def test_vlans_with_alternate_naming_conventions_vm_host(self):

Subscribers

People subscribed via source and target branches