** Description changed:
+ === Begin SRU Template ===
+ [Impact]
+ When booting with bonds provided in networking configuration, cloud-init
+ can fail as it attempts to rename the bond device to an interface.
+
+ [Test Case]
+ * download ubuntu cloud image
+ * mount image, enable proposed, update, upgrade cloud-init
+ * run 'bond-rename-launch' as provided.
+ * login to kvm guest as 'ubuntu:passw0rd'
+ * sudo cloud-init init
+
+ the 'cloud-init init' above would fail before in an attempt
+ to rename a bond device. It will succeed now, as it will realize
+ that it does not have anything to do.
+
+ [Regression Potential]
+ Should be small. regressions would be certainly related to
+ bond or vlan configurations.
+
+ === End SRU Template ===
+
+
1. Zesty amd64
2. cloud-init 0.7.9-47-gc81ea53-0ubuntu1
3. cloud-init boots with a bond network config and does not attempt to
rename bond0
4. cloud-init init (net mode) fails when it attempts to rename a bond
interface
-
Running with the following network config (2 nics)
config:
- mac_address: bc:76:4e:06:96:b3
- name: interface0
- type: physical
+ name: interface0
+ type: physical
- mac_address: bc:76:4e:04:88:41
- name: interface1
- type: physical
+ name: interface1
+ type: physical
- bond_interfaces:
- - interface0
- - interface1
- name: bond0
- params:
- bond_miimon: 100
- bond_mode: 802.3ad
- bond_xmit_hash_policy: layer3+4
- type: bond
+ - interface0
+ - interface1
+ name: bond0
+ params:
+ bond_miimon: 100
+ bond_mode: 802.3ad
+ bond_xmit_hash_policy: layer3+4
+ type: bond
- name: bond0.108
- subnets:
- - address: 65.61.151.38
- netmask: 255.255.255.252
- routes:
- - gateway: 65.61.151.37
- netmask: 0.0.0.0
- network: 0.0.0.0
- type: static
- - address: 2001:4800:78ff:1b:be76:4eff:fe06:96b3
- netmask: 'ffff:ffff:ffff:ffff::'
- routes:
- - gateway: 2001:4800:78ff:1b::1
- netmask: '::'
- network: '::'
- type: static
- type: vlan
- vlan_id: '108'
- vlan_link: bond0
+ subnets:
+ - address: 65.61.151.38
+ netmask: 255.255.255.252
+ routes:
+ - gateway: 65.61.151.37
+ netmask: 0.0.0.0
+ network: 0.0.0.0
+ type: static
+ - address: 2001:4800:78ff:1b:be76:4eff:fe06:96b3
+ netmask: 'ffff:ffff:ffff:ffff::'
+ routes:
+ - gateway: 2001:4800:78ff:1b::1
+ netmask: '::'
+ network: '::'
+ type: static
+ type: vlan
+ vlan_id: '108'
+ vlan_link: bond0
- name: bond0.208
- subnets:
- - address: 10.184.225.122
- netmask: 255.255.255.252
- routes:
- - gateway: 10.184.225.121
- netmask: 255.240.0.0
- network: 10.176.0.0
- - gateway: 10.184.225.121
- netmask: 255.240.0.0
- network: 10.208.0.0
- type: static
- type: vlan
- vlan_id: '208'
- vlan_link: bond0
+ subnets:
+ - address: 10.184.225.122
+ netmask: 255.255.255.252
+ routes:
+ - gateway: 10.184.225.121
+ netmask: 255.240.0.0
+ network: 10.176.0.0
+ - gateway: 10.184.225.121
+ netmask: 255.240.0.0
+ network: 10.208.0.0
+ type: static
+ type: vlan
+ vlan_id: '208'
+ vlan_link: bond0
- address: 72.3.128.240
- type: nameserver
+ type: nameserver
- address: 72.3.128.241
- type: nameserver
-
+ type: nameserver
During cloud-init init --local; the network configuration is rendered and
brought up
bond0 is a virtual interface which uses the MAC from one of the slaves.
In cloud-init init (net) mode, we check if the interfaces are named properly;
When cloud-init collects the current_rename_info, it reads the MAC address of
each device listed in /sys/class/net; this includes *virtual* devices, like
bonds/bridges
Then it looks up an interface name by MAC, however the bond and one of the
interfaces
have the same value which results in cloud-init attempting to rename bond0
The solution is to not collect MACs of virtual interfaces for rename-purpose
since
virtual devices do not ever get renamed; their name is defined by the config.
diff --git a/cloudinit/net/__init__.py b/cloudinit/net/__init__.py
index ea649cc..e2a50ad 100755
--- a/cloudinit/net/__init__.py
+++ b/cloudinit/net/__init__.py
@@ -14,6 +14,7 @@ from cloudinit import util
-
- LOG = logging.getLogger(__name__)
- SYS_CLASS_NET = "/sys/class/net/"
+
+ LOG = logging.getLogger(__name__)
+ SYS_CLASS_NET = "/sys/class/net/"
+SYS_DEV_VIRT_NET = "/sys/devices/virtual/net/"
- DEFAULT_PRIMARY_INTERFACE = 'eth0'
-
-
+ DEFAULT_PRIMARY_INTERFACE = 'eth0'
+
@@ -205,7 +206,11 @@ def _get_current_rename_info(check_downable=True):
- """Collect information necessary for rename_interfaces."""
- names = get_devicelist()
- bymac = {}
+ """Collect information necessary for rename_interfaces."""
+ names = get_devicelist()
+ bymac = {}
+ virtual = os.listdir(SYS_DEV_VIRT_NET)
- for n in names:
+ for n in names:
+ # do not attempt to rename virtual interfaces
+ if n in virtual:
+ continue
- bymac[get_interface_mac(n)] = {
- 'name': n, 'up': is_up(n), 'downable': None}
-
+ bymac[get_interface_mac(n)] = {
+ 'name': n, 'up': is_up(n), 'downable': None}
Log file of a failure:
http://paste.ubuntu.com/24084999/
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1669860
Title:
cloud-init attempts to rename bonds
To manage notifications about this bug go to:
https://bugs.launchpad.net/cloud-init/+bug/1669860/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs