cloud-init-dev team mailing list archive
-
cloud-init-dev team
-
Mailing list archive
-
Message #00318
[Merge] lp:~vlastimil-holer/cloud-init/net-reconfigure into lp:cloud-init
Scott Moser has proposed merging lp:~vlastimil-holer/cloud-init/net-reconfigure into lp:cloud-init.
Requested reviews:
cloud init development team (cloud-init-dev)
For more details, see:
https://code.launchpad.net/~vlastimil-holer/cloud-init/net-reconfigure/+merge/186352
--
https://code.launchpad.net/~vlastimil-holer/cloud-init/net-reconfigure/+merge/186352
Your team cloud init development team is requested to review the proposed merge of lp:~vlastimil-holer/cloud-init/net-reconfigure into lp:cloud-init.
=== modified file 'cloudinit/distros/__init__.py'
--- cloudinit/distros/__init__.py 2013-09-11 12:30:35 +0000
+++ cloudinit/distros/__init__.py 2013-09-18 14:56:08 +0000
@@ -63,7 +63,7 @@
raise NotImplementedError()
@abc.abstractmethod
- def _write_network(self, settings):
+ def _write_network(self, settings, pretend=False):
# In the future use the http://fedorahosted.org/netcf/
# to write this blob out in a distro format
raise NotImplementedError()
@@ -112,6 +112,12 @@
mirror_info=arch_info)
def apply_network(self, settings, bring_up=True):
+ # List newly configured devices and put them
+ # down before new configuration is written to disk,
+ if bring_up:
+ dev_names = self._write_network(settings, pretend=True)
+ self._bring_down_interfaces(dev_names)
+
# Write it out
dev_names = self._write_network(settings)
# Now try to bring them up
@@ -266,9 +272,9 @@
contents.write("%s\n" % (eh))
util.write_file(self.hosts_fn, contents.getvalue(), mode=0644)
- def _bring_up_interface(self, device_name):
- cmd = ['ifup', device_name]
- LOG.debug("Attempting to run bring up interface %s using command %s",
+ def _bring_interface(self, device_name, command):
+ cmd = [command, device_name]
+ LOG.debug("Attempting to manage interface %s using command %s",
device_name, cmd)
try:
(_out, err) = util.subp(cmd)
@@ -279,15 +285,27 @@
util.logexc(LOG, "Running interface command %s failed", cmd)
return False
- def _bring_up_interfaces(self, device_names):
+ def _bring_up_interface(self, device_name):
+ return self._bring_interface(device_name, command='ifup')
+
+ def _bring_down_interface(self, device_name):
+ return self._bring_interface(device_name, command='ifdown')
+
+ def _bring_interfaces(self, device_names, cb):
am_failed = 0
for d in device_names:
- if not self._bring_up_interface(d):
+ if not cb(d):
am_failed += 1
if am_failed == 0:
return True
return False
+ def _bring_up_interfaces(self, device_names):
+ return self._bring_interfaces(device_names, self._bring_up_interface)
+
+ def _bring_down_interfaces(self, device_names):
+ return self._bring_interfaces(device_names, self._bring_down_interface)
+
def get_default_user(self):
return self.get_option('default_user')
=== modified file 'cloudinit/distros/debian.py'
--- cloudinit/distros/debian.py 2013-09-04 06:51:51 +0000
+++ cloudinit/distros/debian.py 2013-09-18 14:56:08 +0000
@@ -70,19 +70,28 @@
self.update_package_sources()
self.package_command('install', pkgs=pkglist)
- def _write_network(self, settings):
- util.write_file(self.network_conf_fn, settings)
+ def _write_network(self, settings, pretend=False):
+ if not pretend:
+ util.write_file(self.network_conf_fn, settings)
return ['all']
- def _bring_up_interfaces(self, device_names):
+ def _bring_interfaces(self, device_names, cb):
use_all = False
for d in device_names:
if d == 'all':
use_all = True
if use_all:
- return distros.Distro._bring_up_interface(self, '--all')
+ return cb(self, '--all')
else:
- return distros.Distro._bring_up_interfaces(self, device_names)
+ return cb(self, device_names)
+
+ def _bring_up_interfaces(self, device_names):
+ return self._bring_interfaces(device_names,
+ distros.Distro._bring_up_interface)
+
+ def _bring_down_interfaces(self, device_names):
+ return self._bring_interfaces(device_names,
+ distros.Distro._bring_down_interface)
def _select_hostname(self, hostname, fqdn):
# Prefer the short hostname over the long
=== modified file 'cloudinit/distros/rhel.py'
--- cloudinit/distros/rhel.py 2013-09-04 06:51:51 +0000
+++ cloudinit/distros/rhel.py 2013-09-18 14:56:08 +0000
@@ -61,7 +61,7 @@
def install_packages(self, pkglist):
self.package_command('install', pkgs=pkglist)
- def _write_network(self, settings):
+ def _write_network(self, settings, pretend=False):
# TODO(harlowja) fix this... since this is the ubuntu format
entries = rhel_util.translate_network(settings)
LOG.debug("Translated ubuntu style network settings %s into %s",
@@ -82,15 +82,16 @@
'MACADDR': info.get('hwaddress'),
'ONBOOT': _make_sysconfig_bool(info.get('auto')),
}
- rhel_util.update_sysconfig_file(net_fn, net_cfg)
+ if not pretend:
+ rhel_util.update_sysconfig_file(net_fn, net_cfg)
if 'dns-nameservers' in info:
nameservers.extend(info['dns-nameservers'])
if 'dns-search' in info:
searchservers.extend(info['dns-search'])
- if nameservers or searchservers:
+ if (nameservers or searchservers) and not pretend:
rhel_util.update_resolve_conf_file(self.resolve_conf_fn,
nameservers, searchservers)
- if dev_names:
+ if dev_names and not pretend:
net_cfg = {
'NETWORKING': _make_sysconfig_bool(True),
}
@@ -154,11 +155,19 @@
else:
return default
- def _bring_up_interfaces(self, device_names):
+ def _bring_interfaces(self, device_names, cb):
if device_names and 'all' in device_names:
raise RuntimeError(('Distro %s can not translate '
'the device name "all"') % (self.name))
- return distros.Distro._bring_up_interfaces(self, device_names)
+ return cb(self, device_names)
+
+ def _bring_up_interfaces(self, device_names):
+ return self._bring_interfaces(device_names,
+ distros.Distro._bring_up_interfaces)
+
+ def _bring_down_interfaces(self, device_names):
+ return self._bring_interfaces(device_names,
+ distros.Distro._bring_down_interfaces)
def set_timezone(self, tz):
tz_file = self._find_tz_file(tz)
=== modified file 'cloudinit/distros/sles.py'
--- cloudinit/distros/sles.py 2013-08-06 10:36:30 +0000
+++ cloudinit/distros/sles.py 2013-09-18 14:56:08 +0000
@@ -52,7 +52,7 @@
def install_packages(self, pkglist):
self.package_command('install', args='-l', pkgs=pkglist)
- def _write_network(self, settings):
+ def _write_network(self, settings, pretend=False):
# Convert debian settings to ifcfg format
entries = rhel_util.translate_network(settings)
LOG.debug("Translated ubuntu style network settings %s into %s",
@@ -83,12 +83,13 @@
net_cfg['ETHTOOL_OPTIONS'] = ''
else:
net_cfg['FIREWALL'] = 'no'
- rhel_util.update_sysconfig_file(net_fn, net_cfg, True)
+ if not pretend:
+ rhel_util.update_sysconfig_file(net_fn, net_cfg, True)
if 'dns-nameservers' in info:
nameservers.extend(info['dns-nameservers'])
if 'dns-search' in info:
searchservers.extend(info['dns-search'])
- if nameservers or searchservers:
+ if (nameservers or searchservers) and not pretend:
rhel_util.update_resolve_conf_file(self.resolve_conf_fn,
nameservers, searchservers)
return dev_names
@@ -141,11 +142,19 @@
return default
return hostname
- def _bring_up_interfaces(self, device_names):
+ def _bring_interfaces(self, device_names, cb):
if device_names and 'all' in device_names:
raise RuntimeError(('Distro %s can not translate '
'the device name "all"') % (self.name))
- return distros.Distro._bring_up_interfaces(self, device_names)
+ return cb(self, device_names)
+
+ def _bring_up_interfaces(self, device_names):
+ return self._bring_interfaces(device_names,
+ distros.Distro._bring_up_interfaces)
+
+ def _bring_down_interfaces(self, device_names):
+ return self._bring_interfaces(device_names,
+ distros.Distro._bring_down_interfaces)
def set_timezone(self, tz):
tz_file = self._find_tz_file(tz)
Follow ups