** Description changed:

+ === Begin netplan SRU Template ===
  [Impact]
  Virtual devices such as VLANs, bridges and bonds may require the user to set 
a specific MAC address for proper operation on networks; where the same MAC may 
be used by default by the systems due to the methods used to create them.
  
  [Test case]
  /!\ This only works with the networkd renderer; NetworkManager does not 
currently support setting a MAC on bonds and bridges.
  
  1) Set a MAC address for a virtual device (bond, bridge or vlan), using
  the following syntax in netplan config:
  
  macaddress: ##:##:##:##:##:##
  
  2) Validate that the device gets the MAC address applied.
  
  [Regression potential]
  Failure to bring up a device configured in netplan or to set the MAC should 
be looked at as a possible regression. Other issues could include failure to 
write the configuration for networkd or NetworkManager.
+ === End netplan SRU Template ===
+ http://pad.lv/1690388
+ https://bugs.launchpad.net/ubuntu/+source/cloud-init/+bug/1690388
+     
+ === Begin cloud-init SRU Template ===
+ [Impact] 
+ Virtual devices such as VLANs, bridges and bonds may require the user to set a
+ specific MAC address for proper operation on networks; where the same MAC may
+ be used by default by the systems due to the methods used to create them.
+ 
+ cloud-init would not render the mac address of the vlan into its
+ ifupdown/eni or netplan output.  The result is that the vlan device
+ would not get the desired mac address.
+ 
+ [Test Case]
+ The basic idea below is:
+  a.) launch an instance with proposed version of cloud-init.
+  b.) inside instance, get cloud-init's network rendering tool from trunk
+  c.) run the rendering tool against a config that failed before.
+  d.) check rendered netplan config to verify it has vlan mac addresses 
present.
+ 
+ [Regression Potential] 
+ Fairly low chance for regression.  The mac address fields were just
+ not being written, and now they will be.
+ 
+ ## launch an instance.
+ $ release=xenial
+ $ ref=$release-proposed
+ $ lxc-proposed-snapshot --proposed --publish $release $ref
+ $ lxc init $ref $name
+ 
+ ## get render tool
+ $ wget 
https://git.launchpad.net/~cloud-init-dev/cloud-init/plain/tools/net-convert.py 
-O net-convert.py
+ 
+ ## write a network config with vlan and mac address.
+ $ cat > net-config.yaml <<"EOF"
+ version: 1
+ config:
+     - type: physical
+       name: eth0
+       mac_address: "fa:35:9c:85:55:00"
+       subnets: [{type: dhcp}]
+     - type: vlan
+       name: eth0.101
+       vlan_link: eth0
+       vlan_id: 101
+       mac_address: fe:35:9c:85:55:ee
+       mtu: 1500
+       subnets:
+         - type: static
+           address: 192.168.2.10/24
+ EOF
+ 
+ $ for k in eni netplan; do 
+    PYTHONPATH=$PWD python3 ./net-convert.py \
+     --network-data=net-config.yaml --kind=yaml \
+     --output-kind=$k --mac=eth0,fa:35:9c:85:55:00 \
+     --directory=out.d ; done
+ 
+ $ cat out.d/etc/network/interfaces
+ auto lo
+ iface lo inet loopback
+ 
+ auto eth0
+ iface eth0 inet dhcp
+ 
+ auto eth0.101
+ iface eth0.101 inet static
+     address 192.168.2.10/24
+     hwaddress fe:35:9c:85:55:ee
+     mtu 1500
+     vlan-raw-device eth0
+     vlan_id 101
+ 
+ 
+ $ cat out.d/etc/netplan/50-cloud-init.yaml
+ network:
+     version: 2
+     ethernets:
+         eth0:
+             dhcp4: true
+             match:
+                 macaddress: fe:35:9c:85:55:00
+             set-name: eth0
+     vlans:
+         eth0.101:
+             addresses:
+             - 192.168.2.10/24
+             id: 101
+             link: eth0
+             macaddress: fe:35:9c:85:55:ee
+ 
+ 
+ ## If you're running on a openstack system, you can actually take
+ ## this a step further and replace the system networking with the
+ ## newly generated config, reboot and see the vlan come up.
+ ## You'll need to update the 'mac_address' for eth0 in net-config.yaml
+ ## to match your system, then re-run the net-convert and update the
+ ## system.
+ $ sudo cp out.d/etc/network/interfaces /etc/network/interfaces
+ $ sudo cp out.d/etc/udev/rules.d/70-persistent-net.rules 
/etc/udev/rules.d/70-persistent-net.rules
+ ## drop the .rules files and update the initramfs
+ $ sudo rm -f /etc/systemd/network/50-cloud-init-*
+ $ sudo update-initramfs -u -k all
+ $ sudo reboot
+ 
+ 
+ [Other Info]
+ Upstream commit at
+   https://git.launchpad.net/cloud-init/commit/?id=d059d480c3
+ 
+ === End cloud-init SRU Template ===
  
  ----
  
  The expected hwaddresses are as follows:
  
  4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue 
state UP group default
      link/ether a0:36:9f:2d:93:80 brd ff:ff:ff:ff:ff:ff
      inet6 fe80::a236:9fff:fe2d:9380/64 scope link
         valid_lft forever preferred_lft forever
  5: bond0.101@bond0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue 
state UP group default
      link/ether a0:36:9f:2d:93:80 brd ff:ff:ff:ff:ff:ff
      inet 104.130.20.119/24 brd 104.130.20.255 scope global bond0.101
         valid_lft forever preferred_lft forever
      inet6 fe80::a236:9fff:fe2d:9380/64 scope link
         valid_lft forever preferred_lft forever
  6: bond0.401@bond0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue 
state UP group default
      link/ether a0:36:9f:2d:93:81 brd ff:ff:ff:ff:ff:ff
      inet 10.184.7.120/20 brd 10.184.15.255 scope global bond0.401
         valid_lft forever preferred_lft forever
      inet6 fe80::a236:9fff:fe2d:9381/64 scope link
         valid_lft forever preferred_lft forever
  
  however cloud-init shows:
  May 12 14:33:28 xnox-iad-nr5 cloud-init[1163]: ci-info: 
++++++++++++++++++++++++++++++++++++++++Net device 
info++++++++++++++++++++++++++++++++++++++++
  May 12 14:33:28 xnox-iad-nr5 cloud-init[1163]: ci-info: 
+-----------+------+------------------------------+---------------+-------+-------------------+
  May 12 14:33:28 xnox-iad-nr5 cloud-init[1163]: ci-info: |   Device  |  Up  |  
         Address            |      Mask     | Scope |     Hw-Address    |
  May 12 14:33:28 xnox-iad-nr5 cloud-init[1163]: ci-info: 
+-----------+------+------------------------------+---------------+-------+-------------------+
  May 12 14:33:28 xnox-iad-nr5 cloud-init[1163]: ci-info: |   bond0   | True |  
            .               |       .       |   .   | a0:36:9f:2d:93:81 |
  May 12 14:33:28 xnox-iad-nr5 cloud-init[1163]: ci-info: |   bond0   | True | 
fe80::a236:9fff:fe2d:9381/64 |       .       |  link | a0:36:9f:2d:93:81 |
  May 12 14:33:28 xnox-iad-nr5 cloud-init[1163]: ci-info: | bond0.101 | True |  
      104.130.20.119        | 255.255.255.0 |   .   | a0:36:9f:2d:93:81 |
  May 12 14:33:28 xnox-iad-nr5 cloud-init[1163]: ci-info: | bond0.101 | True | 
fe80::a236:9fff:fe2d:9381/64 |       .       |  link | a0:36:9f:2d:93:81 |
  May 12 14:33:28 xnox-iad-nr5 cloud-init[1163]: ci-info: |     lo    | True |  
        127.0.0.1           |   255.0.0.0   |   .   |         .         |
  May 12 14:33:28 xnox-iad-nr5 cloud-init[1163]: ci-info: |     lo    | True |  
         ::1/128            |       .       |  host |         .         |
  May 12 14:33:28 xnox-iad-nr5 cloud-init[1163]: ci-info: | bond0.401 | True |  
       10.184.7.120         | 255.255.240.0 |   .   | a0:36:9f:2d:93:81 |
  May 12 14:33:28 xnox-iad-nr5 cloud-init[1163]: ci-info: | bond0.401 | True | 
fe80::a236:9fff:fe2d:9381/64 |       .       |  link | a0:36:9f:2d:93:81 |
  May 12 14:33:28 xnox-iad-nr5 cloud-init[1163]: ci-info: |   ens9f1  | True |  
            .               |       .       |   .   | a0:36:9f:2d:93:81 |
  May 12 14:33:28 xnox-iad-nr5 cloud-init[1163]: ci-info: |   ens9f0  | True |  
            .               |       .       |   .   | a0:36:9f:2d:93:81 |
  May 12 14:33:28 xnox-iad-nr5 cloud-init[1163]: ci-info: 
+-----------+------+------------------------------+---------------+-------+-------------------+
  
  Specifically
    bond0   | True | fe80::a236:9fff:fe2d:9381/64 |       .       |  link | 
a0:36:9f:2d:93:81
  bond0.101 | True |        104.130.20.119        | 255.255.255.0 |   .   | 
a0:36:9f:2d:93:81
  
  Instead of expected a0:36:9f:2d:93:80
  
  The generated netplan.yaml does not set macaddress on the vlans at all.
  
  Where as the network_data.json does explicitely specifies the mac
  address to be in use for those vlans:
  
  "vlan_mac_address" : "a0:36:9f:2d:93:80"

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1690388

Title:
  wrong hwaddr on the vlan bond with nplan and cloud-init

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

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to