diff options
author | Scott Moser <smoser@ubuntu.com> | 2012-11-13 18:41:31 -0500 |
---|---|---|
committer | Scott Moser <smoser@ubuntu.com> | 2012-11-13 18:41:31 -0500 |
commit | 8ae9c57ca05a0f99131a6693c109cbb52c0f0d4d (patch) | |
tree | 6df7295f5eab5740761b598ebfe545a06b88a8f0 /cloudinit | |
parent | e016e7c7837c70f5fce0c3b3d9bd944a8d43f9f0 (diff) | |
parent | e91fbc058cdd709a561863202231076788323782 (diff) | |
download | vyos-cloud-init-8ae9c57ca05a0f99131a6693c109cbb52c0f0d4d.tar.gz vyos-cloud-init-8ae9c57ca05a0f99131a6693c109cbb52c0f0d4d.zip |
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.
- Also update the logging that is done when a previous file does not exist.
LP: #1078452
Diffstat (limited to 'cloudinit')
-rw-r--r-- | cloudinit/distros/__init__.py | 24 | ||||
-rw-r--r-- | cloudinit/distros/debian.py | 38 |
2 files changed, 42 insertions, 20 deletions
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) 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/ |