It seems that this only reproduces on kernel 4.8, but does on 4.4.
The change put in to ignore certain nics was done based on 'addr_assign_type'
(/sys/class/net/<name>/addr_assign_type).
On 4.4 for a vlan, that shows as '0', (permanent address).
On 4.8, it (correctly) shows as '2' (stolen from another device)
To recreate this you can run the attached script.
$ MODE=vlan ./btest-launch.sh yakkety-server-cloudimg-amd64-proposed.img
...log in as ubuntu:password ...
Note, I can see this fail on xenial with 0.7.9-90-g61eb03fe-0ubuntu1~16.04.1
but cannot see it fail in yakkety I
## xenial
$ uname -r
4.4.0-72-generic
$ python3 -c 'from cloudinit.net import get_interfaces_by_mac; print(get_interfaces_by_mac())'
Traceback (most recent call last):
File "<string>", line 1, in <module>
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 'interface1.108' and 'interface1' have mac '52:54:00:12:34:02'
It seems that this only reproduces on kernel 4.8, but does on 4.4. net/<name> /addr_assign_ type).
The change put in to ignore certain nics was done based on 'addr_assign_type'
(/sys/class/
On 4.4 for a vlan, that shows as '0', (permanent address).
On 4.8, it (correctly) shows as '2' (stolen from another device)
To recreate this you can run the attached script.
$ MODE=vlan ./btest-launch.sh yakkety- server- cloudimg- amd64-proposed. img
...log in as ubuntu:password ...
Note, I can see this fail on xenial with 0.7.9-90- g61eb03fe- 0ubuntu1~ 16.04.1
but cannot see it fail in yakkety I
## xenial by_mac; print(get_ interfaces_ by_mac( ))' python3/ dist-packages/ cloudinit/ net/__init_ _.py", line 403, in get_interfaces_ by_mac
$ uname -r
4.4.0-72-generic
$ python3 -c 'from cloudinit.net import get_interfaces_
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/
(name, ret[mac], mac))
RuntimeError: duplicate mac found! both 'interface1.108' and 'interface1' have mac '52:54:00:12:34:02'
$ grep -r . /sys/class/net/*/ 2>/dev/null | grep addr_assign_type net/interface0/ addr_assign_ type:0 net/interface1/ addr_assign_ type:0 net/interface1. 108/addr_ assign_ type:0 net/lo/ addr_assign_ type:0
/sys/class/
/sys/class/
/sys/class/
/sys/class/
### yakkety by_mac; print(get_ interfaces_ by_mac( ))' 00:00:00: 00': 'lo', '52:54: 00:12:34: 00': 'interface0', '52:54: 00:12:34: 02': 'interface1'}
$ python3 -c 'from cloudinit.net import get_interfaces_
{'00:00:
$ uname -r
4.8.0-46-generic
$ grep -r . /sys/class/net/*/ 2>/dev/null | grep addr_assign_type net/interface0/ addr_assign_ type:0 net/interface1/ addr_assign_ type:0 net/interface1. 108/addr_ assign_ type:2 net/lo/ addr_assign_ type:0
/sys/class/
/sys/class/
/sys/class/
/sys/class/