summaryrefslogtreecommitdiff
path: root/cloudinit/net
diff options
context:
space:
mode:
authorBrett Holman <brett.holman@canonical.com>2022-07-06 17:30:03 -0600
committerGitHub <noreply@github.com>2022-07-06 17:30:03 -0600
commitaf404781299d3223af306456f994b4d0f5f27ce4 (patch)
treef2fd494df5d1f1be0375de848b1ebbb4d1fd7981 /cloudinit/net
parentc58ea03114838341a1c4bd99a91da5c1b98f4cef (diff)
downloadcloud-init-git-af404781299d3223af306456f994b4d0f5f27ce4.tar.gz
net: fix interface matching support (#1552)
- broken in bf94945fb855c40c5188cef5fb - factor out a reusable helper function - stylistic change for Python's new match keyword LP: #1979877
Diffstat (limited to 'cloudinit/net')
-rw-r--r--cloudinit/net/__init__.py7
-rw-r--r--cloudinit/net/network_state.py16
2 files changed, 18 insertions, 5 deletions
diff --git a/cloudinit/net/__init__.py b/cloudinit/net/__init__.py
index f5545fc1..4bc48676 100644
--- a/cloudinit/net/__init__.py
+++ b/cloudinit/net/__init__.py
@@ -928,6 +928,13 @@ def get_interfaces_by_mac(blacklist_drivers=None) -> dict:
)
+def find_interface_name_from_mac(mac: str) -> Optional[str]:
+ for interface_mac, interface_name in get_interfaces_by_mac().items():
+ if mac.lower() == interface_mac.lower():
+ return interface_name
+ return None
+
+
def get_interfaces_by_mac_on_freebsd(blacklist_drivers=None) -> dict:
(out, _) = subp.subp(["ifconfig", "-a", "ether"])
diff --git a/cloudinit/net/network_state.py b/cloudinit/net/network_state.py
index 2c64e492..80f2b108 100644
--- a/cloudinit/net/network_state.py
+++ b/cloudinit/net/network_state.py
@@ -11,6 +11,7 @@ from typing import Any, Dict
from cloudinit import safeyaml, util
from cloudinit.net import (
+ find_interface_name_from_mac,
get_interfaces_by_mac,
ipv4_mask_to_net_prefix,
ipv6_mask_to_net_prefix,
@@ -700,15 +701,14 @@ class NetworkStateInterpreter(metaclass=CommandHandlerMeta):
# * interface name looked up by mac
# * value of "eth" key from this loop
name = eth
- set_name = cfg.get("set-name", None)
+ set_name = cfg.get("set-name")
if set_name:
name = set_name
elif mac_address and ifaces_by_mac:
lcase_mac_address = mac_address.lower()
- for iface_mac, iface_name in ifaces_by_mac.items():
- if lcase_mac_address == iface_mac.lower():
- name = iface_name
- break
+ mac = find_interface_name_from_mac(lcase_mac_address)
+ if mac:
+ name = mac
phy_cmd["name"] = name
driver = match.get("driver", None)
@@ -780,6 +780,12 @@ class NetworkStateInterpreter(metaclass=CommandHandlerMeta):
if len(dns) > 0:
name_cmd.update({"address": dns})
self.handle_nameserver(name_cmd)
+
+ mac_address = dev_cfg.get("match", {}).get("macaddress")
+ real_if_name = find_interface_name_from_mac(mac_address)
+ if real_if_name:
+ iface = real_if_name
+
self._handle_individual_nameserver(name_cmd, iface)
def _handle_bond_bridge(self, command, cmd_type=None):