diff options
Diffstat (limited to 'cloudinit/distros')
| -rwxr-xr-x | cloudinit/distros/__init__.py | 14 | ||||
| -rw-r--r-- | cloudinit/distros/freebsd.py | 10 | ||||
| -rw-r--r-- | cloudinit/distros/opensuse.py | 24 | ||||
| -rw-r--r-- | cloudinit/distros/ubuntu.py | 19 | 
4 files changed, 61 insertions, 6 deletions
| diff --git a/cloudinit/distros/__init__.py b/cloudinit/distros/__init__.py index 55260eae..ab0b0776 100755 --- a/cloudinit/distros/__init__.py +++ b/cloudinit/distros/__init__.py @@ -49,6 +49,9 @@ LOG = logging.getLogger(__name__)  # It could break when Amazon adds new regions and new AZs.  _EC2_AZ_RE = re.compile('^[a-z][a-z]-(?:[a-z]+-)+[0-9][a-z]$') +# Default NTP Client Configurations +PREFERRED_NTP_CLIENTS = ['chrony', 'systemd-timesyncd', 'ntp', 'ntpdate'] +  @six.add_metaclass(abc.ABCMeta)  class Distro(object): @@ -60,6 +63,7 @@ class Distro(object):      tz_zone_dir = "/usr/share/zoneinfo"      init_cmd = ['service']  # systemctl, service etc      renderer_configs = {} +    _preferred_ntp_clients = None      def __init__(self, name, cfg, paths):          self._paths = paths @@ -339,6 +343,14 @@ class Distro(object):              contents.write("%s\n" % (eh))              util.write_file(self.hosts_fn, contents.getvalue(), mode=0o644) +    @property +    def preferred_ntp_clients(self): +        """Allow distro to determine the preferred ntp client list""" +        if not self._preferred_ntp_clients: +            self._preferred_ntp_clients = list(PREFERRED_NTP_CLIENTS) + +        return self._preferred_ntp_clients +      def _bring_up_interface(self, device_name):          cmd = ['ifup', device_name]          LOG.debug("Attempting to run bring up interface %s using command %s", @@ -519,7 +531,7 @@ class Distro(object):              self.lock_passwd(name)          # Configure sudo access -        if 'sudo' in kwargs: +        if 'sudo' in kwargs and kwargs['sudo'] is not False:              self.write_sudo_rules(name, kwargs['sudo'])          # Import SSH keys diff --git a/cloudinit/distros/freebsd.py b/cloudinit/distros/freebsd.py index 754d3df6..ff22d568 100644 --- a/cloudinit/distros/freebsd.py +++ b/cloudinit/distros/freebsd.py @@ -110,15 +110,15 @@ class Distro(distros.Distro):          if dev.startswith('lo'):              return dev -        n = re.search('\d+$', dev) +        n = re.search(r'\d+$', dev)          index = n.group(0) -        (out, err) = util.subp(['ifconfig', '-a']) +        (out, _err) = util.subp(['ifconfig', '-a'])          ifconfigoutput = [x for x in (out.strip()).splitlines()                            if len(x.split()) > 0]          bsddev = 'NOT_FOUND'          for line in ifconfigoutput: -            m = re.match('^\w+', line) +            m = re.match(r'^\w+', line)              if m:                  if m.group(0).startswith('lo'):                      continue @@ -128,7 +128,7 @@ class Distro(distros.Distro):                  break          # Replace the index with the one we're after. -        bsddev = re.sub('\d+$', index, bsddev) +        bsddev = re.sub(r'\d+$', index, bsddev)          LOG.debug("Using network interface %s", bsddev)          return bsddev @@ -266,7 +266,7 @@ class Distro(distros.Distro):              self.lock_passwd(name)          # Configure sudo access -        if 'sudo' in kwargs: +        if 'sudo' in kwargs and kwargs['sudo'] is not False:              self.write_sudo_rules(name, kwargs['sudo'])          # Import SSH keys diff --git a/cloudinit/distros/opensuse.py b/cloudinit/distros/opensuse.py index 162dfa05..9f90e95e 100644 --- a/cloudinit/distros/opensuse.py +++ b/cloudinit/distros/opensuse.py @@ -208,4 +208,28 @@ class Distro(distros.Distro):                                              nameservers, searchservers)          return dev_names +    @property +    def preferred_ntp_clients(self): +        """The preferred ntp client is dependent on the version.""" + +        """Allow distro to determine the preferred ntp client list""" +        if not self._preferred_ntp_clients: +            distro_info = util.system_info()['dist'] +            name = distro_info[0] +            major_ver = int(distro_info[1].split('.')[0]) + +            # This is horribly complicated because of a case of +            # "we do not care if versions should be increasing syndrome" +            if ( +                (major_ver >= 15 and 'openSUSE' not in name) or +                (major_ver >= 15 and 'openSUSE' in name and major_ver != 42) +            ): +                self._preferred_ntp_clients = ['chrony', +                                               'systemd-timesyncd', 'ntp'] +            else: +                self._preferred_ntp_clients = ['ntp', +                                               'systemd-timesyncd', 'chrony'] + +        return self._preferred_ntp_clients +  # vi: ts=4 expandtab diff --git a/cloudinit/distros/ubuntu.py b/cloudinit/distros/ubuntu.py index 82ca34f5..68154104 100644 --- a/cloudinit/distros/ubuntu.py +++ b/cloudinit/distros/ubuntu.py @@ -10,12 +10,31 @@  # This file is part of cloud-init. See LICENSE file for license information.  from cloudinit.distros import debian +from cloudinit.distros import PREFERRED_NTP_CLIENTS  from cloudinit import log as logging +from cloudinit import util + +import copy  LOG = logging.getLogger(__name__)  class Distro(debian.Distro): + +    @property +    def preferred_ntp_clients(self): +        """The preferred ntp client is dependent on the version.""" +        if not self._preferred_ntp_clients: +            (_name, _version, codename) = util.system_info()['dist'] +            # Xenial cloud-init only installed ntp, UbuntuCore has timesyncd. +            if codename == "xenial" and not util.system_is_snappy(): +                self._preferred_ntp_clients = ['ntp'] +            else: +                self._preferred_ntp_clients = ( +                    copy.deepcopy(PREFERRED_NTP_CLIENTS)) +        return self._preferred_ntp_clients +      pass +  # vi: ts=4 expandtab | 
