diff --git a/cdist/conf/explorer/hostname b/cdist/conf/explorer/hostname
index 7715c6b0..dca004d1 100755
--- a/cdist/conf/explorer/hostname
+++ b/cdist/conf/explorer/hostname
@@ -1,7 +1,6 @@
#!/bin/sh
#
-# 2010-2014 Nico Schottelius (nico-cdist at schottelius.org)
-# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
+# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@@ -19,7 +18,12 @@
# along with cdist. If not, see .
#
#
+# Retrieve the running hostname
+#
-if command -v uname >/dev/null; then
- uname -n
+if command -v hostname >/dev/null
+then
+ hostname
+else
+ uname -n
fi
diff --git a/cdist/conf/type/__apt_key/gencode-remote b/cdist/conf/type/__apt_key/gencode-remote
index e9daa524..0c96ff67 100755
--- a/cdist/conf/type/__apt_key/gencode-remote
+++ b/cdist/conf/type/__apt_key/gencode-remote
@@ -61,31 +61,29 @@ EOF
echo "curl -s -L '$uri' | apt-key add -"
fi
elif [ -d "$keydir" ]; then
- tmp='/tmp/cdist_apt_key_tmp'
-
# we need to kill gpg after 30 seconds, because gpg
# can get stuck if keyserver is not responding.
# exporting env var and not exit 1,
# because we need to clean up and kill dirmngr.
cat << EOF
-mkdir -m 700 -p "$tmp"
+gpgtmphome="\$( mktemp -d )"
if timeout 30s \\
- gpg --homedir "$tmp" \\
+ gpg --homedir "\$gpgtmphome" \\
--keyserver "$keyserver" \\
--recv-keys "$keyid"
then
- gpg --homedir "$tmp" \\
+ gpg --homedir "\$gpgtmphome" \\
--export "$keyid" \\
> "$keyfile"
else
export GPG_GOT_STUCK=1
fi
-GNUPGHOME="$tmp" gpgconf --kill dirmngr
+GNUPGHOME="\$gpgtmphome" gpgconf --kill dirmngr
-rm -rf "$tmp"
+rm -rf "\$gpgtmphome"
if [ -n "\$GPG_GOT_STUCK" ]
then
diff --git a/cdist/conf/type/__hostname/explorer/has_hostnamectl b/cdist/conf/type/__hostname/explorer/has_hostnamectl
index 9040023d..2f531f30 100755
--- a/cdist/conf/type/__hostname/explorer/has_hostnamectl
+++ b/cdist/conf/type/__hostname/explorer/has_hostnamectl
@@ -21,4 +21,4 @@
# Check whether system has hostnamectl
#
-command -v hostnamectl || true
+command -v hostnamectl 2>/dev/null || true
diff --git a/cdist/conf/type/__hostname/explorer/hostname_file b/cdist/conf/type/__hostname/explorer/hostname_file
deleted file mode 100755
index 6a00aa9f..00000000
--- a/cdist/conf/type/__hostname/explorer/hostname_file
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/sh
-#
-# 2014 Nico Schottelius (nico-cdist at schottelius.org)
-#
-# 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 .
-#
-#
-# Retrieve the contents of /etc/hostname
-#
-
-# Almost any distribution
-if [ -f /etc/hostname ]; then
- cat /etc/hostname
-# SuSE
-elif [ -f /etc/HOSTNAME ]; then
- cat /etc/HOSTNAME
-fi
diff --git a/cdist/conf/type/__hostname/explorer/max_len b/cdist/conf/type/__hostname/explorer/max_len
new file mode 100644
index 00000000..fb863949
--- /dev/null
+++ b/cdist/conf/type/__hostname/explorer/max_len
@@ -0,0 +1,10 @@
+#!/bin/sh -e
+
+command -v getconf >/dev/null || exit 0
+
+val=$(getconf HOST_NAME_MAX 2>/dev/null) || exit 0
+
+if test -n "${val}" -a "${val}" != 'undefined'
+then
+ echo "${val}"
+fi
diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote
index 8b5797dd..ae224611 100755
--- a/cdist/conf/type/__hostname/gencode-remote
+++ b/cdist/conf/type/__hostname/gencode-remote
@@ -2,6 +2,7 @@
#
# 2014-2017 Steven Armstrong (steven-cdist at armstrong.cc)
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
+# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@@ -19,60 +20,81 @@
# along with cdist. If not, see .
#
-if [ -f "$__object/parameter/name" ]; then
- name_should="$(cat "$__object/parameter/name")"
-else
- name_should="${__target_host%%.*}"
-fi
-
os=$(cat "$__global/explorer/os")
name_running=$(cat "$__global/explorer/hostname")
-name_config=$(cat "$__object/explorer/hostname_file")
-name_sysconfig=$(cat "$__object/explorer/hostname_sysconfig")
has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl")
+
+if test -s "$__object/parameter/name"
+then
+ name_should=$(cat "$__object/parameter/name")
+else
+ case $os
+ in
+ # RedHat-derivatives and BSDs
+ centos|fedora|redhat|scientific|freebsd|macosx|netbsd|openbsd)
+ # Hostname is FQDN
+ name_should="${__target_host}"
+ ;;
+ *)
+ # Hostname is only first component of FQDN
+ name_should="${__target_host%%.*}"
+ ;;
+ esac
+fi
+
+
################################################################################
-# If everything is ok -> exit
+# Check if the (running) hostname is already correct
#
-case "$os" in
- archlinux|debian|suse|ubuntu|devuan|coreos|alpine)
- if [ "$name_config" = "$name_should" ] && [ "$name_running" = "$name_should" ]; then
- exit 0
- fi
- ;;
- scientific|centos|freebsd|openbsd)
- if [ "$name_sysconfig" = "$name_should" ] && [ "$name_running" = "$name_should" ]; then
- exit 0
- fi
- ;;
- *)
- echo "Unsupported os: $os" >&2
- exit 1
- ;;
-esac
+test "$name_running" != "$name_should" || exit 0
+
################################################################################
# Setup hostname
#
-echo changed >> "$__messages_out"
+echo 'changed' >>"$__messages_out"
-# Use the good old way to set the hostname even on machines running systemd.
-case "$os" in
- archlinux|debian|ubuntu|devuan|centos|coreos|alpine)
- printf "printf '%%s\\\\n' '$name_should' > /etc/hostname\\n"
- echo "hostname -F /etc/hostname"
+# Use the good old way to set the hostname.
+case $os
+in
+ alpine|debian|devuan|ubuntu)
+ echo 'hostname -F /etc/hostname'
;;
- freebsd|openbsd)
+ archlinux)
+ echo 'command -v hostnamectl >/dev/null 2>&1' \
+ "&& hostnamectl set-hostname '$name_should'" \
+ "|| hostname '$name_should'"
+ ;;
+ centos|fedora|redhat|scientific|freebsd|netbsd|openbsd|gentoo|void)
echo "hostname '$name_should'"
;;
- suse)
+ macosx)
+ echo "scutil --set HostName '$name_should'"
+ ;;
+ solaris)
+ echo "uname -S '$name_should'"
+ ;;
+ slackware|suse|opensuse-leap)
+ # We do not read from /etc/HOSTNAME, because the running
+ # hostname is the first component only while the file contains
+ # the FQDN.
echo "hostname '$name_should'"
- printf "printf '%%s\\\\n' '$name_should' > /etc/HOSTNAME\\n"
+ ;;
+ *)
+ # Fall back to set the hostname using hostnamectl, if available.
+ if test -n "$has_hostnamectl"
+ then
+ # Don't use hostnamectl as the primary means to set the hostname for
+ # systemd systems, because it cannot be trusted to work reliably and
+ # exit with non-zero when it fails (e.g. hostname too long,
+ # D-Bus failure, etc.).
+
+ echo "hostnamectl set-hostname \"\$(cat /etc/hostname)\""
+ echo "test \"\$(hostname)\" = \"\$(cat /etc/hostname)\"" \
+ " || hostname -F /etc/hostname"
+ else
+ printf "echo 'Unsupported OS: %s' >&2\nexit 1\n" "$os"
+ fi
;;
esac
-
-if [ "$has_hostnamectl" ]; then
- # Allow hostnamectl set-hostname to fail silently.
- # Who the fuck invented a tool that needs dbus to set the hostname anyway ...
- echo "hostnamectl set-hostname '$name_should' || true"
-fi
diff --git a/cdist/conf/type/__hostname/man.rst b/cdist/conf/type/__hostname/man.rst
index d23a3b8a..72aefbab 100644
--- a/cdist/conf/type/__hostname/man.rst
+++ b/cdist/conf/type/__hostname/man.rst
@@ -8,7 +8,10 @@ cdist-type__hostname - Set the hostname
DESCRIPTION
-----------
-Set's the hostname on various operating systems.
+Sets the hostname on various operating systems.
+
+**Tip:** For advice on choosing a hostname, see
+`RFC 1178 `_.
REQUIRED PARAMETERS
@@ -18,7 +21,7 @@ None.
OPTIONAL PARAMETERS
-------------------
name
- The hostname to set. Defaults to the first segment of __target_host
+ The hostname to set. Defaults to the first segment of __target_host
(${__target_host%%.*})
diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest
index 8f1adf12..75a90027 100755
--- a/cdist/conf/type/__hostname/manifest
+++ b/cdist/conf/type/__hostname/manifest
@@ -2,6 +2,7 @@
#
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
+# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
#
# This file is part of cdist.
#
@@ -19,50 +20,170 @@
# along with cdist. If not, see .
#
+not_supported() {
+ echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
+ echo "Please contribute an implementation for it if you can." >&2
+ exit 1
+}
+
+set_hostname_systemd() {
+ echo "$1" | __file /etc/hostname --source -
+}
+
os=$(cat "$__global/explorer/os")
-if [ -f "$__object/parameter/name" ]; then
- name_should="$(cat "$__object/parameter/name")"
+os_version=$(cat "$__global/explorer/os_version")
+os_major=$(echo "$os_version" | grep -o '^[0-9][0-9]*')
+
+max_len=$(cat "$__object/explorer/max_len")
+has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl")
+
+if test -s "$__object/parameter/name"
+then
+ name_should=$(cat "$__object/parameter/name")
else
- case "$os" in
- openbsd)
- name_should="${__target_host}"
- ;;
- *)
- name_should="${__target_host%%.*}"
- ;;
+ case $os
+ in
+ # RedHat-derivatives and BSDs
+ centos|fedora|redhat|scientific|freebsd|netbsd|openbsd|slackware)
+ # Hostname is FQDN
+ name_should="${__target_host}"
+ ;;
+ suse|opensuse-leap)
+ # Classic SuSE stores the FQDN in /etc/HOSTNAME, while
+ # systemd does not. The running hostname is the first
+ # component in both cases.
+ # In versions before 15.x, the FQDN is stored in /etc/hostname.
+ if test -n "$has_hostnamectl" && test "$os_major" -ge 15 \
+ && test "$os_major" -ne 42
+ then
+ name_should="${__target_host%%.*}"
+ else
+ name_should="${__target_host}"
+ fi
+ ;;
+ *)
+ # Hostname is only first component of FQDN on all other systems.
+ name_should="${__target_host%%.*}"
+ ;;
esac
fi
+if test -n "$max_len" && test "$(printf '%s' "$name_should" | wc -c)" -gt "$max_len"
+then
+ printf "Host name too long. Up to %u characters allowed.\n" "${max_len}" >&2
+ exit 1
+fi
-not_supported() {
- echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
- echo "Please contribute an implementation for it if you can." >&2
- exit 1
-}
+case $os
+in
+ alpine|debian|devuan|ubuntu|void)
+ echo "$name_should" | __file /etc/hostname --source -
+ ;;
+ archlinux)
+ if test -n "$has_hostnamectl"
+ then
+ set_hostname_systemd "$name_should"
+ else
+ echo 'Ancient ArchLinux variants without hostnamectl are not supported.' >&2
+ exit 1
+ # Only for ancient ArchLinux, write to /etc/rc.conf on pre-systemd
+ # versions. There are some versions which use /etc/hostname but not
+ # systemd. It is unclear which ones these are.
-case "$os" in
- archlinux|debian|suse|ubuntu|devuan|coreos|alpine)
+ # __key_value '/etc/rc.conf:HOSTNAME' \
+ # --file /etc/rc.conf \
+ # --delimiter '=' --exact_delimiter \
+ # --key 'HOSTNAME' \
+ # --value "\"$name_should\""
+ fi
+ ;;
+ centos|fedora|redhat|scientific)
+ if test -z "$has_hostnamectl"
+ then
+ # Only write to /etc/sysconfig/network on non-systemd versions.
+ # On systemd-based versions this entry is ignored.
+ __key_value '/etc/sysconfig/network:HOSTNAME' \
+ --file /etc/sysconfig/network \
+ --delimiter '=' --exact_delimiter \
+ --key HOSTNAME \
+ --value "\"$name_should\""
+ else
+ set_hostname_systemd "$name_should"
+ fi
+ ;;
+ gentoo)
+ # Only write to /etc/conf.d/hostname on OpenRC-based installations.
+ # On systemd use hostnamectl(1) in gencode-remote.
+ if test -z "$has_hostnamectl"
+ then
+ __key_value '/etc/conf.d/hostname:hostname' \
+ --file /etc/conf.d/hostname \
+ --delimiter '=' --exact_delimiter \
+ --key 'hostname' \
+ --value "\"$name_should\""
+ else
+ set_hostname_systemd "$name_should"
+ fi
+ ;;
+ freebsd)
+ __key_value '/etc/rc.conf:hostname' \
+ --file /etc/rc.conf \
+ --delimiter '=' --exact_delimiter \
+ --key 'hostname' \
+ --value "\"$name_should\""
+ ;;
+ macosx)
# handled in gencode-remote
:
;;
- scientific|centos)
- __key_value sysconfig-hostname \
- --file /etc/sysconfig/network \
- --delimiter '=' \
- --key HOSTNAME \
- --value "$name_should" --exact_delimiter
- ;;
- freebsd)
- __key_value rcconf-hostname \
+ netbsd)
+ __key_value '/etc/rc.conf:hostname' \
--file /etc/rc.conf \
- --delimiter '=' \
+ --delimiter '=' --exact_delimiter \
--key 'hostname' \
- --value "$name_should"
+ --value "\"$name_should\""
+
+ # To avoid confusion, ensure that the hostname is only stored once.
+ __file /etc/myname --state absent
;;
openbsd)
echo "$name_should" | __file /etc/myname --source -
;;
+ slackware)
+ # We write the FQDN into /etc/HOSTNAME. But /etc/rc.d/rc.M will only
+ # read the first component from this file and set it as the running
+ # hostname on boot.
+ echo "$name_should" | __file /etc/HOSTNAME --source -
+ ;;
+ solaris)
+ echo "$name_should" | __file /etc/nodename --source -
+ ;;
+ suse|opensuse-leap)
+ # Modern SuSE provides /etc/HOSTNAME as a symlink for
+ # backwards-compatibility. Unfortunately it cannot be used
+ # here as __file does not follow the symlink.
+ # Therefore, we use the presence of the hostnamectl binary as
+ # an indication of which file to use. This unfortunately does
+ # not work correctly on openSUSE 12.x which provides
+ # hostnamectl but not /etc/hostname.
+
+ if test -n "$has_hostnamectl" -a "$os_major" -gt 12
+ then
+ hostname_file='/etc/hostname'
+ else
+ hostname_file='/etc/HOSTNAME'
+ fi
+
+ echo "$name_should" | __file "$hostname_file" --source -
+ ;;
*)
- not_supported
+ # On other operating systems we fall back to systemd's
+ # hostnamectl if available…
+ if test -n "$has_hostnamectl"
+ then
+ set_hostname_systemd "$name_should"
+ else
+ not_supported
+ fi
;;
esac
diff --git a/cdist/conf/type/__hostname/explorer/hostname_sysconfig b/cdist/conf/type/__podman_compose/gencode-remote
old mode 100755
new mode 100644
similarity index 75%
rename from cdist/conf/type/__hostname/explorer/hostname_sysconfig
rename to cdist/conf/type/__podman_compose/gencode-remote
index d0d7b4e7..0f5cf9db
--- a/cdist/conf/type/__hostname/explorer/hostname_sysconfig
+++ b/cdist/conf/type/__podman_compose/gencode-remote
@@ -1,6 +1,6 @@
-#!/bin/sh
+#!/bin/sh -e
#
-# 2014 Nico Schottelius (nico-cdist at schottelius.org)
+# 2019 Daniel Tschada
#
# This file is part of cdist.
#
@@ -17,10 +17,8 @@
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see .
#
-#
-# Retrieve the contents of /etc/hostname
-#
-if [ -f /etc/sysconfig/network ]; then
- awk -F= '/^HOSTNAME=/ { print $2 }' /etc/sysconfig/network
-fi
+install="$(cat "$__object/parameter/install")"
+state="$(cat "$__object/parameter/state")"
+user="$(cat "$__object/parameter/user")"
+version="$(cat "$__object/parameter/version")"
\ No newline at end of file
diff --git a/cdist/conf/type/__podman_compose/man.rst b/cdist/conf/type/__podman_compose/man.rst
new file mode 100644
index 00000000..fa98f443
--- /dev/null
+++ b/cdist/conf/type/__podman_compose/man.rst
@@ -0,0 +1,61 @@
+cdist-type__podman_compose(7)
+=============================
+
+NAME
+----
+cdist-type__podman_compose - install podman-compose
+
+
+DESCRIPTION
+-----------
+Installs podman-compose package.
+State 'absent' will not remove podman binary itself,
+only podman-compose binary will be removed
+
+
+REQUIRED PARAMETERS
+-------------------
+install
+ defaults to 'pip'
+
+
+OPTIONAL PARAMETERS
+-------------------
+state
+ 'present' or 'absent', defaults to 'present'
+user
+ the user who owns the file, defaults to 'root'
+
+
+BOOLEAN PARAMETERS
+------------------
+None.
+
+
+EXAMPLES
+--------
+
+.. code-block:: sh
+
+ # Install podman-compose
+ __podman_compose
+
+ # Install latest version via pip
+ __podman_compose --state present --install pip
+
+ # Install latest version via pip and change user
+ __podman_compose --state present --install pip --user root
+
+ # Remove podman-compose
+ __podman_compose --state absent
+
+
+AUTHORS
+-------
+Daniel Tschada
+
+
+COPYING
+-------
+Copyright \(C) 2019 Daniel Tschada. Free use of this software is
+granted under the terms of the GNU General Public License version 3 or later (GPLv3+).
diff --git a/cdist/conf/type/__podman_compose/manifest b/cdist/conf/type/__podman_compose/manifest
new file mode 100755
index 00000000..2b06068d
--- /dev/null
+++ b/cdist/conf/type/__podman_compose/manifest
@@ -0,0 +1,50 @@
+#!/bin/sh -e
+#
+# 2019 Daniel Tschada
+#
+# 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 .
+#
+
+# shellcheck disable=SC2154
+# shellcheck disable=SC2034
+install="$(cat "$__object/parameter/install")"
+state="$(cat "$__object/parameter/state")"
+user="$(cat "$__object/parameter/user")"
+version="$(cat "$__object/parameter/version")"
+
+# install it with pip
+if [ "${install}" = "pip" ]; then
+
+ if [ "${state}" = "present" ]; then
+ __package_pip podman-compose --state present --pip /usr/local/bin/podman-compose --runas "${user}"
+ elif [ "${state}" = "absent" ]; then
+ __package_pip podman-compose --state absent
+ else
+ if [ "${state}" != "present" ] -a [ "${state}" != "absent" ]; then
+ echo "Unknown state: ${state}" >&2
+ exit 1
+ else
+ echo "Unknown user: ${user}" >&2
+ exit 1
+ fi
+ fi
+
+else
+
+ echo "Unknown user: ${install}" >&2
+ exit 1
+
+fi
\ No newline at end of file
diff --git a/cdist/conf/type/__podman_compose/parameter/default/install b/cdist/conf/type/__podman_compose/parameter/default/install
new file mode 100644
index 00000000..a1b589e3
--- /dev/null
+++ b/cdist/conf/type/__podman_compose/parameter/default/install
@@ -0,0 +1 @@
+pip
diff --git a/cdist/conf/type/__podman_compose/parameter/default/state b/cdist/conf/type/__podman_compose/parameter/default/state
new file mode 100644
index 00000000..e7f6134f
--- /dev/null
+++ b/cdist/conf/type/__podman_compose/parameter/default/state
@@ -0,0 +1 @@
+present
diff --git a/cdist/conf/type/__podman_compose/parameter/default/user b/cdist/conf/type/__podman_compose/parameter/default/user
new file mode 100644
index 00000000..d8649da3
--- /dev/null
+++ b/cdist/conf/type/__podman_compose/parameter/default/user
@@ -0,0 +1 @@
+root
diff --git a/cdist/conf/type/__podman_compose/parameter/optional b/cdist/conf/type/__podman_compose/parameter/optional
new file mode 100644
index 00000000..92913e56
--- /dev/null
+++ b/cdist/conf/type/__podman_compose/parameter/optional
@@ -0,0 +1,4 @@
+install
+state
+user
+version
diff --git a/cdist/conf/type/__podman_compose/parameter/required b/cdist/conf/type/__podman_compose/parameter/required
new file mode 100644
index 00000000..7c32f559
--- /dev/null
+++ b/cdist/conf/type/__podman_compose/parameter/required
@@ -0,0 +1 @@
+install
diff --git a/cdist/conf/type/__podman_compose/singleton b/cdist/conf/type/__podman_compose/singleton
new file mode 100644
index 00000000..e69de29b
diff --git a/cdist/conf/type/__xymon_client/man.rst b/cdist/conf/type/__xymon_client/man.rst
index 6660b0ef..05d085dc 100644
--- a/cdist/conf/type/__xymon_client/man.rst
+++ b/cdist/conf/type/__xymon_client/man.rst
@@ -27,21 +27,30 @@ servers
to. While DNS-names are ok it is discouraged, defaults to 127.0.0.1.
+BOOLEAN PARAMETERS
+------------------
+msgcache
+ Enable xymon `msgcache`. Note: XYMONSERVER has to be `127.0.0.1` for using
+ `msgcache` (see `msgcache (8)` of the xymon documentation for details).
+
EXAMPLES
--------
.. code-block:: sh
- # minmal, report to 127.0.0.1
+ # minimal, report to 127.0.0.1
__xymon_client
# specify server:
__xymon_client --servers "192.168.1.1"
+ # activate `msgcache` for passive client:
+ __xymon_client --msgcache
+
SEE ALSO
--------
-:strong:`cdist__xymon_server`\ (7), :strong:`xymon`\ (7)
+:strong:`cdist__xymon_server`\ (7), :strong:`xymon`\ (7), :strong:`msgcache`\ (8)
AUTHORS
diff --git a/cdist/conf/type/__xymon_client/manifest b/cdist/conf/type/__xymon_client/manifest
index 92ad079e..88293a12 100755
--- a/cdist/conf/type/__xymon_client/manifest
+++ b/cdist/conf/type/__xymon_client/manifest
@@ -34,13 +34,18 @@ esac
__package xymon-client --state "$state"
+if [ -f "$__object/parameter/msgcache" ]; then
+ require="__package/xymon-client" __line /etc/xymon/clientlaunch.cfg \
+ --regex DISABLED --state absent
+fi
+
require="__package/xymon-client" __key_value CLIENTHOSTNAME \
- --file /etc/default/xymon-client \
+ --file /etc/default/xymon-client \
--value "'$__target_hostname'" \
--delimiter '=' \
--state "$state"
require="__package/xymon-client" __key_value XYMONSERVERS \
- --file /etc/default/xymon-client \
+ --file /etc/default/xymon-client \
--value "'$servers'" \
--delimiter '=' \
--state "$state"
diff --git a/cdist/conf/type/__xymon_client/parameter/boolean b/cdist/conf/type/__xymon_client/parameter/boolean
new file mode 100644
index 00000000..0dd7839d
--- /dev/null
+++ b/cdist/conf/type/__xymon_client/parameter/boolean
@@ -0,0 +1 @@
+msgcache
diff --git a/cdist/conf/type/__xymon_config/man.rst b/cdist/conf/type/__xymon_config/man.rst
index 8b427ca0..8adfbe1f 100644
--- a/cdist/conf/type/__xymon_config/man.rst
+++ b/cdist/conf/type/__xymon_config/man.rst
@@ -23,6 +23,21 @@ confdir
deployed.
+OPTIONAL PARAMETERS
+-------------------
+owner
+ passed as-is as `--owner` to `__rsync`
+
+group
+ passed as-is as `--group` to `__rsync`
+
+
+OPTIONAL MULTIPLE PARAMETERS
+----------------------------
+rsync-opts
+ identical to __rsync type, only `--`-options are supported
+
+
REQUIRED FILES
--------------
The directory specified by `confdir` has to contain a valid xymon-configuration
@@ -39,10 +54,16 @@ EXAMPLES
# this will replace /etc/xymon/ on the target host with
# the contents from __xymon_config/files/xymon.example.com/
+ ## the same but set ownership to `xymon:xymon` and exclude
+ ## the `netrc`-file:
+ __xymon_config --confdir=xymon.example.com \
+ --owner xymon --group xymon \
+ --rsync-opts "exclude=netrc"
+
SEE ALSO
--------
-:strong:`cdist__xymon_server`\ (7), :strong:`xymon`\ (7)
+:strong:`cdist__xymon_server`\ (7), :strong:`cdist__rsync`\ (7), :strong:`xymon`\ (7)
AUTHORS
-------
diff --git a/cdist/conf/type/__xymon_config/manifest b/cdist/conf/type/__xymon_config/manifest
index fb1bce54..4a5fb6c9 100644
--- a/cdist/conf/type/__xymon_config/manifest
+++ b/cdist/conf/type/__xymon_config/manifest
@@ -18,7 +18,26 @@
# along with cdist. If not, see .
confdir=$(cat "$__object/parameter/confdir")
+set --
+if [ -f "$__object/parameter/owner" ]; then
+ owner=$(cat "$__object/parameter/owner")
+ set -- "$@" "--owner $owner"
+fi
+if [ -f "$__object/parameter/group" ]; then
+ group=$(cat "$__object/parameter/group")
+ set -- "$@" "--group $group"
+fi
+## pass `--rsync-opts` as-is to `__rsync`:
+if [ -f "$__object/parameter/rsync-opts" ]; then
+ while read -r opts; do
+ # shellcheck disable=SC2089
+ set -- "$@" "--rsync-opts '$opts'"
+ done < "$__object/parameter/rsync-opts"
+fi
+
+# shellcheck disable=SC2068,SC2090
__rsync /etc/xymon/ \
--source "$__type/files/$confdir/" \
- --rsync-opts "delete"
+ --rsync-opts "delete" \
+ $@
diff --git a/cdist/conf/type/__xymon_config/parameter/optional b/cdist/conf/type/__xymon_config/parameter/optional
new file mode 100644
index 00000000..866b4bde
--- /dev/null
+++ b/cdist/conf/type/__xymon_config/parameter/optional
@@ -0,0 +1,2 @@
+owner
+group
diff --git a/cdist/conf/type/__xymon_config/parameter/optional_multiple b/cdist/conf/type/__xymon_config/parameter/optional_multiple
new file mode 100644
index 00000000..fdb7cd88
--- /dev/null
+++ b/cdist/conf/type/__xymon_config/parameter/optional_multiple
@@ -0,0 +1 @@
+rsync-opts
diff --git a/docs/changelog b/docs/changelog
index b0a52eb6..71509004 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -1,6 +1,14 @@
Changelog
---------
+next:
+ * Type __xymon_config: Add parameters for ownership and generic rsync options (Thomas Eckert)
+ * Type __xymon_client: Add msgcache parameter to support passive clients (Thomas Eckert)
+ * Type __apt_key: Use mktemp for unique temporary gpg home (Ander Punnar)
+
+6.1.0: 2019-11-19
+ * Explorer hostname, type __hostname: Support more operating systems, rewrite type and hostname explorer (Dennis Camera)
+
6.0.4: 2019-11-19
* Doc: Fix typos (Kirill Miazine)