From c7c6ac0aa83192ffc267c27878712652dade35d1 Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Tue, 13 Nov 2012 13:47:30 -0800 Subject: Only attempt to read the previous hostname file if it exists. Instead of always reading the previous hostname file even if it did not exist lets only read it if it is a valid variable and is actually a existent file instead of just attempting to read it always. LP: #1078452 --- cloudinit/distros/__init__.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'cloudinit') diff --git a/cloudinit/distros/__init__.py b/cloudinit/distros/__init__.py index 10e07e82..ea0bac23 100644 --- a/cloudinit/distros/__init__.py +++ b/cloudinit/distros/__init__.py @@ -146,17 +146,37 @@ class Distro(object): def update_hostname(self, hostname, fqdn, prev_hostname_fn): applying_hostname = hostname + + # Determine what the actual written hostname should be hostname = self._select_hostname(hostname, fqdn) - prev_hostname = self._read_hostname(prev_hostname_fn) + + # If the previous hostname file exists lets see if we + # can get a hostname from it + if prev_hostname_fn and os.path.exists(prev_hostname_fn): + prev_hostname = self._read_hostname(prev_hostname_fn) + else: + prev_hostname = None + + # Lets get where we should write the system hostname + # and what the system hostname is (sys_fn, sys_hostname) = self._read_system_hostname() update_files = [] + + # If there is no previous hostname or it differs + # from what we want, lets update it or create the + # file in the first place if not prev_hostname or prev_hostname != hostname: update_files.append(prev_hostname_fn) + # If the system hostname is different than the previous + # one or the desired one lets update it as well if (not sys_hostname) or (sys_hostname == prev_hostname and sys_hostname != hostname): update_files.append(sys_fn) + # Remove duplicates (incase the previous config filename) + # is the same as the system config filename, don't bother + # doing it twice update_files = set([f for f in update_files if f]) LOG.debug("Attempting to update hostname to %s in %s files", hostname, len(update_files)) @@ -173,6 +193,8 @@ class Distro(object): LOG.debug("%s differs from %s, assuming user maintained hostname.", prev_hostname_fn, sys_fn) + # If the system hostname file name was provided set the + # non-fqdn as the transient hostname. if sys_fn in update_files: self._apply_hostname(applying_hostname) -- cgit v1.2.3 From e91fbc058cdd709a561863202231076788323782 Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Tue, 13 Nov 2012 15:24:53 -0800 Subject: Update how errors are handled when writing and reading hostnames. --- cloudinit/distros/debian.py | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) (limited to 'cloudinit') diff --git a/cloudinit/distros/debian.py b/cloudinit/distros/debian.py index b6e7654f..7422f4f0 100644 --- a/cloudinit/distros/debian.py +++ b/cloudinit/distros/debian.py @@ -88,37 +88,37 @@ class Distro(distros.Distro): return hostname def _write_hostname(self, your_hostname, out_fn): - conf = self._read_hostname_conf(out_fn) + conf = None + try: + # Try to update the previous one + # so lets see if we can read it first. + conf = self._read_hostname_conf(out_fn) + except IOError: + pass if not conf: conf = HostnameConf('') - conf.parse() conf.set_hostname(your_hostname) util.write_file(out_fn, str(conf), 0644) def _read_system_hostname(self): - conf = self._read_hostname_conf(self.hostname_conf_fn) - if conf: - sys_hostname = conf.hostname - else: - sys_hostname = None + sys_hostname = self._read_hostname(self.hostname_conf_fn) return (self.hostname_conf_fn, sys_hostname) def _read_hostname_conf(self, filename): - try: - conf = HostnameConf(util.load_file(filename)) - conf.parse() - return conf - except IOError: - util.logexc(LOG, "Error reading hostname from %s", filename) - return None + conf = HostnameConf(util.load_file(filename)) + conf.parse() + return conf def _read_hostname(self, filename, default=None): - conf = self._read_hostname_conf(filename) - if not conf: - return default - if not conf.hostname: + hostname = None + try: + conf = self._read_hostname_conf(filename) + hostname = conf.hostname + except IOError: + pass + if not hostname: return default - return conf.hostname + return hostname def _get_localhost_ip(self): # Note: http://www.leonardoborda.com/blog/127-0-1-1-ubuntu-debian/ -- cgit v1.2.3