Merge branch 'newtype/networktime' into 'master'

Add __networktime type.

See merge request ungleich-public/cdist-contrib!42
This commit is contained in:
fnux 2021-07-06 15:47:15 +02:00
commit 080197e60c
4 changed files with 125 additions and 0 deletions

View file

@ -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 <joachim.desroches@epfl.ch>
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.

74
type/__networktime/manifest Executable file
View file

@ -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 <http://www.gnu.org/licenses/>.
#
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

View file

@ -0,0 +1 @@
peer

View file