summaryrefslogtreecommitdiff
path: root/cloudinit/config/cc_ntp.py
diff options
context:
space:
mode:
authorRyan Harper <ryan.harper@canonical.com>2017-05-19 16:49:11 -0400
committerScott Moser <smoser@ubuntu.com>2017-05-19 16:55:08 -0400
commite11d3899d47ec5fcb545e0c7820af9d3995cb574 (patch)
treea36c05438254df94b410ff88fba2c672709b5673 /cloudinit/config/cc_ntp.py
parentafdddf8eea34866b43d1fc92624f9ac175802f36 (diff)
downloadvyos-cloud-init-e11d3899d47ec5fcb545e0c7820af9d3995cb574.tar.gz
vyos-cloud-init-e11d3899d47ec5fcb545e0c7820af9d3995cb574.zip
cc_ntp: write template before installing and add service restart
On systems which installed ntp and specified servers or pools in the config ntpd didn't notice the updated configuration file and didn't use the correct configuration. Resolve this by rendering the template first which allows the package install to use the existing configuration. Additionally add a service restart to handle the case where ntp does not need to be installed but it may not have started. Add an integration test to confirm that cc_ntp enables ntp to use the specific servers and pools in the cloud-config. LP: #1645644
Diffstat (limited to 'cloudinit/config/cc_ntp.py')
-rw-r--r--cloudinit/config/cc_ntp.py24
1 files changed, 22 insertions, 2 deletions
diff --git a/cloudinit/config/cc_ntp.py b/cloudinit/config/cc_ntp.py
index e33032fd..225f898a 100644
--- a/cloudinit/config/cc_ntp.py
+++ b/cloudinit/config/cc_ntp.py
@@ -74,10 +74,19 @@ def handle(name, cfg, cloud, log, _args):
"not present or disabled by cfg", name)
return True
- install_ntp(cloud.distro.install_packages, packages=['ntp'],
- check_exe="ntpd")
rename_ntp_conf()
+ # ensure when ntp is installed it has a configuration file
+ # to use instead of starting up with packaged defaults
write_ntp_config_template(ntp_cfg, cloud)
+ install_ntp(cloud.distro.install_packages, packages=['ntp'],
+ check_exe="ntpd")
+
+ # if ntp was already installed, it may not have started
+ try:
+ reload_ntp(systemd=cloud.distro.uses_systemd())
+ except util.ProcessExecutionError as e:
+ LOG.exception("Failed to reload/start ntp service: %s", e)
+ raise
def install_ntp(install_func, packages=None, check_exe="ntpd"):
@@ -90,6 +99,7 @@ def install_ntp(install_func, packages=None, check_exe="ntpd"):
def rename_ntp_conf(config=NTP_CONF):
+ """Rename any existing ntp.conf file and render from template"""
if os.path.exists(config):
util.rename(config, config + ".dist")
@@ -125,4 +135,14 @@ def write_ntp_config_template(cfg, cloud):
templater.render_to_file(template_fn, NTP_CONF, params)
+
+def reload_ntp(systemd=False):
+ service = 'ntp'
+ if systemd:
+ cmd = ['systemctl', 'reload-or-restart', service]
+ else:
+ cmd = ['service', service, 'restart']
+ util.subp(cmd, capture=True)
+
+
# vi: ts=4 expandtab