From 88ebf8106dfc3e2731e1e2d7c92c13662cbe0a59 Mon Sep 17 00:00:00 2001 From: Harm Weites Date: Wed, 8 Oct 2014 15:12:17 +0200 Subject: fix: Take care of FreeBSD nic devicenames since they differ depending on the platform involved. Xen/KVM (Azure?) use different drivers, which results in different device names. --- cloudinit/distros/freebsd.py | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'cloudinit/distros/freebsd.py') diff --git a/cloudinit/distros/freebsd.py b/cloudinit/distros/freebsd.py index b281b0d2..ee74cd2d 100644 --- a/cloudinit/distros/freebsd.py +++ b/cloudinit/distros/freebsd.py @@ -106,14 +106,34 @@ class Distro(distros.Distro): val = None return val - # NOVA will inject something like eth0, rewrite that to use the - # virtio-based BSD adapter. + # NOVA will inject something like eth0, rewrite that to use the FreeBSD + # adapter. Since this adapter is based on the used driver, we need to + # figure out which interfaces are available. On KVM platforms this is + # vtnet0, where Xen would use xn0. def getnetifname(self, dev): LOG.debug("Translating network interface %s", dev) if dev.startswith('lo'): return dev + n = re.search('\d+$', dev) - return 'vtnet' + n.group(0) + index = n.group(0) + + (out, err) = util.subp(['ifconfig', '-a']) + ifconfigoutput = [x for x in (out.strip()).splitlines() if len(x.split()) > 0] + for line in ifconfigoutput: + m = re.match('^\w+', line) + if m: + if m.group(0).startswith('lo'): + next + # Just settle with the first non-lo adapter we find, since it's + # rather unlikely there will be multiple nicdrivers involved. + bsddev = m.group(0) + break + + # Replace the index with the one we're after. + bsddev = re.sub('\d+$', index, bsddev) + LOG.debug("Using network interface %s", bsddev) + return bsddev def _read_system_hostname(self): sys_hostname = self._read_hostname(filename=None) -- cgit v1.2.3