From 55d832851d5172cdf8266841b95cf27143c8bc7c Mon Sep 17 00:00:00 2001 From: Joachim Desroches Date: Tue, 6 Jul 2021 14:44:07 +0200 Subject: [PATCH] Add __networktime type. --- type/__networktime/man.rst | 50 +++++++++++++ type/__networktime/manifest | 74 +++++++++++++++++++ .../__networktime/parameter/required_multiple | 1 + type/__networktime/singleton | 0 4 files changed, 125 insertions(+) create mode 100644 type/__networktime/man.rst create mode 100755 type/__networktime/manifest create mode 100644 type/__networktime/parameter/required_multiple create mode 100644 type/__networktime/singleton diff --git a/type/__networktime/man.rst b/type/__networktime/man.rst new file mode 100644 index 0000000..41beeb6 --- /dev/null +++ b/type/__networktime/man.rst @@ -0,0 +1,50 @@ +cdist-type__networktime(7) +========================== + +NAME +---- +cdist-type__networktime - Generic time synchronization type + + +DESCRIPTION +----------- + +This type is intended to be a simple abstraction over the various backends and +programs available for network time synchronization. This type only takes a +list of peers to synchronize to as argument, and then chooses an appropriate +backend depending on the operating system, configures, starts and enables it to +start on boot. + +Currently, the following OSes are supported with the following backends: + +- Alpine Linux: builtin busybox NTPd +- Debian/Ubuntu: systemd-timesyncd + + +REQUIRED MULTIPLE PARAMETERS +------------------- +peer: + The name or IP address of a peer to synchronize to. + + +EXAMPLES +-------- + +.. code-block:: sh + + # 2.XXX.ntp.org are IPv6-enabled pools + __networktime --peer 2.ch.pool.ntp.org \ + --peer 2.europe.pool.ntp.org + + +AUTHORS +------- +Joachim Desroches + + +COPYING +------- +Copyright \(C) 2021 Joachim Desroches. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/type/__networktime/manifest b/type/__networktime/manifest new file mode 100755 index 0000000..1febf66 --- /dev/null +++ b/type/__networktime/manifest @@ -0,0 +1,74 @@ +#!/bin/sh -e +# +# 2021 Joachim Desroches (joachim.desroches@epfl.ch) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . +# + +os=$(cat "${__global:?}/explorer/os") + +case "$os" in +'alpine') + backend=busybox-openrc + ;; +'debian' | 'ubuntu') + backend=systemd-timesyncd + ;; +*) + printf "__networktime is not yet implemented for %s.\n" "$os" >&2 + printf "Please contribute an implementation for it if you can.\n" >&2 + exit 1 + ;; +esac + +case "$backend" in +'busybox-openrc') + argstring="-N" + while read -r peer; + do + argstring="$argstring -p $peer" + done < "${__object:?}/parameter/peer" + + __start_on_boot ntpd + + __file /etc/conf.d/ntpd \ + --mode 0644 --onchange "service ntpd restart"\ + --source - <<- EOF + # NTPd OpenRC configuration file. Managed by cdist. + NTPD_OPTS="$argstring" + EOF + ;; + +'systemd-timesyncd') + peers="$(tr '\n' ' ' < "${__object:?}/parameter/peer")" + + __package ntp --state absent + require="__package/ntp" __systemd_unit systemd-timesyncd \ + --enablement-state enabled --restart + + __file /etc/systemd/timesyncd.conf \ + --mode 0644 --onchange "systemctl restart systemd-timesyncd" \ + --source - <<- EOF + # timesyncd(8) configuration file. Managed by cdist. + [Time] + NTP=$peers + EOF + ;; +*) + printf "Unkown backend in __networktime. This is a bug.\n" >&2 + exit 1 + ;; +esac diff --git a/type/__networktime/parameter/required_multiple b/type/__networktime/parameter/required_multiple new file mode 100644 index 0000000..c9f6d41 --- /dev/null +++ b/type/__networktime/parameter/required_multiple @@ -0,0 +1 @@ +peer diff --git a/type/__networktime/singleton b/type/__networktime/singleton new file mode 100644 index 0000000..e69de29