← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1692028] Re: duplicate mac address during config-drive configuration with LXD container on openstack

 

This is fixed in artful:

[ 11:48AM 10022 ]  [ bdmurray@impulse:/tmp/cloud-init-0.7.9-153-g16a7302f ]
 $ grep -r "test_duplicates_of_empty_mac" *
tests/unittests/test_net.py:    def test_duplicates_of_empty_mac_are_ok(self):


** Changed in: cloud-init (Ubuntu Artful)
       Status: Confirmed => Fix Released

** Changed in: cloud-init (Ubuntu Yakkety)
       Status: Confirmed => Fix Committed

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to cloud-init.
https://bugs.launchpad.net/bugs/1692028

Title:
  duplicate mac address during config-drive configuration with LXD
  container on openstack

Status in cloud-init:
  Fix Committed
Status in cloud-init package in Ubuntu:
  Fix Released
Status in cloud-init source package in Xenial:
  Confirmed
Status in cloud-init source package in Yakkety:
  Fix Committed
Status in cloud-init source package in Zesty:
  Fix Committed
Status in cloud-init source package in Artful:
  Fix Released

Bug description:
  === Begin SRU Template ===
  [Impact] 
  When the 'ip_gre' module is loaded, the kernel creates two network
  devices 'gre0' and 'gretap0' that appear in all network namespaces.
  (For example, if you create an lxd container, and then load the ip_gre
  module from outside the container, the container will see 2 new
  network devices).
  The hardware address of these devices is 00:00:00:00:00 as seen below.
     # ( cd /sys/class/net/ && grep . gre*/address )
     gre0/address:00:00:00:00
     gretap0/address:00:00:00:00:00:00

  This "duplicate" mac address caused cloud-init to raise a
  RuntimeError.

  The overall impact is that cloudinit's network rendering code will
  not work if the ip_gre module is loaded on the system.  That will
  happen in some nova-lxd environments, but also anywhere where a user
  has loaded that module and is running lxc.

  [Test Case]

  1.) load a module on your host
      sudo modprobe ip_gre

  2.) Launch an instance in lxd.

   $ rel=xenial
   $ name=x1
   $ lxc launch ubuntu-daily:$rel $name

  3.) see the stack trace by running 'get_interfaces_by_mac()' in the
  guest.

   $ lxc exec $name -- \
       python3 -c 'from cloudinit import net; print(net.get_interfaces_by_mac())'

  4.) upgrade instance to proposed cloud-init
   $ lxc exec $name -- sh -c '
      mirror=http://archive.ubuntu.com/ubuntu
      echo deb $mirror $(lsb_release -sc)-proposed main |
         tee /etc/apt/sources.list.d/proposed.list
      apt-get update -q
      apt-get install -qy cloud-init'
   $ lxc exec $name -- dpkg-query --show cloud-init

  5.) see that get_interfaces_by_mac() no longer stack traces.   
   $ lxc exec $name -- \
       python3 -c 'from cloudinit import net; print(net.get_interfaces_by_mac())'

  A more complete test case is to load an image into nova-lxd with gre
  tunneling loaded on the host, but that is much more involved setup.

  [Regression Potential] 
  Regression potential should be pretty low.  We are simply ignoring
  network interfaces not named 'lo' that have a mac address of '00:00:00:00:00'

  [Other Info]
  Upstream commit at
    https://git.launchpad.net/cloud-init/commit/?id=2c0655feb9

  === End SRU Template ===

  Whilst testing the changes for nova-lxd to resolve issues with use of
  config-drive, I tripped over this issue; specifically the networking
  on a config-drive configured LXD instance never starts due to a
  duplicate MAC address on the lo and greptap0 devices.

  Cloud-init v. 0.7.9 running 'init' at Fri, 19 May 2017 13:41:00 +0000. Up 2.0 seconds.
  ci-info: ++++++++++++++++++++++++++++++++++++++++++++++++++++Net device info+++++++++++++++++++++++++++++++++++++++++++++++++++++
  ci-info: +---------+-------+------------------------------+-----------+-------+-------------------------------------------------+
  ci-info: |  Device |   Up  |           Address            |    Mask   | Scope |                    Hw-Address                   |
  ci-info: +---------+-------+------------------------------+-----------+-------+-------------------------------------------------+
  ci-info: | gretap0 | False |              .               |     .     |   .   |                00:00:00:00:00:00                |
  ci-info: |   eth0  |  True |              .               |     .     |   .   |                fa:16:3e:1d:aa:ac                |
  ci-info: |   eth0  |  True | fe80::f816:3eff:fe1d:aaac/64 |     .     |  link |                fa:16:3e:1d:aa:ac                |
  ci-info: |    lo   |  True |          127.0.0.1           | 255.0.0.0 |   .   |                        .                        |
  ci-info: |    lo   |  True |           ::1/128            |     .     |  host |                        .                        |
  ci-info: |   gre0  | False |              .               |     .     |   .   | 00-00-00-00-31-36-3a-33-00-00-00-00-00-00-00-00 |
  ci-info: +---------+-------+------------------------------+-----------+-------+-------------------------------------------------+
  2017-05-19 13:41:01,017 - util.py[WARNING]: failed stage init
  failed run of stage init
  ------------------------------------------------------------
  Traceback (most recent call last):
    File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 647, in status_wrapper
      ret = functor(name, args)
    File "/usr/lib/python3/dist-packages/cloudinit/cmd/main.py", line 365, in main_init
      init.apply_network_config(bring_up=bool(mode != sources.DSMODE_LOCAL))
    File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 629, in apply_network_config
      netcfg, src = self._find_networking_config()
    File "/usr/lib/python3/dist-packages/cloudinit/stages.py", line 616, in _find_networking_config
      if self.datasource and hasattr(self.datasource, 'network_config'):
    File "/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceConfigDrive.py", line 150, in network_config
      self.network_json, known_macs=self.known_macs)
    File "/usr/lib/python3/dist-packages/cloudinit/sources/helpers/openstack.py", line 638, in convert_net_json
      known_macs = net.get_interfaces_by_mac()
    File "/usr/lib/python3/dist-packages/cloudinit/net/__init__.py", line 403, in get_interfaces_by_mac
      (name, ret[mac], mac))
  RuntimeError: duplicate mac found! both 'gretap0' and 'lo' have mac '00:00:00:00:00:00'
  ------------------------------------------------------------
  Cloud-init v. 0.7.9 running 'modules:config' at Fri, 19 May 2017 13:41:02 +0000. Up 4.0 seconds.
  Cloud-init v. 0.7.9 running 'modules:final' at Fri, 19 May 2017 13:41:04 +0000. Up 6.0 seconds.
  Cloud-init v. 0.7.9 finished at Fri, 19 May 2017 13:41:04 +0000. Datasource DataSourceConfigDrive [net,ver=2][source=/config-drive].  Up 6.0 seconds

  Related bugs:
   * bug 1692545: guests have unexpected network devices gretap0 and gre0

To manage notifications about this bug go to:
https://bugs.launchpad.net/cloud-init/+bug/1692028/+subscriptions


References