Merge ~blake-rouse/maas:fix-1788780-2.4 into maas:2.4

Proposed by Blake Rouse
Status: Merged
Approved by: Blake Rouse
Approved revision: c4dabaf1fafb3be88bde34201701d77d0ffa3c4b
Merge reported by: MAAS Lander
Merged at revision: not available
Proposed branch: ~blake-rouse/maas:fix-1788780-2.4
Merge into: maas:2.4
Diff against target: 98 lines (+37/-2)
4 files modified
src/provisioningserver/utils/ipaddr.py (+2/-0)
src/provisioningserver/utils/network.py (+13/-1)
src/provisioningserver/utils/tests/test_ipaddr.py (+12/-1)
src/provisioningserver/utils/tests/test_network.py (+10/-0)
Reviewer Review Type Date Requested Status
Blake Rouse (community) Approve
Review via email: mp+365798@code.launchpad.net

Commit message

LP: #1788780 - Ignore tunnel interfaces (such as those created by hypervisors) when gathering interfaces for MAAS management.

Backport of 842646142d42d95453f4b64c209f93b09f8aea7c

To post a comment you must log in.
Revision history for this message
Blake Rouse (blake-rouse) wrote :

Self-approving backport.

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/provisioningserver/utils/ipaddr.py b/src/provisioningserver/utils/ipaddr.py
index 1a2b8ee..c858332 100644
--- a/src/provisioningserver/utils/ipaddr.py
+++ b/src/provisioningserver/utils/ipaddr.py
@@ -272,6 +272,8 @@ def get_interface_type(
272 return 'ethernet.bond'272 return 'ethernet.bond'
273 if os.path.isfile(os.path.join(proc_net, "vlan", ifname)):273 if os.path.isfile(os.path.join(proc_net, "vlan", ifname)):
274 return 'ethernet.vlan'274 return 'ethernet.vlan'
275 if os.path.isfile(os.path.join(sys_path, 'tun_flags')):
276 return 'ethernet.tunnel'
275 device_path = os.path.join(sys_path, 'device')277 device_path = os.path.join(sys_path, 'device')
276 if os.path.islink(device_path):278 if os.path.islink(device_path):
277 device_80211 = os.path.join(sys_path, 'device', 'ieee80211')279 device_80211 = os.path.join(sys_path, 'device', 'ieee80211')
diff --git a/src/provisioningserver/utils/network.py b/src/provisioningserver/utils/network.py
index 06ed74e..c3984e6 100644
--- a/src/provisioningserver/utils/network.py
+++ b/src/provisioningserver/utils/network.py
@@ -1142,8 +1142,20 @@ def get_all_interfaces_definition(annotate_with_monitored: bool=True) -> dict:
1142 interfaces = {}1142 interfaces = {}
1143 dhclient_info = get_dhclient_info()1143 dhclient_info = get_dhclient_info()
1144 iproute_info = get_ip_route()1144 iproute_info = get_ip_route()
1145 exclude_types = ["loopback", "ipip"]1145 exclude_types = [
1146 # It doesn't make sense for MAAS to manage loopback interfaces.
1147 "loopback",
1148 # IPv4-in-IPv4 tunnels aren't useful for MAAS to manage.
1149 "ipip",
1150 # This type of interface is created when hypervisors create virtual
1151 # interfaces for guests. By themselves, they're not useful for MAAS to
1152 # manage.
1153 "ethernet.tunnel",
1154 ]
1146 if not running_in_container():1155 if not running_in_container():
1156 # When not running in a container, we should be able to identify
1157 # any Ethernet-variant interfaces that are specific enough to be used
1158 # with MAAS. So we can throw away any that can't be classified.
1147 exclude_types.append("ethernet")1159 exclude_types.append("ethernet")
1148 ipaddr_info = {1160 ipaddr_info = {
1149 name: ipaddr1161 name: ipaddr
diff --git a/src/provisioningserver/utils/tests/test_ipaddr.py b/src/provisioningserver/utils/tests/test_ipaddr.py
index ccede05..46c4993 100644
--- a/src/provisioningserver/utils/tests/test_ipaddr.py
+++ b/src/provisioningserver/utils/tests/test_ipaddr.py
@@ -365,7 +365,7 @@ class FakeSysProcTestCase(MAASTestCase):
365 def createInterfaceType(365 def createInterfaceType(
366 self, ifname, iftype, is_bridge=False, is_vlan=False,366 self, ifname, iftype, is_bridge=False, is_vlan=False,
367 is_bond=False, is_wireless=False, is_physical=False,367 is_bond=False, is_wireless=False, is_physical=False,
368 bonded_interfaces=None):368 is_tunnel=False, bonded_interfaces=None):
369 ifdir = os.path.join(self.tmp_sys_net, ifname)369 ifdir = os.path.join(self.tmp_sys_net, ifname)
370 os.mkdir(ifdir)370 os.mkdir(ifdir)
371 type_file = os.path.join(ifdir, 'type')371 type_file = os.path.join(ifdir, 'type')
@@ -373,6 +373,9 @@ class FakeSysProcTestCase(MAASTestCase):
373 f.write("%d\n" % iftype)373 f.write("%d\n" % iftype)
374 if is_bridge:374 if is_bridge:
375 os.mkdir(os.path.join(ifdir, 'bridge'))375 os.mkdir(os.path.join(ifdir, 'bridge'))
376 if is_tunnel:
377 with open(os.path.join(ifdir, "tun_flags"), 'w'):
378 pass # Just touch.
376 if is_vlan:379 if is_vlan:
377 with open(os.path.join(self.tmp_proc_net, "vlan", ifname), 'w'):380 with open(os.path.join(self.tmp_proc_net, "vlan", ifname), 'w'):
378 pass # Just touch.381 pass # Just touch.
@@ -415,6 +418,14 @@ class TestGetInterfaceType(FakeSysProcTestCase):
415 Equals('ethernet.bridge')418 Equals('ethernet.bridge')
416 )419 )
417420
421 def test__identifies_tunnel_interface(self):
422 self.createEthernetInterface('vnet0', is_tunnel=True)
423 self.assertThat(get_interface_type(
424 'vnet0', sys_class_net=self.tmp_sys_net,
425 proc_net=self.tmp_proc_net),
426 Equals('ethernet.tunnel')
427 )
428
418 def test__identifies_bond_interface(self):429 def test__identifies_bond_interface(self):
419 self.createEthernetInterface('bond0', is_bond=True)430 self.createEthernetInterface('bond0', is_bond=True)
420 self.assertThat(get_interface_type(431 self.assertThat(get_interface_type(
diff --git a/src/provisioningserver/utils/tests/test_network.py b/src/provisioningserver/utils/tests/test_network.py
index b7472ef..0ba67da 100644
--- a/src/provisioningserver/utils/tests/test_network.py
+++ b/src/provisioningserver/utils/tests/test_network.py
@@ -1214,6 +1214,16 @@ class TestGetAllInterfacesDefinition(MAASTestCase):
1214 }1214 }
1215 self.assertInterfacesResult(ip_addr, {}, {}, MatchesDict({}))1215 self.assertInterfacesResult(ip_addr, {}, {}, MatchesDict({}))
12161216
1217 def test__ignores_tunnel(self):
1218 ip_addr = {
1219 "vnet": {
1220 "type": "ethernet.tunnel",
1221 "flags": ["UP"],
1222 "index": 2,
1223 },
1224 }
1225 self.assertInterfacesResult(ip_addr, {}, {}, MatchesDict({}))
1226
1217 def test__simple(self):1227 def test__simple(self):
1218 ip_addr = {1228 ip_addr = {
1219 "eth0": {1229 "eth0": {

Subscribers

People subscribed via source and target branches