[IBP] move udev rules manipulating out of cloud-init

We need to create udev rules prior the first boot. It's significally
easier to inject files and less magic required.

Change-Id: Iaa4dddad0efe5ac41f6b1284a8c4aa85066e39a9
Closes-Bug: #1420885
This commit is contained in:
Alexander Gordeev 2015-02-13 13:47:22 +03:00
parent 1c012b4dc7
commit 05f9614d16
3 changed files with 20 additions and 17 deletions

View File

@ -33,15 +33,6 @@ fi
cloud-init-per instance set_gateway /bin/sh -c 'echo GATEWAY="{{ common.master_ip }}" | tee -a /etc/sysconfig/network'
#Add static udev rules
cloud-init-per instance udev_persistent_net_disable_generator /bin/sh -c 'echo | tee /etc/udev/rules.d/75-persistent-net-generator.rules'
cloud-init-per instance udev_persistent_net2 /bin/sh -c 'echo {{ common.udevrules }} | tr " " "\n" | tr "[:upper:]" "[:lower:]" | sed -e "s/udevrules=//g" -e "s/,/\n/g" | sed -e "s/^/SUBSYSTEM==\"net\",\ ACTION==\"add\",\ DRIVERS==\"?*\",\ ATTR{address}==\"/g" -e "s/_/\",\ ATTR{type}==\"1\",\ KERNEL==\"eth*\",\ NAME=\"/g" -e "s/$/\"/g" | tee /etc/udev/rules.d/70-persistent-net.rules'
cloud-init-per instance udev_persistent_net3 udevadm control --reload-rules
#NOTE(agordeev): udevadm trigger will rename NIC only if network service is stopped.
cloud-init-per instance udev_persistent_net4 udevadm trigger --attr-match=subsystem=net
#NOTE(agordeev): udev is so asynchronous. Always use settle.
cloud-init-per instance udev_persistent_net_settle udevadm settle --quiet
cloud-init-per instance udev_persistent_net5 service network start
# end of udev

View File

@ -29,15 +29,7 @@ fi
if [ ! -e "/etc/network/interfaces.d/ifcfg-$ADMIN_IF" ]; then
echo -e "auto $ADMIN_IF\niface $ADMIN_IF inet static\n\taddress {{ common.admin_ip }}\n\tnetmask {{ common.admin_mask }}" > /etc/network/interfaces.d/ifcfg-"$ADMIN_IF"
fi
#Add static udev rules
cloud-init-per instance udev_persistent_net_disable_generator /bin/sh -c 'echo | tee /etc/udev/rules.d/75-persistent-net-generator.rules'
cloud-init-per instance udev_persistent_net2 /bin/sh -c 'echo {{ common.udevrules }} | tr " " "\n" | tr "[:upper:]" "[:lower:]" | sed -e "s/udevrules=//g" -e "s/,/\n/g" | sed -e "s/^/SUBSYSTEM==\"net\",\ ACTION==\"add\",\ DRIVERS==\"?*\",\ ATTR{address}==\"/g" -e "s/_/\",\ ATTR{type}==\"1\",\ KERNEL==\"eth*\",\ NAME=\"/g" -e "s/$/\"/g" | tee /etc/udev/rules.d/70-persistent-net.rules'
cloud-init-per instance udev_persistent_net3 udevadm control --reload-rules
#NOTE(agordeev): udevadm trigger will rename NIC only if network service is stopped.
cloud-init-per instance udev_persistent_net4 udevadm trigger --attr-match=subsystem=net
#NOTE(agordeev): udev is so asynchronous. Always use settle.
cloud-init-per instance udev_persistent_net_settle udevadm settle --quiet
cloud-init-per instance udev_persistent_net5 /etc/init.d/networking start
# end of udev

View File

@ -342,6 +342,26 @@ class Manager(object):
gu.grub2_cfg(kernel_params=kernel_params, chroot=chroot)
gu.grub2_install(install_devices, chroot=chroot)
# FIXME(agordeev) There's no convenient way to perfrom NIC remapping in
# Ubuntu, so injecting files prior the first boot should work
with open(chroot + '/etc/udev/rules.d/70-persistent-net.rules',
'w') as f:
f.write('# Generated by fuel-agent during provisioning: BEGIN\n')
# pattern is aa:bb:cc:dd:ee:ff_eth0,aa:bb:cc:dd:ee:ff_eth1
for mapping in self.configdrive_scheme.common.udevrules.split(','):
mac_addr, nic_name = mapping.split('_')
f.write('SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", '
'ATTR{address}=="%s", ATTR{type}=="1", KERNEL=="eth*",'
' NAME="%s"\n' % (mac_addr, nic_name))
f.write('# Generated by fuel-agent during provisioning: END\n')
# FIXME(agordeev): Disable net-generator that will add new etries to
# 70-persistent-net.rules
with open(chroot +
'/etc/udev/rules.d/75-persistent-net-generator.rules',
'w') as f:
f.write('# Generated by fuel-agent during provisioning:\n'
'# DO NOT DELETE. It is needed to disable net-generator\n')
with open(chroot + '/etc/fstab', 'wb') as f:
for fs in self.partition_scheme.fss:
# TODO(kozhukalov): Think of improving the logic so as to