From 56c654808d84630e82f60ae0376cf3e5b54274c2 Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Fri, 4 Oct 2019 20:35:14 +0200 Subject: [PATCH] [__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 ################################################################################