From 3c9eb7bce769e7a902e437cdb411be9f5179fe27 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Thu, 15 Aug 2019 16:15:47 +0200 Subject: [PATCH 01/75] [__hostname] Support all systemd OSes and prefer hostnamectl --- cdist/conf/type/__hostname/explorer/hostname | 48 ++++++++++++++++++++ cdist/conf/type/__hostname/gencode-remote | 32 +++++++++---- cdist/conf/type/__hostname/manifest | 4 +- 3 files changed, 74 insertions(+), 10 deletions(-) create mode 100644 cdist/conf/type/__hostname/explorer/hostname diff --git a/cdist/conf/type/__hostname/explorer/hostname b/cdist/conf/type/__hostname/explorer/hostname new file mode 100644 index 00000000..aaaa3a30 --- /dev/null +++ b/cdist/conf/type/__hostname/explorer/hostname @@ -0,0 +1,48 @@ +#!/bin/sh +# +# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.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 . +# +# +# Retrieve the running hostname +# + +# Firstly, check hostnamectl if available. +if command -v hostnamectl >/dev/null +then + hostnamectl --static && exit 0 +fi + + +# Almost any distribution +if [ -f /etc/hostname ]; then + cat /etc/hostname +# SuSE +elif [ -f /etc/HOSTNAME ]; then + cat /etc/HOSTNAME +# OpenBSD +elif [ -f /etc/myname ]; then + cat /etc/myname +# FreeBSD +elif [ "$(uname -s)" == FreeBSD ]; then + (. /etc/rc.conf && echo $hostname) +# Mac OS X +elif [ "$(uname -s)" == Darwin -a -f "$(command -v scutil)" ]; then + scutil --get HostName 2>/dev/null || hostname -s +else + command -v hostname && hostname -s +fi diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index 8b5797dd..20de7078 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. # @@ -46,8 +47,9 @@ case "$os" in fi ;; *) - echo "Unsupported os: $os" >&2 - exit 1 + if [ "$name_running" -a "$name_running" = "$name_should" ]; then + exit 0 + fi ;; esac @@ -56,23 +58,35 @@ esac # echo changed >> "$__messages_out" -# Use the good old way to set the hostname even on machines running systemd. + +# First try to set the hostname using hostnamectl, if available. +if [ "$has_hostnamectl" ]; then + # Allow hostnamectl to fail silently. + # Who the fuck invented a tool that needs dbus to set the hostname anyway ... + + cat < /etc/hostname + exit 0 +fi +EOF +fi + +# Use the good old way to set the hostname. Also if hostnamectl fails. case "$os" in archlinux|debian|ubuntu|devuan|centos|coreos|alpine) printf "printf '%%s\\\\n' '$name_should' > /etc/hostname\\n" echo "hostname -F /etc/hostname" ;; freebsd|openbsd) + # NOTE: Writing the hostname to file is done in the manifest. echo "hostname '$name_should'" ;; suse) echo "hostname '$name_should'" printf "printf '%%s\\\\n' '$name_should' > /etc/HOSTNAME\\n" ;; + *) + echo "echo 'Unsupported OS: $os' >&2; exit 1" + ;; 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/manifest b/cdist/conf/type/__hostname/manifest index 8f1adf12..5ea3b8ff 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. # @@ -63,6 +64,7 @@ case "$os" in echo "$name_should" | __file /etc/myname --source - ;; *) - not_supported + # On other operating systems we fall back to hostnamectl if available… + test -n "$(cat "$__object/explorer/has_hostnamectl")" || not_supported ;; esac From 2804a8bae6de1f0c3ae376092a3102d8a6964373 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Thu, 15 Aug 2019 16:16:38 +0200 Subject: [PATCH 02/75] [__hostname] Add support for macosx --- cdist/conf/type/__hostname/explorer/hostname | 2 +- cdist/conf/type/__hostname/gencode-remote | 3 +++ cdist/conf/type/__hostname/manifest | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/cdist/conf/type/__hostname/explorer/hostname b/cdist/conf/type/__hostname/explorer/hostname index aaaa3a30..0b562d11 100644 --- a/cdist/conf/type/__hostname/explorer/hostname +++ b/cdist/conf/type/__hostname/explorer/hostname @@ -41,7 +41,7 @@ elif [ -f /etc/myname ]; then elif [ "$(uname -s)" == FreeBSD ]; then (. /etc/rc.conf && echo $hostname) # Mac OS X -elif [ "$(uname -s)" == Darwin -a -f "$(command -v scutil)" ]; then +elif [ "$(uname -s)" == Darwin -a -x "$(command -v scutil)" ]; then scutil --get HostName 2>/dev/null || hostname -s else command -v hostname && hostname -s diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index 20de7078..ee12f822 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -86,6 +86,9 @@ case "$os" in echo "hostname '$name_should'" printf "printf '%%s\\\\n' '$name_should' > /etc/HOSTNAME\\n" ;; + macosx) + echo "scutil --set HostName '$name_should'" + ;; *) echo "echo 'Unsupported OS: $os' >&2; exit 1" ;; diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index 5ea3b8ff..fe067718 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -42,7 +42,7 @@ not_supported() { } case "$os" in - archlinux|debian|suse|ubuntu|devuan|coreos|alpine) + archlinux|debian|suse|ubuntu|devuan|coreos|alpine|macosx) # handled in gencode-remote : ;; From abc765bd99fae9e479dfed2a3d39e780a1ab3c34 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Mon, 30 Sep 2019 12:52:43 +0200 Subject: [PATCH 03/75] [__hostname/explorer/hostname] Darwin: Always fall back to hostname if scutil is missing or fails --- cdist/conf/type/__hostname/explorer/hostname | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cdist/conf/type/__hostname/explorer/hostname b/cdist/conf/type/__hostname/explorer/hostname index 0b562d11..8aab1ec0 100644 --- a/cdist/conf/type/__hostname/explorer/hostname +++ b/cdist/conf/type/__hostname/explorer/hostname @@ -41,8 +41,8 @@ elif [ -f /etc/myname ]; then elif [ "$(uname -s)" == FreeBSD ]; then (. /etc/rc.conf && echo $hostname) # Mac OS X -elif [ "$(uname -s)" == Darwin -a -x "$(command -v scutil)" ]; then - scutil --get HostName 2>/dev/null || hostname -s +elif [ "$(uname -s)" == Darwin ]; then + [ -x "$(command -v scutil)" ] && scutil --get HostName 2>/dev/null || hostname -s else command -v hostname && hostname -s fi From 81ba849af8340ff3d59646d602a429b9170b9701 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Thu, 3 Oct 2019 19:19:06 +0200 Subject: [PATCH 04/75] Move __hostname hostname explorer to global scope --- cdist/conf/explorer/hostname | 24 ++++++++-- cdist/conf/type/__hostname/explorer/hostname | 48 ------------------- .../__hostname/explorer/hostname_sysconfig | 2 +- 3 files changed, 21 insertions(+), 53 deletions(-) delete mode 100644 cdist/conf/type/__hostname/explorer/hostname diff --git a/cdist/conf/explorer/hostname b/cdist/conf/explorer/hostname index 7715c6b0..13ac91c2 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,24 @@ # along with cdist. If not, see . # # +# Retrieve the running hostname +# -if command -v uname >/dev/null; then - uname -n +# Firstly, check hostnamectl if available. +if command -v hostnamectl >/dev/null +then + hostnamectl status --static && exit 0 +fi + +# In case hostnamectl is missing or failed: +# We fall back to alternative approaches +if [ "$(uname -s)" = Darwin ] && command -v scutil >/dev/null +then + # Mac OS X + scutil --get HostName 2>/dev/null +elif command -v hostname >/dev/null +then + hostname -s +else + uname -n fi diff --git a/cdist/conf/type/__hostname/explorer/hostname b/cdist/conf/type/__hostname/explorer/hostname deleted file mode 100644 index 8aab1ec0..00000000 --- a/cdist/conf/type/__hostname/explorer/hostname +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh -# -# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.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 . -# -# -# Retrieve the running hostname -# - -# Firstly, check hostnamectl if available. -if command -v hostnamectl >/dev/null -then - hostnamectl --static && exit 0 -fi - - -# Almost any distribution -if [ -f /etc/hostname ]; then - cat /etc/hostname -# SuSE -elif [ -f /etc/HOSTNAME ]; then - cat /etc/HOSTNAME -# OpenBSD -elif [ -f /etc/myname ]; then - cat /etc/myname -# FreeBSD -elif [ "$(uname -s)" == FreeBSD ]; then - (. /etc/rc.conf && echo $hostname) -# Mac OS X -elif [ "$(uname -s)" == Darwin ]; then - [ -x "$(command -v scutil)" ] && scutil --get HostName 2>/dev/null || hostname -s -else - command -v hostname && hostname -s -fi diff --git a/cdist/conf/type/__hostname/explorer/hostname_sysconfig b/cdist/conf/type/__hostname/explorer/hostname_sysconfig index d0d7b4e7..4d6b8513 100755 --- a/cdist/conf/type/__hostname/explorer/hostname_sysconfig +++ b/cdist/conf/type/__hostname/explorer/hostname_sysconfig @@ -18,7 +18,7 @@ # along with cdist. If not, see . # # -# Retrieve the contents of /etc/hostname +# Retrieve the contents of /etc/sysconfig/network # if [ -f /etc/sysconfig/network ]; then From ee440ec61996b53889dff3327d1fd4c4fa0f2a57 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Thu, 3 Oct 2019 21:41:51 +0200 Subject: [PATCH 05/75] [__hostname] Compress state check --- cdist/conf/type/__hostname/gencode-remote | 29 +++++++++-------------- 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index ee12f822..c6779a22 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -33,25 +33,18 @@ name_sysconfig=$(cat "$__object/explorer/hostname_sysconfig") has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl") ################################################################################ -# If everything is ok -> exit +# Check if the 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 - ;; - *) - if [ "$name_running" -a "$name_running" = "$name_should" ]; then - exit 0 - fi - ;; -esac +if [ "$name_running" = "$name_should" ]; then + case "$os" in + archlinux|debian|suse|ubuntu|devuan|coreos|alpine) + [ "$name_config" != "$name_should" ] || exit 0 + ;; + scientific|centos|freebsd|openbsd) + [ "$name_sysconfig" != "$name_should" ] || exit 0 + ;; + esac +fi ################################################################################ # Setup hostname From 644768cc02a4bf0a58a9ae83d3aaa3a318f5f9c8 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Wed, 2 Oct 2019 15:37:51 +0200 Subject: [PATCH 06/75] Add __select_editor type --- .../type/__select_editor/explorer/editor_path | 97 +++++++++++++++++++ .../conf/type/__select_editor/explorer/group | 26 +++++ .../type/__select_editor/explorer/user_home | 26 +++++ cdist/conf/type/__select_editor/man.rst | 51 ++++++++++ cdist/conf/type/__select_editor/manifest | 59 +++++++++++ .../__select_editor/parameter/default/state | 1 + .../type/__select_editor/parameter/optional | 1 + .../type/__select_editor/parameter/required | 1 + 8 files changed, 262 insertions(+) create mode 100644 cdist/conf/type/__select_editor/explorer/editor_path create mode 100644 cdist/conf/type/__select_editor/explorer/group create mode 100644 cdist/conf/type/__select_editor/explorer/user_home create mode 100644 cdist/conf/type/__select_editor/man.rst create mode 100644 cdist/conf/type/__select_editor/manifest create mode 100644 cdist/conf/type/__select_editor/parameter/default/state create mode 100644 cdist/conf/type/__select_editor/parameter/optional create mode 100644 cdist/conf/type/__select_editor/parameter/required diff --git a/cdist/conf/type/__select_editor/explorer/editor_path b/cdist/conf/type/__select_editor/explorer/editor_path new file mode 100644 index 00000000..88952e23 --- /dev/null +++ b/cdist/conf/type/__select_editor/explorer/editor_path @@ -0,0 +1,97 @@ +#!/bin/sh +# +# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.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 . +# +# +# Check if the given editor is present on the target system and determine its +# absolute path. +# + +case $("${__explorer}/os") +in + debian|devuan|ubuntu) + : # supported + ;; + *) + exit 0 # will produce an error message in the manifest + ;; +esac + + +editor=$(cat "${__object}/parameter/editor") +editors=$(update-alternatives --list editor) + +if test $(echo "${editors}" | wc -l) -lt 1 +then + echo 'No editors have been found on this system.' >&2 + exit 1 +fi + +case $editor +in + /*) + is_path=true + ;; + */*) + echo 'Relative editor paths are not supported' >&2 + exit 1 + ;; + *) + is_path=false + ;; +esac + + +IFS=' +' +if $is_path +then + if ! test -f "${editor}" + then + echo "Editor ${editor} is missing on the target system." >&2 + exit 1 + fi + + for e in $editors + do + if test "${editor}" = "${e}" + then + # Editor is present and part of the alternatives list -> use it! + echo "${editor}" + exit 0 + fi + done + + echo "Editor ${editor} is not in the alternatives list of the target system." >&2 + exit 1 +else + for e in $editors + do + if test "$(basename "${e}")" = "${editor}" + then + # Editor could be found by basename in the alternatives list -> use it! + echo "${e}" + exit 0 + fi + done + + echo "Editor ${editor} is missing on the target system." >&2 + exit 1 +fi + +exit 1 diff --git a/cdist/conf/type/__select_editor/explorer/group b/cdist/conf/type/__select_editor/explorer/group new file mode 100644 index 00000000..5d288189 --- /dev/null +++ b/cdist/conf/type/__select_editor/explorer/group @@ -0,0 +1,26 @@ +#!/bin/sh -e +# +# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.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 . +# +# +# Determines the primary group of the user. +# + +user=$__object_id + +id -gn "${user}" 2>/dev/null diff --git a/cdist/conf/type/__select_editor/explorer/user_home b/cdist/conf/type/__select_editor/explorer/user_home new file mode 100644 index 00000000..dc1725a0 --- /dev/null +++ b/cdist/conf/type/__select_editor/explorer/user_home @@ -0,0 +1,26 @@ +#!/bin/sh +# +# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.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 . +# +# +# Determines the home folder of the target user. +# + +user=$__object_id + +getent passwd "${user}" | cut -d':' -f6 diff --git a/cdist/conf/type/__select_editor/man.rst b/cdist/conf/type/__select_editor/man.rst new file mode 100644 index 00000000..98e5ef81 --- /dev/null +++ b/cdist/conf/type/__select_editor/man.rst @@ -0,0 +1,51 @@ +cdist-type__select_editor(7) +============================ + +NAME +---- +cdist-type__select_editor - Select the sensible-editor + + +DESCRIPTION +----------- +This cdist type allows you to select the sensible-editor on Debian-based systems +for a given user. + + +REQUIRED PARAMETERS +------------------- +editor + Name or path of the editor to be selected. + + +OPTIONAL PARAMETERS +------------------- +state + either "present" or "absent". Defaults to "present". + + +EXAMPLES +-------- + +.. code-block:: sh + + __select_editor root --editor /bin/ed # ed(1) is the standard + __select_editor noob --editor nano + + +SEE ALSO +-------- +none + + +AUTHOR +------- +Dennis Camera + + +COPYING +------- +Copyright \(C) 2019 Dennis Camera. +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/cdist/conf/type/__select_editor/manifest b/cdist/conf/type/__select_editor/manifest new file mode 100644 index 00000000..5ed97533 --- /dev/null +++ b/cdist/conf/type/__select_editor/manifest @@ -0,0 +1,59 @@ +#!/bin/sh -e +# -*- mode: sh; indent-tabs-mode: t -*- +# +# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.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") + +state=$(cat "${__object}/parameter/state") +user=$__object_id + +editor_path=$(cat "${__object}/explorer/editor_path") +user_home=$(cat "${__object}/explorer/user_home") +group=$(cat "${__object}/explorer/group") + +case $os +in + debian|devuan|ubuntu) + test "${state}" = 'present' && __package_apt sensible-utils --state present + ;; + *) + echo "OS ${os} does not support select-editor." >&2 + exit 1 + ;; +esac + +if test -z "${user_home}" +then + echo "Could not find ${user}'s home directory." >&2 + exit 1 +fi + +if test -z "${editor_path}" +then + echo "Editor \"$(cat "${__object}/parameter/editor")\" is missing on the target system." >&2 + exit 1 +fi + +__file "${user_home}/.selected_editor" --state "${state}" \ + --owner "${user}" --group "${group}" --mode 0644 \ + --source - < Date: Fri, 4 Oct 2019 14:04:17 +0200 Subject: [PATCH 07/75] Rename __select_editor to __sensible_editor --- .../explorer/editor_path | 0 .../explorer/group | 0 .../explorer/user_home | 0 .../{__select_editor => __sensible_editor}/man.rst | 10 +++++----- .../{__select_editor => __sensible_editor}/manifest | 0 .../parameter/default/state | 0 .../parameter/optional | 0 .../parameter/required | 0 8 files changed, 5 insertions(+), 5 deletions(-) rename cdist/conf/type/{__select_editor => __sensible_editor}/explorer/editor_path (100%) rename cdist/conf/type/{__select_editor => __sensible_editor}/explorer/group (100%) rename cdist/conf/type/{__select_editor => __sensible_editor}/explorer/user_home (100%) rename cdist/conf/type/{__select_editor => __sensible_editor}/man.rst (73%) rename cdist/conf/type/{__select_editor => __sensible_editor}/manifest (100%) rename cdist/conf/type/{__select_editor => __sensible_editor}/parameter/default/state (100%) rename cdist/conf/type/{__select_editor => __sensible_editor}/parameter/optional (100%) rename cdist/conf/type/{__select_editor => __sensible_editor}/parameter/required (100%) diff --git a/cdist/conf/type/__select_editor/explorer/editor_path b/cdist/conf/type/__sensible_editor/explorer/editor_path similarity index 100% rename from cdist/conf/type/__select_editor/explorer/editor_path rename to cdist/conf/type/__sensible_editor/explorer/editor_path diff --git a/cdist/conf/type/__select_editor/explorer/group b/cdist/conf/type/__sensible_editor/explorer/group similarity index 100% rename from cdist/conf/type/__select_editor/explorer/group rename to cdist/conf/type/__sensible_editor/explorer/group diff --git a/cdist/conf/type/__select_editor/explorer/user_home b/cdist/conf/type/__sensible_editor/explorer/user_home similarity index 100% rename from cdist/conf/type/__select_editor/explorer/user_home rename to cdist/conf/type/__sensible_editor/explorer/user_home diff --git a/cdist/conf/type/__select_editor/man.rst b/cdist/conf/type/__sensible_editor/man.rst similarity index 73% rename from cdist/conf/type/__select_editor/man.rst rename to cdist/conf/type/__sensible_editor/man.rst index 98e5ef81..4dd20a3e 100644 --- a/cdist/conf/type/__select_editor/man.rst +++ b/cdist/conf/type/__sensible_editor/man.rst @@ -1,9 +1,9 @@ -cdist-type__select_editor(7) +cdist-type__sensible_editor(7) ============================ NAME ---- -cdist-type__select_editor - Select the sensible-editor +cdist-type__sensible_editor - Select the sensible-editor DESCRIPTION @@ -21,7 +21,7 @@ editor OPTIONAL PARAMETERS ------------------- state - either "present" or "absent". Defaults to "present". + Either "present" or "absent". Defaults to "present". EXAMPLES @@ -29,8 +29,8 @@ EXAMPLES .. code-block:: sh - __select_editor root --editor /bin/ed # ed(1) is the standard - __select_editor noob --editor nano + __sensible_editor root --editor /bin/ed # ed(1) is the standard + __sensible_editor noob --editor nano SEE ALSO diff --git a/cdist/conf/type/__select_editor/manifest b/cdist/conf/type/__sensible_editor/manifest similarity index 100% rename from cdist/conf/type/__select_editor/manifest rename to cdist/conf/type/__sensible_editor/manifest diff --git a/cdist/conf/type/__select_editor/parameter/default/state b/cdist/conf/type/__sensible_editor/parameter/default/state similarity index 100% rename from cdist/conf/type/__select_editor/parameter/default/state rename to cdist/conf/type/__sensible_editor/parameter/default/state diff --git a/cdist/conf/type/__select_editor/parameter/optional b/cdist/conf/type/__sensible_editor/parameter/optional similarity index 100% rename from cdist/conf/type/__select_editor/parameter/optional rename to cdist/conf/type/__sensible_editor/parameter/optional diff --git a/cdist/conf/type/__select_editor/parameter/required b/cdist/conf/type/__sensible_editor/parameter/required similarity index 100% rename from cdist/conf/type/__select_editor/parameter/required rename to cdist/conf/type/__sensible_editor/parameter/required From f5342e9a35c6660004392f400c0843b26e65562a Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Fri, 4 Oct 2019 20:03:19 +0200 Subject: [PATCH 08/75] [explorer/hostname] Remove code reading persistent hostname --- cdist/conf/explorer/hostname | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/cdist/conf/explorer/hostname b/cdist/conf/explorer/hostname index 13ac91c2..a16afb65 100755 --- a/cdist/conf/explorer/hostname +++ b/cdist/conf/explorer/hostname @@ -21,19 +21,7 @@ # Retrieve the running hostname # -# Firstly, check hostnamectl if available. -if command -v hostnamectl >/dev/null -then - hostnamectl status --static && exit 0 -fi - -# In case hostnamectl is missing or failed: -# We fall back to alternative approaches -if [ "$(uname -s)" = Darwin ] && command -v scutil >/dev/null -then - # Mac OS X - scutil --get HostName 2>/dev/null -elif command -v hostname >/dev/null +if command -v hostname >/dev/null then hostname -s else From 56c654808d84630e82f60ae0376cf3e5b54274c2 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Fri, 4 Oct 2019 20:35:14 +0200 Subject: [PATCH 09/75] [__hostname] Unify persistent hostname explorers --- .../type/__hostname/explorer/hostname_file | 30 ----------- .../__hostname/explorer/hostname_sysconfig | 26 ---------- .../__hostname/explorer/persistent_hostname | 52 +++++++++++++++++++ cdist/conf/type/__hostname/gencode-remote | 14 ++--- 4 files changed, 55 insertions(+), 67 deletions(-) delete mode 100755 cdist/conf/type/__hostname/explorer/hostname_file delete mode 100755 cdist/conf/type/__hostname/explorer/hostname_sysconfig create mode 100755 cdist/conf/type/__hostname/explorer/persistent_hostname 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/hostname_sysconfig b/cdist/conf/type/__hostname/explorer/hostname_sysconfig deleted file mode 100755 index 4d6b8513..00000000 --- a/cdist/conf/type/__hostname/explorer/hostname_sysconfig +++ /dev/null @@ -1,26 +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/sysconfig/network -# - -if [ -f /etc/sysconfig/network ]; then - awk -F= '/^HOSTNAME=/ { print $2 }' /etc/sysconfig/network -fi diff --git a/cdist/conf/type/__hostname/explorer/persistent_hostname b/cdist/conf/type/__hostname/explorer/persistent_hostname new file mode 100755 index 00000000..9ec5639b --- /dev/null +++ b/cdist/conf/type/__hostname/explorer/persistent_hostname @@ -0,0 +1,52 @@ +#!/bin/sh +# +# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.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 . +# +# +# Retrieve the persistent hostname +# + +# Firstly, check hostnamectl if available. +if command -v hostnamectl >/dev/null +then + hostnamectl status --static && exit 0 +fi + +# In case hostnamectl is missing or failed: +# Fall back to alternative OS-specific approaches. +case $("$__explorer/os") +in + alpine|archlinux|coreos|debian|devuan|suse|ubuntu) + [ -f /etc/hostname ] && cat /etc/hostname + ;; + suse) + [ -f /etc/HOSTNAME ] && cat /etc/HOSTNAME + ;; + scientific|centos) + [ -f /etc/sysconfig/network ] && awk -F= '/^HOSTNAME=/ { print $2 }' /etc/sysconfig/network + ;; + freebsd) + (. /etc/rc.conf && echo "$hostname") + ;; + openbsd) + cat /etc/myname + ;; + macosx) + scutil --get HostName 2>/dev/null + ;; +esac diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index c6779a22..e7f32323 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -28,22 +28,14 @@ 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") +name_config=$(cat "$__object/explorer/persistent_hostname") has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl") ################################################################################ # Check if the hostname is already correct # -if [ "$name_running" = "$name_should" ]; then - case "$os" in - archlinux|debian|suse|ubuntu|devuan|coreos|alpine) - [ "$name_config" != "$name_should" ] || exit 0 - ;; - scientific|centos|freebsd|openbsd) - [ "$name_sysconfig" != "$name_should" ] || exit 0 - ;; - esac +if [ "$name_running" = "$name_should" ] && [ ! "$name_config" -o "$name_config" = "$name_should" ]; then + exit 0 fi ################################################################################ From 1bab641c948174d82653736bfbbd39b09aa61801 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sat, 5 Oct 2019 18:43:06 +0200 Subject: [PATCH 10/75] [explorer/hostname] Do not shorten hostname in any case --- cdist/conf/explorer/hostname | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cdist/conf/explorer/hostname b/cdist/conf/explorer/hostname index a16afb65..dca004d1 100755 --- a/cdist/conf/explorer/hostname +++ b/cdist/conf/explorer/hostname @@ -23,7 +23,7 @@ if command -v hostname >/dev/null then - hostname -s + hostname else uname -n fi From 9a6ca1a343d983cc9e838ee23776af31cb21cadd Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 6 Oct 2019 12:07:54 +0200 Subject: [PATCH 11/75] [__sensible_editor] Remove mixed error reporting from manifest --- .../__sensible_editor/explorer/editor_path | 2 +- .../type/__sensible_editor/explorer/user_home | 11 +++++++++-- cdist/conf/type/__sensible_editor/man.rst | 2 +- cdist/conf/type/__sensible_editor/manifest | 18 +++--------------- 4 files changed, 14 insertions(+), 19 deletions(-) diff --git a/cdist/conf/type/__sensible_editor/explorer/editor_path b/cdist/conf/type/__sensible_editor/explorer/editor_path index 88952e23..a1673a52 100644 --- a/cdist/conf/type/__sensible_editor/explorer/editor_path +++ b/cdist/conf/type/__sensible_editor/explorer/editor_path @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/sh -e # # 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch) # diff --git a/cdist/conf/type/__sensible_editor/explorer/user_home b/cdist/conf/type/__sensible_editor/explorer/user_home index dc1725a0..b88243f7 100644 --- a/cdist/conf/type/__sensible_editor/explorer/user_home +++ b/cdist/conf/type/__sensible_editor/explorer/user_home @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/sh -e # # 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch) # @@ -22,5 +22,12 @@ # user=$__object_id +home=$(getent passwd "${user}" | cut -d':' -f6) -getent passwd "${user}" | cut -d':' -f6 +if ! test -d "${home}" +then + echo "Cannot find home directory of user ${user}" >&2 + exit 1 +fi + +echo "${home}" diff --git a/cdist/conf/type/__sensible_editor/man.rst b/cdist/conf/type/__sensible_editor/man.rst index 4dd20a3e..2d7682a6 100644 --- a/cdist/conf/type/__sensible_editor/man.rst +++ b/cdist/conf/type/__sensible_editor/man.rst @@ -1,5 +1,5 @@ cdist-type__sensible_editor(7) -============================ +============================== NAME ---- diff --git a/cdist/conf/type/__sensible_editor/manifest b/cdist/conf/type/__sensible_editor/manifest index 5ed97533..b02625e2 100644 --- a/cdist/conf/type/__sensible_editor/manifest +++ b/cdist/conf/type/__sensible_editor/manifest @@ -24,10 +24,6 @@ os=$(cat "${__global}/explorer/os") state=$(cat "${__object}/parameter/state") user=$__object_id -editor_path=$(cat "${__object}/explorer/editor_path") -user_home=$(cat "${__object}/explorer/user_home") -group=$(cat "${__object}/explorer/group") - case $os in debian|devuan|ubuntu) @@ -39,17 +35,9 @@ in ;; esac -if test -z "${user_home}" -then - echo "Could not find ${user}'s home directory." >&2 - exit 1 -fi - -if test -z "${editor_path}" -then - echo "Editor \"$(cat "${__object}/parameter/editor")\" is missing on the target system." >&2 - exit 1 -fi +editor_path=$(cat "${__object}/explorer/editor_path") +user_home=$(cat "${__object}/explorer/user_home") +group=$(cat "${__object}/explorer/group") __file "${user_home}/.selected_editor" --state "${state}" \ --owner "${user}" --group "${group}" --mode 0644 \ From d43eb5b22f11696d6992cbb6375806f7a8af133a Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sat, 5 Oct 2019 20:10:52 +0200 Subject: [PATCH 12/75] [__hostname] Add support for NetBSD --- .../conf/type/__hostname/explorer/persistent_hostname | 10 ++++++++++ cdist/conf/type/__hostname/manifest | 9 +++++++++ 2 files changed, 19 insertions(+) diff --git a/cdist/conf/type/__hostname/explorer/persistent_hostname b/cdist/conf/type/__hostname/explorer/persistent_hostname index 9ec5639b..8909ebaa 100755 --- a/cdist/conf/type/__hostname/explorer/persistent_hostname +++ b/cdist/conf/type/__hostname/explorer/persistent_hostname @@ -43,6 +43,16 @@ in freebsd) (. /etc/rc.conf && echo "$hostname") ;; + netbsd) + if grep -q '^hostname=' /etc/rc.conf + then + (. /etc/rc.conf && echo "$hostname") + elif [ -f /etc/myname ] + then + # Fall back to /etc/myname file + cat /etc/myname + fi + ;; openbsd) cat /etc/myname ;; diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index fe067718..b0948d24 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -60,6 +60,15 @@ case "$os" in --key 'hostname' \ --value "$name_should" ;; + netbsd) + __key_value rcconf-hostname \ + --file /etc/rc.conf \ + --delimiter '=' \ + --key 'hostname' \ + --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 - ;; From 77210c349e70bd1f54394f1873c768ddb62d7ea9 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 6 Oct 2019 17:56:37 +0200 Subject: [PATCH 13/75] [__hostname] Extend os switches with RedHat-derivatives (CentOS, Fedora, RedHat, Scientific) --- cdist/conf/type/__hostname/explorer/persistent_hostname | 2 +- cdist/conf/type/__hostname/gencode-remote | 6 +++--- cdist/conf/type/__hostname/manifest | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cdist/conf/type/__hostname/explorer/persistent_hostname b/cdist/conf/type/__hostname/explorer/persistent_hostname index 8909ebaa..ce71d06a 100755 --- a/cdist/conf/type/__hostname/explorer/persistent_hostname +++ b/cdist/conf/type/__hostname/explorer/persistent_hostname @@ -37,7 +37,7 @@ in suse) [ -f /etc/HOSTNAME ] && cat /etc/HOSTNAME ;; - scientific|centos) + centos|fedora|redhat|scientific) [ -f /etc/sysconfig/network ] && awk -F= '/^HOSTNAME=/ { print $2 }' /etc/sysconfig/network ;; freebsd) diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index e7f32323..e3f1bee4 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -58,12 +58,12 @@ EOF fi # Use the good old way to set the hostname. Also if hostnamectl fails. -case "$os" in - archlinux|debian|ubuntu|devuan|centos|coreos|alpine) +case $os in + archlinux|debian|ubuntu|devuan|coreos|alpine) printf "printf '%%s\\\\n' '$name_should' > /etc/hostname\\n" echo "hostname -F /etc/hostname" ;; - freebsd|openbsd) + centos|fedora|redhat|scientific|freebsd|openbsd) # NOTE: Writing the hostname to file is done in the manifest. echo "hostname '$name_should'" ;; diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index b0948d24..ccd11c4e 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -46,7 +46,7 @@ case "$os" in # handled in gencode-remote : ;; - scientific|centos) + centos|fedora|redhat|scientific) __key_value sysconfig-hostname \ --file /etc/sysconfig/network \ --delimiter '=' \ From 7bf203509bdaf42c88fbc67fbdd8dd1a15a6e21d Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 6 Oct 2019 18:01:58 +0200 Subject: [PATCH 14/75] [__hostname] Use __key_value exact_delimiter for shell-like files --- cdist/conf/type/__hostname/manifest | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index ccd11c4e..f1c17653 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -49,21 +49,21 @@ case "$os" in centos|fedora|redhat|scientific) __key_value sysconfig-hostname \ --file /etc/sysconfig/network \ - --delimiter '=' \ + --delimiter '=' --exact_delimiter \ --key HOSTNAME \ - --value "$name_should" --exact_delimiter + --value "\"$name_should\"" ;; freebsd) __key_value rcconf-hostname \ --file /etc/rc.conf \ - --delimiter '=' \ + --delimiter '=' --exact_delimiter \ --key 'hostname' \ --value "$name_should" ;; netbsd) __key_value rcconf-hostname \ --file /etc/rc.conf \ - --delimiter '=' \ + --delimiter '=' --exact_delimiter \ --key 'hostname' \ --value "\"$name_should\"" # To avoid confusion, ensure that the hostname is only stored once From 74568e8a0aa0f1e8222aff49c9b00f667694b0c3 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 6 Oct 2019 18:02:24 +0200 Subject: [PATCH 15/75] [__hostname] Use FQDN as hostname on RedHat derivatives and BSDs --- cdist/conf/type/__hostname/manifest | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index f1c17653..5d9eeeeb 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -25,10 +25,13 @@ if [ -f "$__object/parameter/name" ]; then name_should="$(cat "$__object/parameter/name")" else case "$os" in - openbsd) + # RedHat-derivatives and BSDs + centos|fedora|redhat|scientific|freebsd|netbsd|openbsd) + # Hostname is FQDN name_should="${__target_host}" ;; *) + # Hostname is only first component of FQDN name_should="${__target_host%%.*}" ;; esac From 3e7cf68de590c755c74bd3542166a698b86b27d4 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 6 Oct 2019 18:14:35 +0200 Subject: [PATCH 16/75] [__hostname] Source sysconfig file instead of processing through AWK This way quotes and expansions will be handled correctly. --- cdist/conf/type/__hostname/explorer/persistent_hostname | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cdist/conf/type/__hostname/explorer/persistent_hostname b/cdist/conf/type/__hostname/explorer/persistent_hostname index ce71d06a..6bc0786f 100755 --- a/cdist/conf/type/__hostname/explorer/persistent_hostname +++ b/cdist/conf/type/__hostname/explorer/persistent_hostname @@ -38,7 +38,8 @@ in [ -f /etc/HOSTNAME ] && cat /etc/HOSTNAME ;; centos|fedora|redhat|scientific) - [ -f /etc/sysconfig/network ] && awk -F= '/^HOSTNAME=/ { print $2 }' /etc/sysconfig/network + [ -f /etc/sysconfig/network ] \ + && (. /etc/sysconfig/network && echo "$HOSTNAME") ;; freebsd) (. /etc/rc.conf && echo "$hostname") From cbb108d61c20d2699946f819aff77de99b7bb94f Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 6 Oct 2019 18:23:56 +0200 Subject: [PATCH 17/75] [__hostname] Copy FQDN-logic to gencode-remote Otherwise, the code-remote gets run on the remote every time. --- cdist/conf/type/__hostname/gencode-remote | 23 +++++++++++++++++------ cdist/conf/type/__hostname/manifest | 20 ++++++++++---------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index e3f1bee4..973d1d97 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -20,17 +20,28 @@ # 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/persistent_hostname") has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl") + +if [ -f "$__object/parameter/name" ]; then + name_should="$(cat "$__object/parameter/name")" +else + case $os in + # RedHat-derivatives and BSDs + centos|fedora|redhat|scientific|freebsd|netbsd|openbsd) + # Hostname is FQDN + name_should="${__target_host}" + ;; + *) + # Hostname is only first component of FQDN + name_should="${__target_host%%.*}" + ;; + esac +fi + ################################################################################ # Check if the hostname is already correct # diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index 5d9eeeeb..699f3e93 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -24,16 +24,16 @@ os=$(cat "$__global/explorer/os") if [ -f "$__object/parameter/name" ]; then name_should="$(cat "$__object/parameter/name")" else - case "$os" in - # RedHat-derivatives and BSDs - centos|fedora|redhat|scientific|freebsd|netbsd|openbsd) - # Hostname is FQDN - name_should="${__target_host}" - ;; - *) - # Hostname is only first component of FQDN - name_should="${__target_host%%.*}" - ;; + case $os in + # RedHat-derivatives and BSDs + centos|fedora|redhat|scientific|freebsd|netbsd|openbsd) + # Hostname is FQDN + name_should="${__target_host}" + ;; + *) + # Hostname is only first component of FQDN + name_should="${__target_host%%.*}" + ;; esac fi From 6e1a105c22021e0f98e63930eeade65b416aaa2d Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 6 Oct 2019 18:36:43 +0200 Subject: [PATCH 18/75] [__hostname] Lint --- cdist/conf/type/__hostname/gencode-remote | 12 ++++++++---- cdist/conf/type/__hostname/manifest | 6 ++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index 973d1d97..b258165d 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -29,7 +29,8 @@ has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl") if [ -f "$__object/parameter/name" ]; then name_should="$(cat "$__object/parameter/name")" else - case $os in + case $os + in # RedHat-derivatives and BSDs centos|fedora|redhat|scientific|freebsd|netbsd|openbsd) # Hostname is FQDN @@ -45,14 +46,16 @@ fi ################################################################################ # Check if the hostname is already correct # -if [ "$name_running" = "$name_should" ] && [ ! "$name_config" -o "$name_config" = "$name_should" ]; then +if [ "$name_running" = "$name_should" ] \ + && [ -z "$name_config" -o "$name_config" = "$name_should" ] +then exit 0 fi ################################################################################ # Setup hostname # -echo changed >> "$__messages_out" +echo 'changed' >> "$__messages_out" # First try to set the hostname using hostnamectl, if available. @@ -69,7 +72,8 @@ EOF fi # Use the good old way to set the hostname. Also if hostnamectl fails. -case $os in +case $os +in archlinux|debian|ubuntu|devuan|coreos|alpine) printf "printf '%%s\\\\n' '$name_should' > /etc/hostname\\n" echo "hostname -F /etc/hostname" diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index 699f3e93..18152c3e 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -24,7 +24,8 @@ os=$(cat "$__global/explorer/os") if [ -f "$__object/parameter/name" ]; then name_should="$(cat "$__object/parameter/name")" else - case $os in + case $os + in # RedHat-derivatives and BSDs centos|fedora|redhat|scientific|freebsd|netbsd|openbsd) # Hostname is FQDN @@ -44,7 +45,8 @@ not_supported() { exit 1 } -case "$os" in +case $os +in archlinux|debian|suse|ubuntu|devuan|coreos|alpine|macosx) # handled in gencode-remote : From da1d70e16ac56511fb03f30bf9c76645c01caab8 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 6 Oct 2019 18:43:27 +0200 Subject: [PATCH 19/75] [__hostname] Also quote hostname in FreeBSD rc.conf --- cdist/conf/type/__hostname/manifest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index 18152c3e..53e530d7 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -63,7 +63,7 @@ in --file /etc/rc.conf \ --delimiter '=' --exact_delimiter \ --key 'hostname' \ - --value "$name_should" + --value "\"$name_should\"" ;; netbsd) __key_value rcconf-hostname \ From 064e992a7aec8916a2bc65e5279f65bab4464140 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 6 Oct 2019 21:03:49 +0200 Subject: [PATCH 20/75] [__hostname] Support openSUSE and replace printf with echo --- .../type/__hostname/explorer/persistent_hostname | 12 ++++++------ cdist/conf/type/__hostname/gencode-remote | 12 +++++++----- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/cdist/conf/type/__hostname/explorer/persistent_hostname b/cdist/conf/type/__hostname/explorer/persistent_hostname index 6bc0786f..ec52bbd2 100755 --- a/cdist/conf/type/__hostname/explorer/persistent_hostname +++ b/cdist/conf/type/__hostname/explorer/persistent_hostname @@ -31,12 +31,9 @@ fi # Fall back to alternative OS-specific approaches. case $("$__explorer/os") in - alpine|archlinux|coreos|debian|devuan|suse|ubuntu) + alpine|archlinux|coreos|debian|devuan|ubuntu) [ -f /etc/hostname ] && cat /etc/hostname ;; - suse) - [ -f /etc/HOSTNAME ] && cat /etc/HOSTNAME - ;; centos|fedora|redhat|scientific) [ -f /etc/sysconfig/network ] \ && (. /etc/sysconfig/network && echo "$HOSTNAME") @@ -44,6 +41,9 @@ in freebsd) (. /etc/rc.conf && echo "$hostname") ;; + macosx) + scutil --get HostName 2>/dev/null + ;; netbsd) if grep -q '^hostname=' /etc/rc.conf then @@ -57,7 +57,7 @@ in openbsd) cat /etc/myname ;; - macosx) - scutil --get HostName 2>/dev/null + suse) + cat /etc/HOSTNAME 2>/dev/null ;; esac diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index b258165d..37ace1b7 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -75,20 +75,22 @@ fi case $os in archlinux|debian|ubuntu|devuan|coreos|alpine) - printf "printf '%%s\\\\n' '$name_should' > /etc/hostname\\n" + echo "printf '%s\\n' '$name_should' > /etc/hostname" echo "hostname -F /etc/hostname" ;; centos|fedora|redhat|scientific|freebsd|openbsd) # NOTE: Writing the hostname to file is done in the manifest. echo "hostname '$name_should'" ;; - suse) - echo "hostname '$name_should'" - printf "printf '%%s\\\\n' '$name_should' > /etc/HOSTNAME\\n" - ;; macosx) echo "scutil --set HostName '$name_should'" ;; + suse) + # We write into /etc/HOSTNAME for backwards-compatibility. Modern SuSE + # has hostnamectl anyway and symlinks /etc/HOSTNAME to /etc/hostname. + echo "printf '%s\\n' '$name_should' > /etc/HOSTNAME" + echo 'hostname -F /etc/HOSTNAME' + ;; *) echo "echo 'Unsupported OS: $os' >&2; exit 1" ;; From c11e757dfac865fc54f2bbe7b5ad015d25e813ad Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 6 Oct 2019 23:34:59 +0200 Subject: [PATCH 21/75] [__hostname] Add support for Gentoo --- .../conf/type/__hostname/explorer/persistent_hostname | 3 +++ cdist/conf/type/__hostname/gencode-remote | 10 +++++----- cdist/conf/type/__hostname/manifest | 7 +++++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/cdist/conf/type/__hostname/explorer/persistent_hostname b/cdist/conf/type/__hostname/explorer/persistent_hostname index ec52bbd2..141c44fe 100755 --- a/cdist/conf/type/__hostname/explorer/persistent_hostname +++ b/cdist/conf/type/__hostname/explorer/persistent_hostname @@ -41,6 +41,9 @@ in freebsd) (. /etc/rc.conf && echo "$hostname") ;; + gentoo) + (. /etc/conf.d/hostname && echo "$hostname") + ;; macosx) scutil --get HostName 2>/dev/null ;; diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index 37ace1b7..64fff7ad 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -74,14 +74,10 @@ fi # Use the good old way to set the hostname. Also if hostnamectl fails. case $os in - archlinux|debian|ubuntu|devuan|coreos|alpine) + alpine|archlinux|coreos|debian|devuan|ubuntu) echo "printf '%s\\n' '$name_should' > /etc/hostname" echo "hostname -F /etc/hostname" ;; - centos|fedora|redhat|scientific|freebsd|openbsd) - # NOTE: Writing the hostname to file is done in the manifest. - echo "hostname '$name_should'" - ;; macosx) echo "scutil --set HostName '$name_should'" ;; @@ -91,6 +87,10 @@ in echo "printf '%s\\n' '$name_should' > /etc/HOSTNAME" echo 'hostname -F /etc/HOSTNAME' ;; + centos|fedora|freebsd|gentoo|netbsd|openbsd|redhat|scientific) + # NOTE: Writing the hostname to file is done in the manifest. + echo "hostname '$name_should'" + ;; *) echo "echo 'Unsupported OS: $os' >&2; exit 1" ;; diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index 53e530d7..0ffd7678 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -58,6 +58,13 @@ in --key HOSTNAME \ --value "\"$name_should\"" ;; + gentoo) + __key_value confd-hostname \ + --file /etc/conf.d/hostname \ + --delimiter '=' --exact_delimiter \ + --key 'hostname' \ + --value "\"$name_should\"" + ;; freebsd) __key_value rcconf-hostname \ --file /etc/rc.conf \ From b6898b097f01941d68860c02118f5f5f2ddb8576 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Tue, 8 Oct 2019 23:05:23 +0200 Subject: [PATCH 22/75] [__sensible_editor] Add support for RedHat derivatives They have added sensible-utils lately. select-editor(1) does not work because their alternatives system is broken, but sensible-editor(1) works just fine, so we can support it. --- .../__sensible_editor/explorer/editor_path | 84 +++++++++++-------- cdist/conf/type/__sensible_editor/man.rst | 15 +++- cdist/conf/type/__sensible_editor/manifest | 18 +++- 3 files changed, 78 insertions(+), 39 deletions(-) diff --git a/cdist/conf/type/__sensible_editor/explorer/editor_path b/cdist/conf/type/__sensible_editor/explorer/editor_path index a1673a52..8b10b17b 100644 --- a/cdist/conf/type/__sensible_editor/explorer/editor_path +++ b/cdist/conf/type/__sensible_editor/explorer/editor_path @@ -22,76 +22,92 @@ # absolute path. # +die() { + echo "$@" >&2 + exit 1 +} + +editor_missing() { die "Editor '$1' is missing on the target system."; } +editor_no_alternative() { die "Editor '$1' is not in the alternatives list of the target system."; } + + case $("${__explorer}/os") in debian|devuan|ubuntu) - : # supported + has_alternatives=true + editors=$(update-alternatives --list editor) ;; *) - exit 0 # will produce an error message in the manifest + # NOTE: RedHat has an alternatives system but it doesn't usually track + # editors and it is a pain to extract the list. + has_alternatives=false ;; esac - editor=$(cat "${__object}/parameter/editor") -editors=$(update-alternatives --list editor) - -if test $(echo "${editors}" | wc -l) -lt 1 -then - echo 'No editors have been found on this system.' >&2 - exit 1 -fi case $editor in /*) - is_path=true + is_abspath=true ;; */*) - echo 'Relative editor paths are not supported' >&2 - exit 1 + die 'Relative editor paths are not supported' ;; *) - is_path=false + is_abspath=false ;; esac -IFS=' -' -if $is_path +if $has_alternatives && test "$(echo "${editors}" | wc -l)" -gt 0 then - if ! test -f "${editor}" + IFS=' +' + if ! $is_abspath then - echo "Editor ${editor} is missing on the target system." >&2 - exit 1 + # First, try to resolve the absolute path using $editors. + for e in $editors + do + if test "$(basename "${e}")" = "${editor}" + then + editor="${e}" + break + fi + done fi + # Check if path is present + test -f "${editor}" || editor_missing "${editor}" + for e in $editors do if test "${editor}" = "${e}" then - # Editor is present and part of the alternatives list -> use it! + # Editor is part of the alternatives list -> use it! echo "${editor}" exit 0 fi done - echo "Editor ${editor} is not in the alternatives list of the target system." >&2 - exit 1 + editor_no_alternative "${editor}" else - for e in $editors - do - if test "$(basename "${e}")" = "${editor}" - then - # Editor could be found by basename in the alternatives list -> use it! - echo "${e}" - exit 0 - fi - done + # NOTE: This branch is mostly for RedHat-based systems which do + # not track editor alternatives. To make this type useful + # on RedHat at all we allow an absoloute path to be provided + # in any case. - echo "Editor ${editor} is missing on the target system." >&2 - exit 1 + if $is_abspath + then + test -x "${editor}" || editor_missing "${editor}" + + echo "${editor}" + exit 0 + else + die "The target doesn't list any editor alternatives. " \ + "Please specify an absolute path or populate the alternatives list." + fi fi +# The script should never reach this statement! exit 1 diff --git a/cdist/conf/type/__sensible_editor/man.rst b/cdist/conf/type/__sensible_editor/man.rst index 2d7682a6..9e2245ef 100644 --- a/cdist/conf/type/__sensible_editor/man.rst +++ b/cdist/conf/type/__sensible_editor/man.rst @@ -8,14 +8,15 @@ cdist-type__sensible_editor - Select the sensible-editor DESCRIPTION ----------- -This cdist type allows you to select the sensible-editor on Debian-based systems -for a given user. +This cdist type allows you to select the :strong:`sensible-editor` for +a given user. REQUIRED PARAMETERS ------------------- editor Name or path of the editor to be selected. + On systems other than Debian derivatives an absolute path is required. OPTIONAL PARAMETERS @@ -33,9 +34,17 @@ EXAMPLES __sensible_editor noob --editor nano +LIMITATIONS +----------- +This type only works on operating systems on which the sensible-utils package +is available. + +Hint: On RedHat-based systems setting up the EPEL repo might be necessary. + + SEE ALSO -------- -none +:strong:`select-editor`\ (1), :strong:`sensible-editor`\ (1). AUTHOR diff --git a/cdist/conf/type/__sensible_editor/manifest b/cdist/conf/type/__sensible_editor/manifest index b02625e2..56a6b02f 100644 --- a/cdist/conf/type/__sensible_editor/manifest +++ b/cdist/conf/type/__sensible_editor/manifest @@ -27,14 +27,28 @@ user=$__object_id case $os in debian|devuan|ubuntu) - test "${state}" = 'present' && __package_apt sensible-utils --state present + test "${state}" != 'absent' \ + && __package sensible-utils --state present --type apt + ;; + centos|fedora|redhat|scientific) + test "${state}" != 'absent' \ + && __package sensible-utils --state present --type yum ;; *) - echo "OS ${os} does not support select-editor." >&2 + echo "OS ${os} does not support sensible-editor." >&2 + echo "If it does, please provide a patch." >&2 exit 1 ;; esac +if test "${state}" != 'present' && test "${state}" != 'absent' +then + echo 'Only "present" and "absent" are allowed for --state' >&2 + exit 1 +fi + +test "${state}" = 'absent' || export __require='__package/sensible-utils' + editor_path=$(cat "${__object}/explorer/editor_path") user_home=$(cat "${__object}/explorer/user_home") group=$(cat "${__object}/explorer/group") From c3af8a0cc0a2d10a4456f0382f491d6108f54df4 Mon Sep 17 00:00:00 2001 From: Darko Poljak Date: Thu, 10 Oct 2019 11:19:00 +0200 Subject: [PATCH 23/75] ++changelog --- docs/changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/changelog b/docs/changelog index 959ab8ae..db67e173 100644 --- a/docs/changelog +++ b/docs/changelog @@ -1,6 +1,9 @@ Changelog --------- +next: + * New types: __xymon_server, __xymon_apache, __xymon_config, __xymon_client (Thomas Eckert) + 6.0.1: 2019-10-08 * Type __group: Support OSes without getent (Dennis Camera) * Type __user: Support OSes without getent (Dennis Camera) From 522100b9fb2f80a1fe9cf7b3d946a432957ec739 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sat, 12 Oct 2019 11:07:39 +0200 Subject: [PATCH 24/75] [__sensible_editor] Refactor --- .../__sensible_editor/explorer/editor_path | 5 +- cdist/conf/type/__sensible_editor/manifest | 48 ++++++++++++------- 2 files changed, 34 insertions(+), 19 deletions(-) diff --git a/cdist/conf/type/__sensible_editor/explorer/editor_path b/cdist/conf/type/__sensible_editor/explorer/editor_path index 8b10b17b..b0de2f0a 100644 --- a/cdist/conf/type/__sensible_editor/explorer/editor_path +++ b/cdist/conf/type/__sensible_editor/explorer/editor_path @@ -35,7 +35,10 @@ case $("${__explorer}/os") in debian|devuan|ubuntu) has_alternatives=true - editors=$(update-alternatives --list editor) + + # NOTE: Old versions do not support `--list`, in this case ignore the errors. + # This will require an absolute path to be provided, though. + editors=$(update-alternatives --list editor 2>/dev/null) ;; *) # NOTE: RedHat has an alternatives system but it doesn't usually track diff --git a/cdist/conf/type/__sensible_editor/manifest b/cdist/conf/type/__sensible_editor/manifest index 56a6b02f..2ad8c54e 100644 --- a/cdist/conf/type/__sensible_editor/manifest +++ b/cdist/conf/type/__sensible_editor/manifest @@ -19,35 +19,47 @@ # along with cdist. If not, see . # +not_supported() { + echo "OS ${os} does not support __sensible_editor." >&2 + echo 'If it does, please provide a patch.' >&2 + exit 1 +} + os=$(cat "${__global}/explorer/os") state=$(cat "${__object}/parameter/state") user=$__object_id -case $os -in - debian|devuan|ubuntu) - test "${state}" != 'absent' \ - && __package sensible-utils --state present --type apt - ;; - centos|fedora|redhat|scientific) - test "${state}" != 'absent' \ - && __package sensible-utils --state present --type yum - ;; - *) - echo "OS ${os} does not support sensible-editor." >&2 - echo "If it does, please provide a patch." >&2 - exit 1 - ;; -esac - if test "${state}" != 'present' && test "${state}" != 'absent' then echo 'Only "present" and "absent" are allowed for --state' >&2 exit 1 fi -test "${state}" = 'absent' || export __require='__package/sensible-utils' +case $os +in + debian) + pkg_type='apt' + ;; + devuan) + pkg_type='apt' + ;; + ubuntu) + pkg_type='apt' + ;; + centos|fedora|redhat|scientific) + pkg_type='yum' + ;; + *) + not_supported + ;; +esac + +if test "${state}" != 'absent' +then + __package sensible-utils --state present --type "${pkg_type}" + export __require='__package/sensible-utils' +fi editor_path=$(cat "${__object}/explorer/editor_path") user_home=$(cat "${__object}/explorer/user_home") From e64d1710b531cdb2db9a8a0bcb1c5dd7d287f3fb Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sat, 12 Oct 2019 13:01:39 +0200 Subject: [PATCH 25/75] [__sensible_editor] Add support for old Ubuntu versions --- cdist/conf/type/__sensible_editor/manifest | 24 ++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/cdist/conf/type/__sensible_editor/manifest b/cdist/conf/type/__sensible_editor/manifest index 2ad8c54e..988f00e5 100644 --- a/cdist/conf/type/__sensible_editor/manifest +++ b/cdist/conf/type/__sensible_editor/manifest @@ -19,6 +19,21 @@ # along with cdist. If not, see . # +version_ge() { + awk -F '[^0-9.]' -v target="${1:?}" ' + function max(x, y) { return x > y ? x : y; } + BEGIN { + getline; + nx = split($1, x, "."); + ny = split(target, y, "."); + for (i = 1; i <= max(nx, ny); ++i) { + if (x[i] < y[i]) exit 1; + else if (x[i] > y[i]) exit 0; + else continue; + } + }' +} + not_supported() { echo "OS ${os} does not support __sensible_editor." >&2 echo 'If it does, please provide a patch.' >&2 @@ -26,6 +41,7 @@ not_supported() { } os=$(cat "${__global}/explorer/os") +os_version=$(cat "${__global}/explorer/os_version") state=$(cat "${__object}/parameter/state") user=$__object_id @@ -36,6 +52,8 @@ then exit 1 fi +package_name='sensible-utils' + case $os in debian) @@ -45,6 +63,7 @@ in pkg_type='apt' ;; ubuntu) + "${os_version}" | version_ge 10.04 || package_name='debianutils' pkg_type='apt' ;; centos|fedora|redhat|scientific) @@ -57,8 +76,9 @@ esac if test "${state}" != 'absent' then - __package sensible-utils --state present --type "${pkg_type}" - export __require='__package/sensible-utils' + __package "${package_name}" --state present \ + --type "${pkg_type}" + export __require="__package/${package_name}" fi editor_path=$(cat "${__object}/explorer/editor_path") From d11b1915471c5c0c0b530ae9cd022b293866e292 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sat, 12 Oct 2019 13:02:26 +0200 Subject: [PATCH 26/75] [__sensible_editor] Document supported operating systems in man page --- cdist/conf/type/__sensible_editor/man.rst | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/cdist/conf/type/__sensible_editor/man.rst b/cdist/conf/type/__sensible_editor/man.rst index 9e2245ef..d0f5356e 100644 --- a/cdist/conf/type/__sensible_editor/man.rst +++ b/cdist/conf/type/__sensible_editor/man.rst @@ -36,11 +36,19 @@ EXAMPLES LIMITATIONS ----------- -This type only works on operating systems on which the sensible-utils package -is available. -Hint: On RedHat-based systems setting up the EPEL repo might be necessary. +This type supports the following operating systems: +* Debian 8 (jessie) or later +* Devuan +* Ubuntu 8.10 (intrepid) or later +* RHEL/CentOS 7 or later (EPEL repo required) +* Fedora 21 or later +In general, this type could work on operating systems on which the +sensible-utils package is available. + +On old versions of Ubuntu the sensible-* utils are part of the +debianutils package. SEE ALSO -------- From f782a8547035decee53a745da56edb47490ba5a8 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sat, 12 Oct 2019 13:27:42 +0200 Subject: [PATCH 27/75] [__sensible_editor] Reword limitations paragraph of man page --- cdist/conf/type/__sensible_editor/man.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/cdist/conf/type/__sensible_editor/man.rst b/cdist/conf/type/__sensible_editor/man.rst index d0f5356e..4260a369 100644 --- a/cdist/conf/type/__sensible_editor/man.rst +++ b/cdist/conf/type/__sensible_editor/man.rst @@ -37,17 +37,17 @@ EXAMPLES LIMITATIONS ----------- -This type supports the following operating systems: -* Debian 8 (jessie) or later -* Devuan -* Ubuntu 8.10 (intrepid) or later -* RHEL/CentOS 7 or later (EPEL repo required) -* Fedora 21 or later +This type depends upon the :strong:`sensible-editor`\ (1) script which +is part of the sensible-utils package. -In general, this type could work on operating systems on which the -sensible-utils package is available. +Therefore, the following operating systems are supported: + * Debian 8 (jessie) or later + * Devuan + * Ubuntu 8.10 (intrepid) or later + * RHEL/CentOS 7 or later (EPEL repo required) + * Fedora 21 or later -On old versions of Ubuntu the sensible-* utils are part of the +Note: on old versions of Ubuntu the sensible-* utils are part of the debianutils package. SEE ALSO From 30c7d153e828afd52d1e76328622deb06aca6aaa Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sat, 12 Oct 2019 18:47:27 +0200 Subject: [PATCH 28/75] [__hostname] Only write to distro specific file when hostnamectl is missing --- cdist/conf/type/__hostname/gencode-remote | 7 +++++- cdist/conf/type/__hostname/manifest | 30 +++++++++++++++-------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index 64fff7ad..182d37ae 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -78,6 +78,11 @@ in echo "printf '%s\\n' '$name_should' > /etc/hostname" echo "hostname -F /etc/hostname" ;; + gentoo) + # NOTE: Writing the hostname to file is done in the manifest for OpenRC. + # For systemd hostnamectl should take care of that. + echo "hostname '$name_should'" + ;; macosx) echo "scutil --set HostName '$name_should'" ;; @@ -87,7 +92,7 @@ in echo "printf '%s\\n' '$name_should' > /etc/HOSTNAME" echo 'hostname -F /etc/HOSTNAME' ;; - centos|fedora|freebsd|gentoo|netbsd|openbsd|redhat|scientific) + centos|fedora|freebsd|netbsd|openbsd|redhat|scientific) # NOTE: Writing the hostname to file is done in the manifest. echo "hostname '$name_should'" ;; diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index 0ffd7678..58034a19 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -52,18 +52,28 @@ in : ;; centos|fedora|redhat|scientific) - __key_value sysconfig-hostname \ - --file /etc/sysconfig/network \ - --delimiter '=' --exact_delimiter \ - --key HOSTNAME \ - --value "\"$name_should\"" + if test -z "$(cat "$__object/explorer/has_hostnamectl")" + then + # Only write to /etc/sysconfig/network on non-systemd versions. + # On systemd-based versions this entry is ignored. + __key_value sysconfig-hostname \ + --file /etc/sysconfig/network \ + --delimiter '=' --exact_delimiter \ + --key HOSTNAME \ + --value "\"$name_should\"" + fi ;; gentoo) - __key_value confd-hostname \ - --file /etc/conf.d/hostname \ - --delimiter '=' --exact_delimiter \ - --key 'hostname' \ - --value "\"$name_should\"" + if test -z "$(cat "$__object/explorer/has_hostnamectl")" + then + # Only write to /etc/conf.d/hostname on OpenRC-based installations. + # On systemd use hostnamectl(1) in gencode-remote. + __key_value confd-hostname \ + --file /etc/conf.d/hostname \ + --delimiter '=' --exact_delimiter \ + --key 'hostname' \ + --value "\"$name_should\"" + fi ;; freebsd) __key_value rcconf-hostname \ From cee553a6dd27e2099e60763dec8bb9d061ef3aad Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sat, 12 Oct 2019 18:49:31 +0200 Subject: [PATCH 29/75] [__hostname] Improve systemd hostname setting This means we write to /etc/hostname before running hostnamectl, so that it can overwrite the file if it wants to. --- cdist/conf/type/__hostname/gencode-remote | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index 182d37ae..36593ef2 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -61,23 +61,29 @@ echo 'changed' >> "$__messages_out" # First try to set the hostname using hostnamectl, if available. if [ "$has_hostnamectl" ]; then # Allow hostnamectl to fail silently. - # Who the fuck invented a tool that needs dbus to set the hostname anyway ... + # Who the fuck invented a tool that needs dbus to set the hostname anyway… - cat < /etc/hostname - exit 0 -fi -EOF + # NOTE: We write the static hostname to /etc/hostname first in case + # hostnamectl fails. Fallback-code below will then adjust the running + # hostname below. + echo "printf '%s\\n' '$name_should' > /etc/hostname" + + echo "hostnamectl set-hostname '$name_should' && exit 0" fi # Use the good old way to set the hostname. Also if hostnamectl fails. case $os in - alpine|archlinux|coreos|debian|devuan|ubuntu) + alpine|archlinux|debian|devuan|ubuntu) echo "printf '%s\\n' '$name_should' > /etc/hostname" echo "hostname -F /etc/hostname" ;; + coreos|openbmc-phosphor) + # NOTE: systemd-only distros have the hostname already written above. + # But since hostamectl failed, we update the running hostname + # manually. + echo "hostname -F /etc/hostname" + ;; gentoo) # NOTE: Writing the hostname to file is done in the manifest for OpenRC. # For systemd hostnamectl should take care of that. From 00dd16d7c34f576e76893636dbffc3ea3091e62a Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 13 Oct 2019 10:13:20 +0200 Subject: [PATCH 30/75] [__sensible_editor] List available editors when an incorrect one is provided --- cdist/conf/type/__sensible_editor/explorer/editor_path | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cdist/conf/type/__sensible_editor/explorer/editor_path b/cdist/conf/type/__sensible_editor/explorer/editor_path index b0de2f0a..b6230545 100644 --- a/cdist/conf/type/__sensible_editor/explorer/editor_path +++ b/cdist/conf/type/__sensible_editor/explorer/editor_path @@ -28,7 +28,10 @@ die() { } editor_missing() { die "Editor '$1' is missing on the target system."; } -editor_no_alternative() { die "Editor '$1' is not in the alternatives list of the target system."; } +editor_no_alternative() { + die "Editor '$1' is not in the alternatives list of the target system." \ + "$(test "${editors}" && echo "\nPlease choose one of:\n\n${editors}")" +} case $("${__explorer}/os") @@ -63,7 +66,7 @@ in esac -if $has_alternatives && test "$(echo "${editors}" | wc -l)" -gt 0 +if $has_alternatives && test -n "${editors}" then IFS=' ' From 3bbb7b02d2c41fa4ff141d7e2a68d820136c3cd7 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 13 Oct 2019 10:14:05 +0200 Subject: [PATCH 31/75] [__sensible_editor] Allow to omit the --editor parameter if --state is absent --- cdist/conf/type/__sensible_editor/explorer/editor_path | 7 ++++++- cdist/conf/type/__sensible_editor/man.rst | 2 ++ cdist/conf/type/__sensible_editor/parameter/optional | 1 + cdist/conf/type/__sensible_editor/parameter/required | 1 - 4 files changed, 9 insertions(+), 2 deletions(-) delete mode 100644 cdist/conf/type/__sensible_editor/parameter/required diff --git a/cdist/conf/type/__sensible_editor/explorer/editor_path b/cdist/conf/type/__sensible_editor/explorer/editor_path index b6230545..d19a5b06 100644 --- a/cdist/conf/type/__sensible_editor/explorer/editor_path +++ b/cdist/conf/type/__sensible_editor/explorer/editor_path @@ -33,6 +33,9 @@ editor_no_alternative() { "$(test "${editors}" && echo "\nPlease choose one of:\n\n${editors}")" } +# No need to check for the path if the file is supposed to be removed. +test "$(cat "${__object}/parameter/state")" != 'absent' || exit 0 + case $("${__explorer}/os") in @@ -50,7 +53,9 @@ in ;; esac -editor=$(cat "${__object}/parameter/editor") +# Read --editor parameter and check its value since it is "optional" +editor=$(cat "${__object}/parameter/editor" 2>/dev/null) || true +test -n "${editor}" || die 'Please provide an --editor to configure.' case $editor in diff --git a/cdist/conf/type/__sensible_editor/man.rst b/cdist/conf/type/__sensible_editor/man.rst index 4260a369..b11aff46 100644 --- a/cdist/conf/type/__sensible_editor/man.rst +++ b/cdist/conf/type/__sensible_editor/man.rst @@ -18,6 +18,8 @@ editor Name or path of the editor to be selected. On systems other than Debian derivatives an absolute path is required. + It is permissible to omit this parameter if --state is absent. + OPTIONAL PARAMETERS ------------------- diff --git a/cdist/conf/type/__sensible_editor/parameter/optional b/cdist/conf/type/__sensible_editor/parameter/optional index ff72b5c7..ae55e240 100644 --- a/cdist/conf/type/__sensible_editor/parameter/optional +++ b/cdist/conf/type/__sensible_editor/parameter/optional @@ -1 +1,2 @@ +editor state diff --git a/cdist/conf/type/__sensible_editor/parameter/required b/cdist/conf/type/__sensible_editor/parameter/required deleted file mode 100644 index 85042acd..00000000 --- a/cdist/conf/type/__sensible_editor/parameter/required +++ /dev/null @@ -1 +0,0 @@ -editor From 8b0734f719de690742361a8756d25511f2c16029 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 13 Oct 2019 10:14:27 +0200 Subject: [PATCH 32/75] [__sensible_editor] Improve error message when a basename of an editor not in the alternatives is provided --- .../__sensible_editor/explorer/editor_path | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/cdist/conf/type/__sensible_editor/explorer/editor_path b/cdist/conf/type/__sensible_editor/explorer/editor_path index d19a5b06..8a5199c9 100644 --- a/cdist/conf/type/__sensible_editor/explorer/editor_path +++ b/cdist/conf/type/__sensible_editor/explorer/editor_path @@ -78,17 +78,24 @@ then if ! $is_abspath then # First, try to resolve the absolute path using $editors. - for e in $editors + while true do - if test "$(basename "${e}")" = "${editor}" - then - editor="${e}" - break - fi + for e in $editors + do + if test "$(basename "${e}")" = "${editor}" + then + editor="${e}" + break 2 # break out of both loops + fi + done + + # Iterating through alternatives did not yield a result + editor_no_alternative "${editor}" + break done fi - # Check if path is present + # Check if editor is present test -f "${editor}" || editor_missing "${editor}" for e in $editors From 9edf5e8fe03edbf01f2b02a2ab4a5643d31b21d2 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 13 Oct 2019 10:39:50 +0200 Subject: [PATCH 33/75] [__sensible_utils] Fix Ubuntu version detection --- cdist/conf/type/__sensible_editor/manifest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cdist/conf/type/__sensible_editor/manifest b/cdist/conf/type/__sensible_editor/manifest index 988f00e5..43344dac 100644 --- a/cdist/conf/type/__sensible_editor/manifest +++ b/cdist/conf/type/__sensible_editor/manifest @@ -63,7 +63,7 @@ in pkg_type='apt' ;; ubuntu) - "${os_version}" | version_ge 10.04 || package_name='debianutils' + (echo "${os_version}" | version_ge 10.04) || package_name='debianutils' pkg_type='apt' ;; centos|fedora|redhat|scientific) From 2bc26e398c33aa350b3fc214a6a1fc150f8f8f47 Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Sun, 13 Oct 2019 11:15:53 +0200 Subject: [PATCH 34/75] [__letsencrypt_cert] Add Arch Linux support --- cdist/conf/type/__letsencrypt_cert/manifest | 3 +++ docs/changelog | 1 + 2 files changed, 4 insertions(+) diff --git a/cdist/conf/type/__letsencrypt_cert/manifest b/cdist/conf/type/__letsencrypt_cert/manifest index 1d96ee1a..35962d31 100755 --- a/cdist/conf/type/__letsencrypt_cert/manifest +++ b/cdist/conf/type/__letsencrypt_cert/manifest @@ -7,6 +7,9 @@ if [ -z "${certbot_fullpath}" ]; then os_version="$(cat "${__global}/explorer/os_version")" case "$os" in + archlinux) + __package certbot + ;; debian) case "$os_version" in 8*) diff --git a/docs/changelog b/docs/changelog index db67e173..f1b37065 100644 --- a/docs/changelog +++ b/docs/changelog @@ -3,6 +3,7 @@ Changelog next: * New types: __xymon_server, __xymon_apache, __xymon_config, __xymon_client (Thomas Eckert) + * Type __letsencrypt_cert: Add Arch Linux support (Nico Schottelius) 6.0.1: 2019-10-08 * Type __group: Support OSes without getent (Dennis Camera) From 365974c4471e0df503d771e9b0d604a8f1883af8 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 13 Oct 2019 13:42:15 +0200 Subject: [PATCH 35/75] [__sensible_editor] Use int comparisons in version_ge --- cdist/conf/type/__sensible_editor/manifest | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cdist/conf/type/__sensible_editor/manifest b/cdist/conf/type/__sensible_editor/manifest index 43344dac..3a1926b6 100644 --- a/cdist/conf/type/__sensible_editor/manifest +++ b/cdist/conf/type/__sensible_editor/manifest @@ -27,8 +27,9 @@ version_ge() { nx = split($1, x, "."); ny = split(target, y, "."); for (i = 1; i <= max(nx, ny); ++i) { - if (x[i] < y[i]) exit 1; - else if (x[i] > y[i]) exit 0; + diff = int(x[i]) - int(y[i]); + if (diff < 0) exit 1; + else if (diff > 0) exit 0; else continue; } }' From 58eb474b017813f1781cf31836018f40fdf2f0ae Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 13 Oct 2019 13:49:51 +0200 Subject: [PATCH 36/75] [__sensible_editor] Add exists as a possible --state value --- cdist/conf/type/__sensible_editor/man.rst | 10 +++++++++- cdist/conf/type/__sensible_editor/manifest | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/cdist/conf/type/__sensible_editor/man.rst b/cdist/conf/type/__sensible_editor/man.rst index b11aff46..9b805e06 100644 --- a/cdist/conf/type/__sensible_editor/man.rst +++ b/cdist/conf/type/__sensible_editor/man.rst @@ -24,7 +24,15 @@ editor OPTIONAL PARAMETERS ------------------- state - Either "present" or "absent". Defaults to "present". + 'present', 'absent', or 'exists'. Defaults to 'present', where: + + present + the sensible-editor is exactly what is specified in --editor. + absent + no sensible-editor configuration is present. + exists + the sensible-editor will be set to what is specified in --editor, + unless there already is a configuration on the target system. EXAMPLES diff --git a/cdist/conf/type/__sensible_editor/manifest b/cdist/conf/type/__sensible_editor/manifest index 3a1926b6..d4883403 100644 --- a/cdist/conf/type/__sensible_editor/manifest +++ b/cdist/conf/type/__sensible_editor/manifest @@ -47,9 +47,9 @@ os_version=$(cat "${__global}/explorer/os_version") state=$(cat "${__object}/parameter/state") user=$__object_id -if test "${state}" != 'present' && test "${state}" != 'absent' +if test "${state}" != 'present' && test "${state}" != 'exists' && test "${state}" != 'absent' then - echo 'Only "present" and "absent" are allowed for --state' >&2 + echo 'Only "present", "exists", and "absent" are allowed for --state' >&2 exit 1 fi From 9567826dc19526037219558ddd81912e1cdcf129 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Mon, 14 Oct 2019 09:21:23 +0200 Subject: [PATCH 37/75] [__sensible_editor] Fix incorrect require variable --- cdist/conf/type/__sensible_editor/manifest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cdist/conf/type/__sensible_editor/manifest b/cdist/conf/type/__sensible_editor/manifest index d4883403..1cdb0c2c 100644 --- a/cdist/conf/type/__sensible_editor/manifest +++ b/cdist/conf/type/__sensible_editor/manifest @@ -79,7 +79,7 @@ if test "${state}" != 'absent' then __package "${package_name}" --state present \ --type "${pkg_type}" - export __require="__package/${package_name}" + export require="__package/${package_name}" fi editor_path=$(cat "${__object}/explorer/editor_path") From e462821e469f0f81d56f11f3e8a1637d3b0e2291 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Mon, 14 Oct 2019 11:29:49 +0200 Subject: [PATCH 38/75] [__sensible_editor] Fix SC2028 --- cdist/conf/type/__sensible_editor/explorer/editor_path | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cdist/conf/type/__sensible_editor/explorer/editor_path b/cdist/conf/type/__sensible_editor/explorer/editor_path index 8a5199c9..dcf63c9b 100644 --- a/cdist/conf/type/__sensible_editor/explorer/editor_path +++ b/cdist/conf/type/__sensible_editor/explorer/editor_path @@ -30,7 +30,7 @@ die() { editor_missing() { die "Editor '$1' is missing on the target system."; } editor_no_alternative() { die "Editor '$1' is not in the alternatives list of the target system." \ - "$(test "${editors}" && echo "\nPlease choose one of:\n\n${editors}")" + "$(test -n "${editors}" && printf '\nPlease choose one of:\n\n%s\n' "${editors}")" } # No need to check for the path if the file is supposed to be removed. From 3c86c175aa6c771dc4768214c7a3130aae932cb0 Mon Sep 17 00:00:00 2001 From: Darko Poljak Date: Mon, 14 Oct 2019 11:41:04 +0200 Subject: [PATCH 39/75] ++changelog --- docs/changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog b/docs/changelog index f1b37065..412614e5 100644 --- a/docs/changelog +++ b/docs/changelog @@ -4,6 +4,7 @@ Changelog next: * New types: __xymon_server, __xymon_apache, __xymon_config, __xymon_client (Thomas Eckert) * Type __letsencrypt_cert: Add Arch Linux support (Nico Schottelius) + * New type: __sensible_editor (Dennis Camera) 6.0.1: 2019-10-08 * Type __group: Support OSes without getent (Dennis Camera) From f5c725a57f212f733e0e73d238b64bf49feb5fce Mon Sep 17 00:00:00 2001 From: Ahmed Bilal <49-ahmedbilal@users.noreply.code.ungleich.ch> Date: Tue, 15 Oct 2019 20:19:04 +0200 Subject: [PATCH 40/75] Fix issues/Make prometheus+grafana+blackbox types compatible with Debian 10 --- cdist/conf/type/__grafana_dashboard/manifest | 9 ++++++--- cdist/conf/type/__letsencrypt_cert/manifest | 1 + cdist/conf/type/__prometheus_alertmanager/manifest | 3 ++- cdist/conf/type/__prometheus_exporter/manifest | 6 ++++-- cdist/conf/type/__prometheus_server/manifest | 7 ++++--- 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/cdist/conf/type/__grafana_dashboard/manifest b/cdist/conf/type/__grafana_dashboard/manifest index e652202b..d145c4c3 100755 --- a/cdist/conf/type/__grafana_dashboard/manifest +++ b/cdist/conf/type/__grafana_dashboard/manifest @@ -15,6 +15,10 @@ case $os in # Differntation not needed anymore apt_source_distribution=stable ;; + 10*) + # Differntation not needed anymore + apt_source_distribution=stable + ;; *) echo "Don't know how to install Grafana on $os $os_version. Send us a pull request!" >&2 exit 1 @@ -29,10 +33,9 @@ case $os in --uri https://packages.grafana.com/oss/deb \ --distribution $apt_source_distribution \ --component main - __package apt-transport-https - - require="$require __apt_source/grafana __package/apt-transport-https" __package grafana + require="$require __apt_source/grafana" __apt_update_index + require="$require __package/apt-transport-https __apt_update_index" __package grafana require="$require __package/grafana" __start_on_boot grafana-server require="$require __start_on_boot/grafana-server" __process grafana-server --start "service grafana-server start" ;; diff --git a/cdist/conf/type/__letsencrypt_cert/manifest b/cdist/conf/type/__letsencrypt_cert/manifest index 35962d31..bc039e44 100755 --- a/cdist/conf/type/__letsencrypt_cert/manifest +++ b/cdist/conf/type/__letsencrypt_cert/manifest @@ -39,6 +39,7 @@ if [ -z "${certbot_fullpath}" ]; then 10*) __package_apt certbot ;; + *) echo "Unsupported OS version: $os_version" >&2 exit 1 diff --git a/cdist/conf/type/__prometheus_alertmanager/manifest b/cdist/conf/type/__prometheus_alertmanager/manifest index 8ee818c3..cf410c44 100755 --- a/cdist/conf/type/__prometheus_alertmanager/manifest +++ b/cdist/conf/type/__prometheus_alertmanager/manifest @@ -30,6 +30,7 @@ if [ -f "$__object/parameter/install-from-backports" ]; then *) echo "--install-from-backports is only supported on Devuan -- ignoring." >&2 echo "Send a pull request if you require it." >&2 + exit 1 ;; esac else @@ -60,5 +61,5 @@ require="$require __directory/$storage_path $require_pkg" \ __config_file $CONF \ --source "$config" \ --group prometheus --mode 640 \ - --onchange "service prometheus-alertmanager reload" # TODO when a config-check tool is available, check config here + --onchange "service prometheus-alertmanager restart" # TODO when a config-check tool is available, check config here diff --git a/cdist/conf/type/__prometheus_exporter/manifest b/cdist/conf/type/__prometheus_exporter/manifest index b9e14531..f3930ac6 100644 --- a/cdist/conf/type/__prometheus_exporter/manifest +++ b/cdist/conf/type/__prometheus_exporter/manifest @@ -5,9 +5,11 @@ export GOBIN=/opt/gocode/bin # where to find go binaries exporter="$(cat "$__object/parameter/exporter")" [ -z "$exporter" ] && exporter="$__object_id" -__user prometheus --system +__user prometheus +require="__user/prometheus" __group prometheus +require="__group/prometheus" __user_groups prometheus --group prometheus -require="" +require="__user_groups/prometheus" case $exporter in node) TEXTFILES=/service/node-exporter/textfiles # path for the textfiles collector diff --git a/cdist/conf/type/__prometheus_server/manifest b/cdist/conf/type/__prometheus_server/manifest index 73a0799c..9756169e 100755 --- a/cdist/conf/type/__prometheus_server/manifest +++ b/cdist/conf/type/__prometheus_server/manifest @@ -38,7 +38,8 @@ if [ -f "$__object/parameter/install-from-backports" ]; then esac else __package prometheus - require_pkg="__package/prometheus" + __package prometheus-blackbox-exporter + require_pkg="__package/prometheus __package/prometheus-blackbox-exporter" fi ##### PREPARE PATHS AND SUCH ################################################ @@ -59,7 +60,7 @@ require="$require __directory/$storage_path $require_pkg" \ __config_file $CONF \ --source "$config" \ --group prometheus --mode 640 \ - --onchange "promtool check config $CONF && service prometheus reload" + --onchange "promtool check config $CONF && service prometheus restart" for file in $rule_files; do dest=$CONF_DIR/$(basename "$file") @@ -67,6 +68,6 @@ for file in $rule_files; do __config_file "$dest" \ --source "$file" \ --owner prometheus \ - --onchange "promtool check rules '$dest' && service prometheus reload" + --onchange "promtool check rules '$dest' && service prometheus restart" done From 6214408f2a44a53f848853b833a7b3a2d00ba813 Mon Sep 17 00:00:00 2001 From: Darko Poljak Date: Tue, 15 Oct 2019 20:19:57 +0200 Subject: [PATCH 41/75] ++changelog --- docs/changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog b/docs/changelog index 412614e5..24ba6b7e 100644 --- a/docs/changelog +++ b/docs/changelog @@ -5,6 +5,7 @@ next: * New types: __xymon_server, __xymon_apache, __xymon_config, __xymon_client (Thomas Eckert) * Type __letsencrypt_cert: Add Arch Linux support (Nico Schottelius) * New type: __sensible_editor (Dennis Camera) + * Types __grafana_dashboard, __prometheus_alertmanager, __prometheus_exporter, __prometheus_server: Support Debian 10 (Ahmed Bilal Khalid) 6.0.1: 2019-10-08 * Type __group: Support OSes without getent (Dennis Camera) From 778cd4ff0ecc2cdbdd5da1726621172ed6cc95e0 Mon Sep 17 00:00:00 2001 From: Darko Poljak Date: Thu, 17 Oct 2019 11:14:09 +0200 Subject: [PATCH 42/75] Release 6.0.2 --- docs/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog b/docs/changelog index 24ba6b7e..8e6e56ca 100644 --- a/docs/changelog +++ b/docs/changelog @@ -1,7 +1,7 @@ Changelog --------- -next: +6.0.2: 2019-10-17 * New types: __xymon_server, __xymon_apache, __xymon_config, __xymon_client (Thomas Eckert) * Type __letsencrypt_cert: Add Arch Linux support (Nico Schottelius) * New type: __sensible_editor (Dennis Camera) From 689b5a299265ae4626348073afe409336893a175 Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Thu, 17 Oct 2019 16:44:26 +0200 Subject: [PATCH 43/75] [letsencrypt_cert] add support for alpine --- cdist/conf/type/__letsencrypt_cert/manifest | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cdist/conf/type/__letsencrypt_cert/manifest b/cdist/conf/type/__letsencrypt_cert/manifest index 35962d31..4fa5f119 100755 --- a/cdist/conf/type/__letsencrypt_cert/manifest +++ b/cdist/conf/type/__letsencrypt_cert/manifest @@ -8,6 +8,9 @@ if [ -z "${certbot_fullpath}" ]; then case "$os" in archlinux) + __package certbot + ;; + alpine) __package certbot ;; debian) From 076133028f181d2fe0811dc9d915cfba36d07421 Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Thu, 17 Oct 2019 16:44:56 +0200 Subject: [PATCH 44/75] ++changelog --- docs/changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog b/docs/changelog index f1b37065..10aeafc9 100644 --- a/docs/changelog +++ b/docs/changelog @@ -4,6 +4,7 @@ Changelog next: * New types: __xymon_server, __xymon_apache, __xymon_config, __xymon_client (Thomas Eckert) * Type __letsencrypt_cert: Add Arch Linux support (Nico Schottelius) + * Type __letsencrypt_cert: Add Alpine support (Nico Schottelius) 6.0.1: 2019-10-08 * Type __group: Support OSes without getent (Dennis Camera) From fc28f58c77080e94215719ba4f2aa3f3162c8300 Mon Sep 17 00:00:00 2001 From: Darko Poljak Date: Thu, 17 Oct 2019 20:48:52 +0200 Subject: [PATCH 45/75] Generate version.py if it does not exist --- setup.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index ae651125..ee823df9 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,14 @@ from distutils.core import setup -import cdist import os import re +import subprocess + + +if not os.path.exists(os.path.join('cdist', 'version.py')): + subprocess.run([os.path.join('bin', 'build-helper'), 'version', ]) + + +import cdist def data_finder(data_dir): From 2d0af7b7ccc34d450a1b0cfb6532f6d2439ee7a4 Mon Sep 17 00:00:00 2001 From: Darko Poljak Date: Fri, 18 Oct 2019 10:24:11 +0200 Subject: [PATCH 46/75] Generate verions.py only if git cloned repo --- setup.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index ee823df9..2bb1e16d 100644 --- a/setup.py +++ b/setup.py @@ -1,11 +1,24 @@ from distutils.core import setup +from distutils.errors import DistutilsError import os import re import subprocess -if not os.path.exists(os.path.join('cdist', 'version.py')): - subprocess.run([os.path.join('bin', 'build-helper'), 'version', ]) +# We have it only if it is a git cloned repo. +build_helper = os.path.join('bin', 'build-helper') +# Version file path. +version_file = os.path.join('cdist', 'version.py') +# If we have build-helper we could be a git repo. +if os.path.exists(build_helper): + # Try to generate version.py. + rv = subprocess.run([build_helper, 'version', ]) + if rv.returncode != 0: + raise DistutilsError("Failed to generate {}".format(version_file)) +else: + # Otherwise, version.py should be present. + if not os.path.exists(version_file): + raise DistutilsError("Missing version file {}".format(version_file)) import cdist From f6a45808f9796630aa415209d711424d570e145e Mon Sep 17 00:00:00 2001 From: Darko Poljak Date: Fri, 18 Oct 2019 13:11:59 +0200 Subject: [PATCH 47/75] Fix building man pages command --- docs/src/cdist-upgrade.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/cdist-upgrade.rst b/docs/src/cdist-upgrade.rst index e57ed63c..67fd4934 100644 --- a/docs/src/cdist-upgrade.rst +++ b/docs/src/cdist-upgrade.rst @@ -11,7 +11,7 @@ To upgrade cdist in the current branch use git pull # Also update the manpages - ./build man + make man export MANPATH=$MANPATH:$(pwd -P)/doc/man If you stay on a version branche (i.e. 1.0, 1.1., ...), nothing should break. From ecc77e55ed7f7c76a9f2f1b6af6e5d7fd44bef99 Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Fri, 18 Oct 2019 19:45:19 +0200 Subject: [PATCH 48/75] Add timing hack / test1 --- hacking/timing-tests/benchmark-files.sh | 79 +++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 hacking/timing-tests/benchmark-files.sh diff --git a/hacking/timing-tests/benchmark-files.sh b/hacking/timing-tests/benchmark-files.sh new file mode 100644 index 00000000..c71d1c7e --- /dev/null +++ b/hacking/timing-tests/benchmark-files.sh @@ -0,0 +1,79 @@ +#!/bin/sh + +num=50000 +dsthost=localhost + +tmp=$(mktemp -d) +remote_tmp=${tmp}-remote + +cd "$tmp" + +create_files() { + i=0 + while [ $i -lt $num ]; do + echo $i > file-${i} + i=$((i+1)) + done +} + +delete_remote() { + ssh "${dsthost}" "rm -rf ${remote_tmp}" +} + + +tar_remote() { + cd "${tmp}" + tar c . | ssh "${dsthost}" "mkdir ${remote_tmp}; cd ${remote_tmp}; tar x" +} + +cdist_remote() +{ + ( + while [ $i -lt $num ]; do + echo __file ${remote_tmp}/file-${i} --source "${tmp}/file-${i}" + i=$((i+1)) + done + ) | cdist config -i - -vv "${dsthost}" + +} + +cdist_remote_parallel() +{ + ( + while [ $i -lt $num ]; do + echo __file ${remote_tmp}/file-${i} --source "${tmp}/file-${i}" + i=$((i+1)) + done + ) | cdist config -j10 -i - -vv "${dsthost}" + +} + +echo "Creating ${num} files" +time create_files + +echo "scping files" +time scp -r "${tmp}" "${dsthost}:$remote_tmp" >/dev/null + +echo "delete remote" +time delete_remote + +echo "taring files" +time tar_remote + +echo "delete remote" +time delete_remote + +echo "cdisting files" +time cdist_remote + +echo "delete remote" +time delete_remote + +echo "cdisting files (parallel)!" +time cdist_remote + +echo "delete remote" +time delete_remote + +echo "delete local" +rm -rf "$tmp" From 32c15f2ecbc9a4cf29258f9d8e28ef537bcc2ac1 Mon Sep 17 00:00:00 2001 From: Dmitry Bogatov Date: Sun, 20 Oct 2019 18:59:48 +0000 Subject: [PATCH 49/75] Fix spelling error in manpage --- cdist/conf/type/__xymon_client/man.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cdist/conf/type/__xymon_client/man.rst b/cdist/conf/type/__xymon_client/man.rst index 6f90c15b..6660b0ef 100644 --- a/cdist/conf/type/__xymon_client/man.rst +++ b/cdist/conf/type/__xymon_client/man.rst @@ -23,7 +23,7 @@ state 'present', 'absent', defaults to 'present'. servers - One or more IP adresses (space separated) of the Xymon server(s) to report + One or more IP addresses (space separated) of the Xymon server(s) to report to. While DNS-names are ok it is discouraged, defaults to 127.0.0.1. From 50a3130b0ae280526ac13fd8a3619717d29c57ac Mon Sep 17 00:00:00 2001 From: Darko Poljak Date: Mon, 21 Oct 2019 12:02:53 +0200 Subject: [PATCH 50/75] ++changelog --- docs/changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog b/docs/changelog index 176c5d40..5020c3c2 100644 --- a/docs/changelog +++ b/docs/changelog @@ -3,6 +3,7 @@ Changelog next: * Type __letsencrypt_cert: Add Alpine support (Nico Schottelius) + * Type __xymon_client: Fix spelling error in manpage (Dmitry Bogatov) 6.0.2: 2019-10-17 * New types: __xymon_server, __xymon_apache, __xymon_config, __xymon_client (Thomas Eckert) From c3b066c14733fd62969abd7a36e3ac881ed71227 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Thu, 24 Oct 2019 19:44:51 +0200 Subject: [PATCH 51/75] [__hostname] Check hostname length if getconf(1) is available --- cdist/conf/type/__hostname/explorer/max_len | 10 ++++++++++ cdist/conf/type/__hostname/manifest | 18 ++++++++++++------ 2 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 cdist/conf/type/__hostname/explorer/max_len diff --git a/cdist/conf/type/__hostname/explorer/max_len b/cdist/conf/type/__hostname/explorer/max_len new file mode 100644 index 00000000..97d8a142 --- /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) + +if test -n "${val}" -a "${val}" != 'undefined' +then + echo "${val}" +fi diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index 58034a19..2c6057d6 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -20,6 +20,13 @@ # 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 +} + + os=$(cat "$__global/explorer/os") if [ -f "$__object/parameter/name" ]; then name_should="$(cat "$__object/parameter/name")" @@ -38,12 +45,11 @@ else esac 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 -} +if test -n "${max_len}" -a "$(wc -c "${name_should}")" -gt "${max_len}"a +then + printf "Host name too long. Up to %u characters allowed.\n" "${max_len}" >&2 + exit 1 +fi case $os in From 629d443f5aa61eaf8d41c066011108e2b3b9caa1 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Fri, 25 Oct 2019 01:40:48 +0200 Subject: [PATCH 52/75] [__hostname] Fix "command not found" errors with old Bash --- cdist/conf/type/__hostname/explorer/has_hostnamectl | 2 +- cdist/conf/type/__hostname/explorer/max_len | 2 +- cdist/conf/type/__hostname/explorer/persistent_hostname | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) 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/max_len b/cdist/conf/type/__hostname/explorer/max_len index 97d8a142..fb863949 100644 --- a/cdist/conf/type/__hostname/explorer/max_len +++ b/cdist/conf/type/__hostname/explorer/max_len @@ -2,7 +2,7 @@ command -v getconf >/dev/null || exit 0 -val=$(getconf HOST_NAME_MAX 2>/dev/null) +val=$(getconf HOST_NAME_MAX 2>/dev/null) || exit 0 if test -n "${val}" -a "${val}" != 'undefined' then diff --git a/cdist/conf/type/__hostname/explorer/persistent_hostname b/cdist/conf/type/__hostname/explorer/persistent_hostname index 141c44fe..0feb0809 100755 --- a/cdist/conf/type/__hostname/explorer/persistent_hostname +++ b/cdist/conf/type/__hostname/explorer/persistent_hostname @@ -22,7 +22,7 @@ # # Firstly, check hostnamectl if available. -if command -v hostnamectl >/dev/null +if command -v hostnamectl >/dev/null 2>&1 then hostnamectl status --static && exit 0 fi @@ -32,10 +32,10 @@ fi case $("$__explorer/os") in alpine|archlinux|coreos|debian|devuan|ubuntu) - [ -f /etc/hostname ] && cat /etc/hostname + test -f /etc/hostname && cat /etc/hostname ;; centos|fedora|redhat|scientific) - [ -f /etc/sysconfig/network ] \ + test -f /etc/sysconfig/network \ && (. /etc/sysconfig/network && echo "$HOSTNAME") ;; freebsd) From d4313c7501b39c09e01cee530ec36a7452bcfc53 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Fri, 25 Oct 2019 01:41:26 +0200 Subject: [PATCH 53/75] [__hostname] Fix checking of maximum hostname length against sysconf(3) --- cdist/conf/type/__hostname/manifest | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index 2c6057d6..f3739f6c 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -28,6 +28,8 @@ not_supported() { os=$(cat "$__global/explorer/os") +max_len=$(cat "$__object/explorer/max_len") + if [ -f "$__object/parameter/name" ]; then name_should="$(cat "$__object/parameter/name")" else @@ -45,7 +47,7 @@ else esac fi -if test -n "${max_len}" -a "$(wc -c "${name_should}")" -gt "${max_len}"a +if test -n "${max_len}" -a "$(printf "${name_should}" | wc -c)" -gt "${max_len}" then printf "Host name too long. Up to %u characters allowed.\n" "${max_len}" >&2 exit 1 From b65ceba56936b581870754afa879284b686e057b Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Fri, 25 Oct 2019 02:16:43 +0200 Subject: [PATCH 54/75] [__hostame] Resolve shellcheck errors --- cdist/conf/type/__hostname/gencode-remote | 10 +++++----- cdist/conf/type/__hostname/manifest | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index 36593ef2..5942b2e3 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -55,18 +55,18 @@ fi ################################################################################ # Setup hostname # -echo 'changed' >> "$__messages_out" +echo 'changed' >>"$__messages_out" # First try to set the hostname using hostnamectl, if available. -if [ "$has_hostnamectl" ]; then +if [ -n "$has_hostnamectl" ]; then # Allow hostnamectl to fail silently. # Who the fuck invented a tool that needs dbus to set the hostname anyway… # NOTE: We write the static hostname to /etc/hostname first in case # hostnamectl fails. Fallback-code below will then adjust the running # hostname below. - echo "printf '%s\\n' '$name_should' > /etc/hostname" + echo "echo '$name_should' >/etc/hostname" echo "hostnamectl set-hostname '$name_should' && exit 0" fi @@ -75,7 +75,7 @@ fi case $os in alpine|archlinux|debian|devuan|ubuntu) - echo "printf '%s\\n' '$name_should' > /etc/hostname" + echo "echo '$name_should' >/etc/hostname" echo "hostname -F /etc/hostname" ;; coreos|openbmc-phosphor) @@ -95,7 +95,7 @@ in suse) # We write into /etc/HOSTNAME for backwards-compatibility. Modern SuSE # has hostnamectl anyway and symlinks /etc/HOSTNAME to /etc/hostname. - echo "printf '%s\\n' '$name_should' > /etc/HOSTNAME" + echo "echo '$name_should' >/etc/HOSTNAME" echo 'hostname -F /etc/HOSTNAME' ;; centos|fedora|freebsd|netbsd|openbsd|redhat|scientific) diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index f3739f6c..a4068cc2 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -47,7 +47,7 @@ else esac fi -if test -n "${max_len}" -a "$(printf "${name_should}" | wc -c)" -gt "${max_len}" +if test -n "${max_len}" -a "$(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 From 00852cb17d375da39ae585ec337da18a4f63587d Mon Sep 17 00:00:00 2001 From: Darko Poljak Date: Fri, 25 Oct 2019 14:26:08 +0200 Subject: [PATCH 55/75] ++changelog --- docs/changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog b/docs/changelog index 5020c3c2..cdc4e8f5 100644 --- a/docs/changelog +++ b/docs/changelog @@ -4,6 +4,7 @@ Changelog next: * Type __letsencrypt_cert: Add Alpine support (Nico Schottelius) * Type __xymon_client: Fix spelling error in manpage (Dmitry Bogatov) + * Build: Support pip from git (Darko Poljak, Ľubomír Kučera) 6.0.2: 2019-10-17 * New types: __xymon_server, __xymon_apache, __xymon_config, __xymon_client (Thomas Eckert) From 6eec5f87a4e2c3b006a2bded1e85ec565cd7acc6 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sat, 26 Oct 2019 17:11:35 +0200 Subject: [PATCH 56/75] [__hostame] Simplify and revert hostnamectl to be a last resort --- .../__hostname/explorer/persistent_hostname | 66 ---------------- cdist/conf/type/__hostname/gencode-remote | 73 +++++++---------- cdist/conf/type/__hostname/manifest | 78 +++++++++++++++---- 3 files changed, 90 insertions(+), 127 deletions(-) delete mode 100755 cdist/conf/type/__hostname/explorer/persistent_hostname diff --git a/cdist/conf/type/__hostname/explorer/persistent_hostname b/cdist/conf/type/__hostname/explorer/persistent_hostname deleted file mode 100755 index 0feb0809..00000000 --- a/cdist/conf/type/__hostname/explorer/persistent_hostname +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/sh -# -# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.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 . -# -# -# Retrieve the persistent hostname -# - -# Firstly, check hostnamectl if available. -if command -v hostnamectl >/dev/null 2>&1 -then - hostnamectl status --static && exit 0 -fi - -# In case hostnamectl is missing or failed: -# Fall back to alternative OS-specific approaches. -case $("$__explorer/os") -in - alpine|archlinux|coreos|debian|devuan|ubuntu) - test -f /etc/hostname && cat /etc/hostname - ;; - centos|fedora|redhat|scientific) - test -f /etc/sysconfig/network \ - && (. /etc/sysconfig/network && echo "$HOSTNAME") - ;; - freebsd) - (. /etc/rc.conf && echo "$hostname") - ;; - gentoo) - (. /etc/conf.d/hostname && echo "$hostname") - ;; - macosx) - scutil --get HostName 2>/dev/null - ;; - netbsd) - if grep -q '^hostname=' /etc/rc.conf - then - (. /etc/rc.conf && echo "$hostname") - elif [ -f /etc/myname ] - then - # Fall back to /etc/myname file - cat /etc/myname - fi - ;; - openbsd) - cat /etc/myname - ;; - suse) - cat /etc/HOSTNAME 2>/dev/null - ;; -esac diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index 5942b2e3..253bf5ea 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -22,17 +22,17 @@ os=$(cat "$__global/explorer/os") name_running=$(cat "$__global/explorer/hostname") -name_config=$(cat "$__object/explorer/persistent_hostname") has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl") -if [ -f "$__object/parameter/name" ]; then - name_should="$(cat "$__object/parameter/name")" +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|netbsd|openbsd) + centos|fedora|redhat|scientific|freebsd|macosx|netbsd|openbsd) # Hostname is FQDN name_should="${__target_host}" ;; @@ -43,66 +43,49 @@ else esac fi + ################################################################################ -# Check if the hostname is already correct +# Check if the (running) hostname is already correct # -if [ "$name_running" = "$name_should" ] \ - && [ -z "$name_config" -o "$name_config" = "$name_should" ] -then - exit 0 -fi +test "$name_running" != "$name_should" || exit 0 + ################################################################################ # Setup hostname # echo 'changed' >>"$__messages_out" - -# First try to set the hostname using hostnamectl, if available. -if [ -n "$has_hostnamectl" ]; then - # Allow hostnamectl to fail silently. - # Who the fuck invented a tool that needs dbus to set the hostname anyway… - - # NOTE: We write the static hostname to /etc/hostname first in case - # hostnamectl fails. Fallback-code below will then adjust the running - # hostname below. - echo "echo '$name_should' >/etc/hostname" - - echo "hostnamectl set-hostname '$name_should' && exit 0" -fi - -# Use the good old way to set the hostname. Also if hostnamectl fails. +# Use the good old way to set the hostname. case $os in - alpine|archlinux|debian|devuan|ubuntu) - echo "echo '$name_should' >/etc/hostname" - echo "hostname -F /etc/hostname" + alpine|debian|devuan|ubuntu) + echo 'hostname -F /etc/hostname' ;; - coreos|openbmc-phosphor) - # NOTE: systemd-only distros have the hostname already written above. - # But since hostamectl failed, we update the running hostname - # manually. - echo "hostname -F /etc/hostname" - ;; - gentoo) - # NOTE: Writing the hostname to file is done in the manifest for OpenRC. - # For systemd hostnamectl should take care of that. + archlinux|centos|fedora|redhat|scientific|freebsd|netbsd|gentoo) echo "hostname '$name_should'" ;; macosx) echo "scutil --set HostName '$name_should'" ;; + openbsd) + echo 'hostname -F /etc/myname' + ;; suse) - # We write into /etc/HOSTNAME for backwards-compatibility. Modern SuSE - # has hostnamectl anyway and symlinks /etc/HOSTNAME to /etc/hostname. - echo "echo '$name_should' >/etc/HOSTNAME" echo 'hostname -F /etc/HOSTNAME' ;; - centos|fedora|freebsd|netbsd|openbsd|redhat|scientific) - # NOTE: Writing the hostname to file is done in the manifest. - echo "hostname '$name_should'" - ;; *) - echo "echo 'Unsupported OS: $os' >&2; exit 1" + # 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. + # Who invented a tool that needs dbus to set the hostname anyway… + + 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 diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index a4068cc2..78adc20b 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -20,18 +20,25 @@ # along with cdist. If not, see . # +onchange_cmd="echo changed >>'$__messages_out'" + 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 + 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 - --onchange "$onchange_cmd" +} os=$(cat "$__global/explorer/os") max_len=$(cat "$__object/explorer/max_len") +has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl") -if [ -f "$__object/parameter/name" ]; then - name_should="$(cat "$__object/parameter/name")" +if test -s "$__object/parameter/name" +then + name_should=$(cat "$__object/parameter/name") else case $os in @@ -49,18 +56,37 @@ fi if test -n "${max_len}" -a "$(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 + printf "Host name too long. Up to %u characters allowed.\n" "${max_len}" >&2 + exit 1 fi case $os in - archlinux|debian|suse|ubuntu|devuan|coreos|alpine|macosx) + alpine|debian|devuan|ubuntu) + echo "$name_should" \ + | __file /etc/hostname --source - --onchange "$onchange_cmd" + ;; + macosx) # handled in gencode-remote : ;; + archlinux) + if test -n "$has_hostnamectl" + then + set_hostname_systemd "$name_should" + else + # Only for ancient ArchLinux, write to /etc/rc.conf on pre-systemd + # versions. + __key_value sysconfig-hostname \ + --file /etc/rc.conf \ + --delimiter '=' --exact_delimiter \ + --key 'HOSTNAME' \ + --value "\"$name_should\"" \ + --onchange "$onchange_cmd" + fi + ;; centos|fedora|redhat|scientific) - if test -z "$(cat "$__object/explorer/has_hostnamectl")" + if test -z "$has_hostnamectl" then # Only write to /etc/sysconfig/network on non-systemd versions. # On systemd-based versions this entry is ignored. @@ -68,11 +94,14 @@ in --file /etc/sysconfig/network \ --delimiter '=' --exact_delimiter \ --key HOSTNAME \ - --value "\"$name_should\"" + --value "\"$name_should\"" \ + --onchange "$onchange_cmd" + else + set_hostname_systemd "$name_should" fi ;; gentoo) - if test -z "$(cat "$__object/explorer/has_hostnamectl")" + if test -z "$has_hostnamectl" then # Only write to /etc/conf.d/hostname on OpenRC-based installations. # On systemd use hostnamectl(1) in gencode-remote. @@ -81,6 +110,8 @@ in --delimiter '=' --exact_delimiter \ --key 'hostname' \ --value "\"$name_should\"" + else + set_hostname_systemd "$name_should" fi ;; freebsd) @@ -88,22 +119,37 @@ in --file /etc/rc.conf \ --delimiter '=' --exact_delimiter \ --key 'hostname' \ - --value "\"$name_should\"" + --value "\"$name_should\"" \ + --onchange "$onchange_cmd" ;; netbsd) __key_value rcconf-hostname \ --file /etc/rc.conf \ --delimiter '=' --exact_delimiter \ --key 'hostname' \ - --value "\"$name_should\"" + --value "\"$name_should\"" \ + --onchange "$onchange_cmd" + # To avoid confusion, ensure that the hostname is only stored once __file /etc/myname --state absent ;; openbsd) - echo "$name_should" | __file /etc/myname --source - + echo "$name_should" \ + | __file /etc/myname --source - --onchange "$onchange_cmd" + ;; + suse) + # We write into /etc/HOSTNAME for backwards-compatibility. Modern SuSE + # has hostnamectl anyway and symlinks /etc/HOSTNAME to /etc/hostname. + echo "$name_should" \ + | __file /etc/HOSTNAME --source - --onchange "$onchange_cmd" ;; *) - # On other operating systems we fall back to hostnamectl if available… - test -n "$(cat "$__object/explorer/has_hostnamectl")" || 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 From e7279680edbd645249eca3c2d363d233dd1cd269 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sat, 26 Oct 2019 17:12:08 +0200 Subject: [PATCH 57/75] [__hostname/man.rst] Add link to RFC 1178 --- cdist/conf/type/__hostname/man.rst | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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%%.*}) From f276813f7f1fe0af7775bb41adf37dcd3d377992 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sat, 26 Oct 2019 17:25:44 +0200 Subject: [PATCH 58/75] [__hostname] Remove incorrectly sent messages (again) The --onchage sent the message on the target where messaging is not supported. Now the result is that a "changed" message is only emitted when the running hostname changes, not when the persistent hostname changes. --- cdist/conf/type/__hostname/manifest | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index 78adc20b..49591926 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -20,8 +20,6 @@ # along with cdist. If not, see . # -onchange_cmd="echo changed >>'$__messages_out'" - 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 @@ -29,7 +27,7 @@ not_supported() { } set_hostname_systemd() { - echo "$1" | __file /etc/hostname --source - --onchange "$onchange_cmd" + echo "$1" | __file /etc/hostname --source - } os=$(cat "$__global/explorer/os") @@ -64,7 +62,7 @@ case $os in alpine|debian|devuan|ubuntu) echo "$name_should" \ - | __file /etc/hostname --source - --onchange "$onchange_cmd" + | __file /etc/hostname --source - ;; macosx) # handled in gencode-remote @@ -81,8 +79,7 @@ in --file /etc/rc.conf \ --delimiter '=' --exact_delimiter \ --key 'HOSTNAME' \ - --value "\"$name_should\"" \ - --onchange "$onchange_cmd" + --value "\"$name_should\"" fi ;; centos|fedora|redhat|scientific) @@ -94,8 +91,7 @@ in --file /etc/sysconfig/network \ --delimiter '=' --exact_delimiter \ --key HOSTNAME \ - --value "\"$name_should\"" \ - --onchange "$onchange_cmd" + --value "\"$name_should\"" else set_hostname_systemd "$name_should" fi @@ -119,29 +115,27 @@ in --file /etc/rc.conf \ --delimiter '=' --exact_delimiter \ --key 'hostname' \ - --value "\"$name_should\"" \ - --onchange "$onchange_cmd" + --value "\"$name_should\"" ;; netbsd) __key_value rcconf-hostname \ --file /etc/rc.conf \ --delimiter '=' --exact_delimiter \ --key 'hostname' \ - --value "\"$name_should\"" \ - --onchange "$onchange_cmd" + --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 - --onchange "$onchange_cmd" + | __file /etc/myname --source - ;; suse) # We write into /etc/HOSTNAME for backwards-compatibility. Modern SuSE # has hostnamectl anyway and symlinks /etc/HOSTNAME to /etc/hostname. echo "$name_should" \ - | __file /etc/HOSTNAME --source - --onchange "$onchange_cmd" + | __file /etc/HOSTNAME --source - ;; *) # On other operating systems we fall back to systemd's hostnamectl if available… From cbae534af58859da299972b95d9f5c05040c33e5 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sat, 26 Oct 2019 21:01:54 +0200 Subject: [PATCH 59/75] [__hostname] Patch for modern ArchLinux without hostname(1) --- cdist/conf/type/__hostname/gencode-remote | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index 253bf5ea..6840ca9e 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -61,7 +61,12 @@ in alpine|debian|devuan|ubuntu) echo 'hostname -F /etc/hostname' ;; - archlinux|centos|fedora|redhat|scientific|freebsd|netbsd|gentoo) + archlinux) + echo 'command -v hostnamectl >/dev/null 2>&1' \ + "&& hostnamectl set-hostname '$name_should'" \ + "|| hostname '$name_should'" + ;; + centos|fedora|redhat|scientific|freebsd|netbsd|gentoo) echo "hostname '$name_should'" ;; macosx) From 0ec52fd1bd1a5b20aa5d8503da62d18b43399403 Mon Sep 17 00:00:00 2001 From: Ahmed Bilal <49-ahmedbilal@users.noreply.code.ungleich.ch> Date: Sun, 27 Oct 2019 18:11:08 +0100 Subject: [PATCH 60/75] alpine support added in __package_update_index --- cdist/conf/type/__package_update_index/explorer/currage | 3 +++ cdist/conf/type/__package_update_index/explorer/type | 1 + cdist/conf/type/__package_update_index/gencode-remote | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/cdist/conf/type/__package_update_index/explorer/currage b/cdist/conf/type/__package_update_index/explorer/currage index 3539b8e1..cfb778d5 100644 --- a/cdist/conf/type/__package_update_index/explorer/currage +++ b/cdist/conf/type/__package_update_index/explorer/currage @@ -34,6 +34,9 @@ case "$type" in echo 0 fi ;; + alpine) + echo 0 + ;; *) echo "Your specified type ($type) is currently not supported." >&2 echo "Please contribute an implementation for it if you can." >&2 ;; diff --git a/cdist/conf/type/__package_update_index/explorer/type b/cdist/conf/type/__package_update_index/explorer/type index 35254c5f..c98e1e67 100644 --- a/cdist/conf/type/__package_update_index/explorer/type +++ b/cdist/conf/type/__package_update_index/explorer/type @@ -26,6 +26,7 @@ else amazon|scientific|centos|fedora|redhat) echo "yum" ;; debian|ubuntu|devuan) echo "apt" ;; archlinux) echo "pacman" ;; + alpine) echo "apk" ;; *) echo "Don't know how to manage packages on: $os" >&2 exit 1 diff --git a/cdist/conf/type/__package_update_index/gencode-remote b/cdist/conf/type/__package_update_index/gencode-remote index 738d38eb..9b2ecba2 100755 --- a/cdist/conf/type/__package_update_index/gencode-remote +++ b/cdist/conf/type/__package_update_index/gencode-remote @@ -47,6 +47,10 @@ case "$type" in echo "pacman --noprogressbar --sync --refresh" echo "pacman package database synced (age was: $currage)" >> "$__messages_out" ;; + alpine) + echo "apk update" + echo "apk package database updated." + ;; *) echo "Don't know how to manage packages for type: $type" >&2 exit 1 From 39b320a19a14c1e7653ff14e7e824f2d1ac762cb Mon Sep 17 00:00:00 2001 From: Darko Poljak Date: Sun, 27 Oct 2019 19:12:52 +0100 Subject: [PATCH 61/75] ++changelog --- docs/changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog b/docs/changelog index cdc4e8f5..d4b55336 100644 --- a/docs/changelog +++ b/docs/changelog @@ -5,6 +5,7 @@ next: * Type __letsencrypt_cert: Add Alpine support (Nico Schottelius) * Type __xymon_client: Fix spelling error in manpage (Dmitry Bogatov) * Build: Support pip from git (Darko Poljak, Ľubomír Kučera) + * Type __package_update_index: Add Alpine support (Ahmed Bilal Khalid) 6.0.2: 2019-10-17 * New types: __xymon_server, __xymon_apache, __xymon_config, __xymon_client (Thomas Eckert) From b9571a2bbdf3cb9cca52444f5da2db16327801c9 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sat, 26 Oct 2019 22:17:08 +0200 Subject: [PATCH 62/75] [__hostname] Add support for Void Linux --- cdist/conf/type/__hostname/gencode-remote | 2 +- cdist/conf/type/__hostname/manifest | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index 6840ca9e..90312fad 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -66,7 +66,7 @@ in "&& hostnamectl set-hostname '$name_should'" \ "|| hostname '$name_should'" ;; - centos|fedora|redhat|scientific|freebsd|netbsd|gentoo) + centos|fedora|redhat|scientific|freebsd|netbsd|gentoo|void) echo "hostname '$name_should'" ;; macosx) diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index 49591926..4465038d 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -60,7 +60,7 @@ fi case $os in - alpine|debian|devuan|ubuntu) + alpine|debian|devuan|ubuntu|void) echo "$name_should" \ | __file /etc/hostname --source - ;; From 66c85230a0aa35a64323e2cfc68490ef87055670 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 27 Oct 2019 13:16:05 +0100 Subject: [PATCH 63/75] [__hostname] Make __key_value names more meaningful --- cdist/conf/type/__hostname/manifest | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index 4465038d..64f90492 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -61,12 +61,7 @@ fi case $os in alpine|debian|devuan|ubuntu|void) - echo "$name_should" \ - | __file /etc/hostname --source - - ;; - macosx) - # handled in gencode-remote - : + echo "$name_should" | __file /etc/hostname --source - ;; archlinux) if test -n "$has_hostnamectl" @@ -75,7 +70,8 @@ in else # Only for ancient ArchLinux, write to /etc/rc.conf on pre-systemd # versions. - __key_value sysconfig-hostname \ + # There are some versions which use /etc/hostname but not systemd. It is unclear which ones these are. + __key_value '/etc/rc.conf:HOSTNAME' \ --file /etc/rc.conf \ --delimiter '=' --exact_delimiter \ --key 'HOSTNAME' \ @@ -87,7 +83,7 @@ in then # Only write to /etc/sysconfig/network on non-systemd versions. # On systemd-based versions this entry is ignored. - __key_value sysconfig-hostname \ + __key_value '/etc/sysconfig/network:HOSTNAME' \ --file /etc/sysconfig/network \ --delimiter '=' --exact_delimiter \ --key HOSTNAME \ @@ -101,7 +97,7 @@ in then # Only write to /etc/conf.d/hostname on OpenRC-based installations. # On systemd use hostnamectl(1) in gencode-remote. - __key_value confd-hostname \ + __key_value '/etc/conf.d/hostname:hostname' \ --file /etc/conf.d/hostname \ --delimiter '=' --exact_delimiter \ --key 'hostname' \ @@ -111,14 +107,18 @@ in fi ;; freebsd) - __key_value rcconf-hostname \ + __key_value '/etc/rc.conf:hostname' \ --file /etc/rc.conf \ --delimiter '=' --exact_delimiter \ --key 'hostname' \ --value "\"$name_should\"" ;; + macosx) + # handled in gencode-remote + : + ;; netbsd) - __key_value rcconf-hostname \ + __key_value '/etc/rc.conf:hostname' \ --file /etc/rc.conf \ --delimiter '=' --exact_delimiter \ --key 'hostname' \ @@ -128,14 +128,12 @@ in __file /etc/myname --state absent ;; openbsd) - echo "$name_should" \ - | __file /etc/myname --source - + echo "$name_should" | __file /etc/myname --source - ;; suse) # We write into /etc/HOSTNAME for backwards-compatibility. Modern SuSE # has hostnamectl anyway and symlinks /etc/HOSTNAME to /etc/hostname. - echo "$name_should" \ - | __file /etc/HOSTNAME --source - + echo "$name_should" | __file /etc/HOSTNAME --source - ;; *) # On other operating systems we fall back to systemd's hostnamectl if available… From 5eb9fec550907d3ae65ce9ef62849093afc7c9f4 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 27 Oct 2019 15:14:09 +0100 Subject: [PATCH 64/75] [__hostname] Add support for Slackware --- cdist/conf/type/__hostname/gencode-remote | 2 +- cdist/conf/type/__hostname/manifest | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index 90312fad..1e798036 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -66,7 +66,7 @@ in "&& hostnamectl set-hostname '$name_should'" \ "|| hostname '$name_should'" ;; - centos|fedora|redhat|scientific|freebsd|netbsd|gentoo|void) + centos|fedora|redhat|scientific|freebsd|netbsd|gentoo|slackware|void) echo "hostname '$name_should'" ;; macosx) diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index 64f90492..8b4d26b1 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -41,7 +41,7 @@ else case $os in # RedHat-derivatives and BSDs - centos|fedora|redhat|scientific|freebsd|netbsd|openbsd) + centos|fedora|redhat|scientific|freebsd|netbsd|openbsd|slackware) # Hostname is FQDN name_should="${__target_host}" ;; @@ -130,6 +130,12 @@ in 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 - + ;; suse) # We write into /etc/HOSTNAME for backwards-compatibility. Modern SuSE # has hostnamectl anyway and symlinks /etc/HOSTNAME to /etc/hostname. From c939bd6bf676b186ced82bebf925ce83b7c79df4 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 27 Oct 2019 20:12:10 +0100 Subject: [PATCH 65/75] [__hostname] Small fixes --- cdist/conf/type/__hostname/gencode-remote | 5 +---- cdist/conf/type/__hostname/manifest | 6 +++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index 1e798036..4532bacf 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -66,15 +66,12 @@ in "&& hostnamectl set-hostname '$name_should'" \ "|| hostname '$name_should'" ;; - centos|fedora|redhat|scientific|freebsd|netbsd|gentoo|slackware|void) + centos|fedora|redhat|scientific|freebsd|netbsd|openbsd|gentoo|slackware|void) echo "hostname '$name_should'" ;; macosx) echo "scutil --set HostName '$name_should'" ;; - openbsd) - echo 'hostname -F /etc/myname' - ;; suse) echo 'hostname -F /etc/HOSTNAME' ;; diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index 8b4d26b1..31d43264 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -52,7 +52,7 @@ else esac fi -if test -n "${max_len}" -a "$(printf '%s' "${name_should}" | wc -c)" -gt "${max_len}" +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 @@ -69,8 +69,8 @@ in set_hostname_systemd "$name_should" else # 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. + # versions. There are some versions which use /etc/hostname but not + # systemd. It is unclear which ones these are. __key_value '/etc/rc.conf:HOSTNAME' \ --file /etc/rc.conf \ --delimiter '=' --exact_delimiter \ From 5fcd4bc09f1f34c20c53a9a5cc25d084d86c36d8 Mon Sep 17 00:00:00 2001 From: Darko Poljak Date: Thu, 31 Oct 2019 08:56:13 +0100 Subject: [PATCH 66/75] Release 6.0.3 --- docs/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog b/docs/changelog index d4b55336..1ba56e73 100644 --- a/docs/changelog +++ b/docs/changelog @@ -1,7 +1,7 @@ Changelog --------- -next: +6.0.3: 2019-10-31 * Type __letsencrypt_cert: Add Alpine support (Nico Schottelius) * Type __xymon_client: Fix spelling error in manpage (Dmitry Bogatov) * Build: Support pip from git (Darko Poljak, Ľubomír Kučera) From 7b8f1f09d9cbe6d0da721597055b68e2efd9980d Mon Sep 17 00:00:00 2001 From: Kirill Miazine Date: Fri, 8 Nov 2019 09:00:29 +0100 Subject: [PATCH 67/75] Correct a couple of typos. --- docs/src/cdist-real-world.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/cdist-real-world.rst b/docs/src/cdist-real-world.rst index 8ccb0fc9..ba118d63 100644 --- a/docs/src/cdist-real-world.rst +++ b/docs/src/cdist-real-world.rst @@ -27,7 +27,7 @@ for that. This type will: - configure nginx. Our type will not create the actual python application. Its intention is only -to configure hosing for specified user and project. It is up to the user to +to configure hosting for specified user and project. It is up to the user to create his/her applications. So let's start. @@ -480,7 +480,7 @@ Creating python bottle application We now need to create Bottle application. As you remember from the beginning of this walkthrough our type does not create the actual python application, -its intention is only to configure hosing for specified user and project. +its intention is only to configure hosting for specified user and project. It is up to the user to create his/her applications. Become app user:: From 8b0686766a0f6f6eb4219ec54a68ef270703bff5 Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Fri, 8 Nov 2019 13:27:38 +0100 Subject: [PATCH 68/75] ++changes --- docs/changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/changelog b/docs/changelog index 1ba56e73..1c56ec74 100644 --- a/docs/changelog +++ b/docs/changelog @@ -1,6 +1,9 @@ Changelog --------- +next: + * Doc: Fix typos (Kirill Miazine) + 6.0.3: 2019-10-31 * Type __letsencrypt_cert: Add Alpine support (Nico Schottelius) * Type __xymon_client: Fix spelling error in manpage (Dmitry Bogatov) From 88947d45b3a6a8496b568e0880a94afd6553bbed Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sat, 16 Nov 2019 14:57:27 +0100 Subject: [PATCH 69/75] [__hostname] Add support for Solaris --- cdist/conf/type/__hostname/gencode-remote | 3 +++ cdist/conf/type/__hostname/manifest | 3 +++ 2 files changed, 6 insertions(+) diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index 4532bacf..f06ee145 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -72,6 +72,9 @@ in macosx) echo "scutil --set HostName '$name_should'" ;; + solaris) + echo "uname -S '$name_should'" + ;; suse) echo 'hostname -F /etc/HOSTNAME' ;; diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index 31d43264..6b26cada 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -136,6 +136,9 @@ in # 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) # We write into /etc/HOSTNAME for backwards-compatibility. Modern SuSE # has hostnamectl anyway and symlinks /etc/HOSTNAME to /etc/hostname. From a885082534dedb56a78f2b2ee7c3ff7a20348b59 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sat, 16 Nov 2019 14:58:30 +0100 Subject: [PATCH 70/75] [__hostname] Little bit of clean up --- cdist/conf/type/__hostname/manifest | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index 6b26cada..f2f65155 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -52,7 +52,7 @@ else esac fi -if test -n "${max_len}" && test "$(printf '%s' "${name_should}" | wc -c)" -gt "${max_len}" +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 @@ -93,10 +93,10 @@ in 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 - # Only write to /etc/conf.d/hostname on OpenRC-based installations. - # On systemd use hostnamectl(1) in gencode-remote. __key_value '/etc/conf.d/hostname:hostname' \ --file /etc/conf.d/hostname \ --delimiter '=' --exact_delimiter \ From f18bdd1fade8b2caea80bdeb4d0c099f421a3d18 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sat, 16 Nov 2019 23:31:58 +0100 Subject: [PATCH 71/75] [__hostname] Comment out support for ancient ArchLinux versions --- cdist/conf/type/__hostname/manifest | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index f2f65155..7e36cb53 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -68,14 +68,17 @@ in 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. - __key_value '/etc/rc.conf:HOSTNAME' \ - --file /etc/rc.conf \ - --delimiter '=' --exact_delimiter \ - --key 'HOSTNAME' \ - --value "\"$name_should\"" + # systemd. It is unclear which ones these are. + + # __key_value '/etc/rc.conf:HOSTNAME' \ + # --file /etc/rc.conf \ + # --delimiter '=' --exact_delimiter \ + # --key 'HOSTNAME' \ + # --value "\"$name_should\"" fi ;; centos|fedora|redhat|scientific) From a45e30612301a93e1156f97309c9b0f090c4a4ce Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Sun, 17 Nov 2019 14:46:37 +0100 Subject: [PATCH 72/75] [__hostname] Better support different versions of SuSE --- cdist/conf/type/__hostname/gencode-remote | 16 +++++--- cdist/conf/type/__hostname/manifest | 50 ++++++++++++++++++----- 2 files changed, 50 insertions(+), 16 deletions(-) diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote index f06ee145..ae224611 100755 --- a/cdist/conf/type/__hostname/gencode-remote +++ b/cdist/conf/type/__hostname/gencode-remote @@ -66,7 +66,7 @@ in "&& hostnamectl set-hostname '$name_should'" \ "|| hostname '$name_should'" ;; - centos|fedora|redhat|scientific|freebsd|netbsd|openbsd|gentoo|slackware|void) + centos|fedora|redhat|scientific|freebsd|netbsd|openbsd|gentoo|void) echo "hostname '$name_should'" ;; macosx) @@ -75,8 +75,11 @@ in solaris) echo "uname -S '$name_should'" ;; - suse) - echo 'hostname -F /etc/HOSTNAME' + 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'" ;; *) # Fall back to set the hostname using hostnamectl, if available. @@ -84,11 +87,12 @@ in 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. - # Who invented a tool that needs dbus to set the hostname anyway… + # 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" + echo "test \"\$(hostname)\" = \"\$(cat /etc/hostname)\"" \ + " || hostname -F /etc/hostname" else printf "echo 'Unsupported OS: %s' >&2\nexit 1\n" "$os" fi diff --git a/cdist/conf/type/__hostname/manifest b/cdist/conf/type/__hostname/manifest index 7e36cb53..75a90027 100755 --- a/cdist/conf/type/__hostname/manifest +++ b/cdist/conf/type/__hostname/manifest @@ -31,6 +31,9 @@ set_hostname_systemd() { } os=$(cat "$__global/explorer/os") +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") @@ -45,8 +48,21 @@ else # 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 + # Hostname is only first component of FQDN on all other systems. name_should="${__target_host%%.*}" ;; esac @@ -127,28 +143,42 @@ in --key 'hostname' \ --value "\"$name_should\"" - # To avoid confusion, ensure that the hostname is only stored once + # 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. + # 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) - # We write into /etc/HOSTNAME for backwards-compatibility. Modern SuSE - # has hostnamectl anyway and symlinks /etc/HOSTNAME to /etc/hostname. - echo "$name_should" | __file /etc/HOSTNAME --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 - ;; *) - # On other operating systems we fall back to systemd's hostnamectl if available… + # On other operating systems we fall back to systemd's + # hostnamectl if available… if test -n "$has_hostnamectl" then set_hostname_systemd "$name_should" From c1633d9301c053b604cceb39b57621636e80b9cd Mon Sep 17 00:00:00 2001 From: Darko Poljak Date: Tue, 19 Nov 2019 21:29:45 +0100 Subject: [PATCH 73/75] Release 6.0.4 --- docs/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog b/docs/changelog index 1c56ec74..b0a52eb6 100644 --- a/docs/changelog +++ b/docs/changelog @@ -1,7 +1,7 @@ Changelog --------- -next: +6.0.4: 2019-11-19 * Doc: Fix typos (Kirill Miazine) 6.0.3: 2019-10-31 From 6c67d7194af8166882da6169e681ca5a7836d534 Mon Sep 17 00:00:00 2001 From: Darko Poljak Date: Tue, 19 Nov 2019 21:53:40 +0100 Subject: [PATCH 74/75] ++changelog --- docs/changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/changelog b/docs/changelog index b0a52eb6..49416d6d 100644 --- a/docs/changelog +++ b/docs/changelog @@ -1,6 +1,9 @@ Changelog --------- +next: + * 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) From 0bc00477aeea206e80a1e1fb887024ca2e43d0ab Mon Sep 17 00:00:00 2001 From: Darko Poljak Date: Tue, 19 Nov 2019 21:54:56 +0100 Subject: [PATCH 75/75] Release 6.1.0 --- docs/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog b/docs/changelog index 49416d6d..2342b0b0 100644 --- a/docs/changelog +++ b/docs/changelog @@ -1,7 +1,7 @@ Changelog --------- -next: +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