diff options
Diffstat (limited to 'lib/util')
-rw-r--r-- | lib/util/config.bash | 34 | ||||
-rw-r--r-- | lib/util/pkg.bash | 18 | ||||
-rw-r--r-- | lib/util/svc.bash | 107 |
3 files changed, 118 insertions, 41 deletions
diff --git a/lib/util/config.bash b/lib/util/config.bash index 4727706..ff20bd0 100644 --- a/lib/util/config.bash +++ b/lib/util/config.bash @@ -17,7 +17,11 @@ config_subkeys() { config_for() { local host=$1 ; shift local key=$1 ; shift - local default=$1 ; shift + + # Use a variable definition test to define default, in order to ensure + # it is _not_ defined if no argument for it was passed, but _is_ + # defined even if an empty string was passed. + test -v 1 && { local default=$1 ; shift ; } local default local file @@ -51,7 +55,26 @@ config_for() { [[ ! -f $file ]] && continue - value="$(awk -F= '$1 == "'"$key"'" { print $NF }' "$file")" + # Check if the lookup is a reference variable, defined by using + # &= instead of just a single = as seperator. If this exists, + # do a new config_for lookup, this time using the value as the + # key for the new lookup. + value="$(awk -F= '$1 == "'"$key"'&" { print $0 }' "$file" | cut -d'=' -f 2-)" + + if [[ -n $value ]] + then + debug "bashtard/config_for" "Found reference for $key to $value in $file" + + printf "%s" "$(config_for "$host" "$value")" + return + fi + + # Use awk to find the right line, then use cut to get the + # actual value. Cutting it out with awk _is_ possible, but + # comes with whitespace issues or having to deal with values + # containing the seperator (=), so using cut is much simpler + # and easier to understand. + value="$(awk -F= '$1 == "'"$key"'" { print $0 }' "$file" | cut -d'=' -f 2-)" if [[ -n $value ]] then @@ -62,8 +85,8 @@ config_for() { fi done - # Return default value - if [[ -n $default ]] + # Return default value, if one has been defined + if test -v default then printf "%s" "$default" return @@ -115,6 +138,9 @@ config_subkeys_for() { subkey="$(awk -F. '{ print $1 }' <<< "${result#"$key."}")" + # Remove trailing ampersand if it exists + [[ "${subkey: -1}" == "&" ]] && subkey="${subkey:0:-1}" + debug "bashtard/config_subkeys" "Found '$subkey' as subkey of '$key' through '$result'" results+=("$subkey") done < <(grep "^$key\." "$file" | awk -F= '{ print $1 }') diff --git a/lib/util/pkg.bash b/lib/util/pkg.bash index 1538c3e..1433815 100644 --- a/lib/util/pkg.bash +++ b/lib/util/pkg.bash @@ -33,10 +33,11 @@ pkg_install() { local app=$1 ; shift case "${BASHTARD_PLATFORM[key]}" in - freebsd) set -- /usr/sbin/pkg install -y "$app" ;; - linux-debian*) set -- apt install -y "$app" ;; - linux-gentoo) set -- emerge --ask=n --update "$app" ;; - linux-ubuntu) set -- apt install -y "$app" ;; + freebsd) set -- /usr/sbin/pkg install -y "$app" ;; + linux-alpine_linux) set -- apk add --no-cache "$app" ;; + linux-debian*) set -- apt install -y "$app" ;; + linux-gentoo) set -- emerge --ask=n --update "$app" ;; + linux-ubuntu) set -- apt install -y "$app" ;; *) crit "$system" "No package manager configured for ${BASHTARD_PLATFORM[key]}" return 1 @@ -54,10 +55,11 @@ pkg_uninstall() { local app=$1 ; shift case "${BASHTARD_PLATFORM[key]}" in - freebsd) set -- /usr/sbin/pkg uninstall -y "$app" ;; - linux-debian*) set -- apt remove -y "$app" ;; - linux-gentoo) set -- emerge --ask=n --unmerge "$app" ;; - linux-ubuntu) set -- apt remove -y "$app" ;; + freebsd) set -- /usr/sbin/pkg uninstall -y "$app" ;; + linux-alpine_linux) set -- apk del "$app" ;; + linux-debian*) set -- apt remove -y "$app" ;; + linux-gentoo) set -- emerge --ask=n --unmerge "$app" ;; + linux-ubuntu) set -- apt remove -y "$app" ;; *) crit "$system" "No package manager configured for ${BASHTARD_PLATFORM[key]}" return 1 diff --git a/lib/util/svc.bash b/lib/util/svc.bash index fd65e4c..1b1ecbc 100644 --- a/lib/util/svc.bash +++ b/lib/util/svc.bash @@ -34,11 +34,18 @@ svc_disable() { local service=$1 - case "${BASHTARD_PLATFORM[key]}" in - linux-gentoo) set -- /sbin/rc-update del "$service" ;; - linux-*) set -- systemctl disable "$service" ;; + case "${BASHTARD_PLATFORM[os]}" in + linux) + case "${BASHTARD_PLATFORM[init]}" in + openrc) set -- /sbin/rc-update del "$service" ;; + systemd) set -- systemctl disable "$service" ;; + *) + crit "$system" "No service manager support to disable with ${BASHTARD_PLATFORM[init]}" + return 1 + esac + ;; *) - crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}" + crit "$system" "No service manager support to enable for ${BASHTARD_PLATFORM[key]}" return 1 esac @@ -53,7 +60,16 @@ svc_enable() { local service=$1 local rc - case "${BASHTARD_PLATFORM[key]}" in + case "${BASHTARD_PLATFORM[os]}" in + linux) + case "${BASHTARD_PLATFORM[init]}" in + openrc) set -- /sbin/rc-update add "$service" ;; + systemd) set -- systemctl enable "$service" ;; + *) + crit "$system" "No service manager support to enable with ${BASHTARD_PLATFORM[init]}" + return 1 + esac + ;; freebsd) rc="$(printf '%s_enable="YES"' "$service")" @@ -63,12 +79,9 @@ svc_enable() { fi return 0 - ;; - linux-gentoo) set -- /sbin/rc-update add "$service" ;; - linux-*) set -- systemctl enable "$service" ;; *) - crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}" + crit "$system" "No service manager support to enable for ${BASHTARD_PLATFORM[key]}" return 1 esac @@ -82,12 +95,21 @@ svc_reload() { local service=$1 - case "${BASHTARD_PLATFORM[key]}" in - freebsd) set -- service "$service" reload ;; - linux-gentoo) set -- /sbin/rc-service "$service" reload ;; - linux-*) set -- systemctl reload "$service" ;; + case "${BASHTARD_PLATFORM[os]}" in + linux) + case "${BASHTARD_PLATFORM[init]}" in + openrc) set -- /sbin/rc-service "$service" reload ;; + systemd) set -- systemctl reload "$service" ;; + *) + crit "$system" "No service manager support to reload with ${BASHTARD_PLATFORM[init]}" + return 1 + esac + ;; + freebsd) + set -- service "$service" reload + ;; *) - crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}" + crit "$system" "No service manager support to reload for ${BASHTARD_PLATFORM[key]}" return 1 esac @@ -101,12 +123,21 @@ svc_restart() { local service=$1 - case "${BASHTARD_PLATFORM[key]}" in - freebsd) set -- service "$service" restart ;; - linux-gentoo) set -- /sbin/rc-service "$service" restart ;; - linux-*) set -- systemctl restart "$service" ;; + case "${BASHTARD_PLATFORM[os]}" in + linux) + case "${BASHTARD_PLATFORM[init]}" in + openrc) set -- /sbin/rc-service "$service" restart ;; + systemd) set -- systemctl restart "$service" ;; + *) + crit "$system" "No service manager support to restart with ${BASHTARD_PLATFORM[init]}" + return 1 + esac + ;; + freebsd) + set -- service "$service" restart + ;; *) - crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}" + crit "$system" "No service manager support to restart for ${BASHTARD_PLATFORM[key]}" return 1 esac @@ -120,12 +151,21 @@ svc_start() { local service=$1 - case "${BASHTARD_PLATFORM[key]}" in - freebsd) set -- service "$service" start ;; - linux-gentoo) set -- /sbin/rc-service "$service" start ;; - linux-*) set -- systemctl start "$service" ;; + case "${BASHTARD_PLATFORM[os]}" in + linux) + case "${BASHTARD_PLATFORM[init]}" in + openrc) set -- /sbin/rc-service "$service" start ;; + systemd) set -- systemctl start "$service" ;; + *) + crit "$system" "No service manager support to start with ${BASHTARD_PLATFORM[init]}" + return 1 + esac + ;; + freebsd) + set -- service "$service" start + ;; *) - crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}" + crit "$system" "No service manager support to start for ${BASHTARD_PLATFORM[key]}" return 1 esac @@ -139,12 +179,21 @@ svc_stop() { local service=$1 - case "${BASHTARD_PLATFORM[key]}" in - freebsd) set -- service "$service" stop ;; - linux-gentoo) set -- /sbin/rc-service "$service" stop ;; - linux-*) set -- systemctl stop "$service" ;; + case "${BASHTARD_PLATFORM[os]}" in + linux) + case "${BASHTARD_PLATFORM[init]}" in + openrc) set -- /sbin/rc-service "$service" stop ;; + systemd) set -- systemctl stop "$service" ;; + *) + crit "$system" "No service manager support to stop with ${BASHTARD_PLATFORM[init]}" + return 1 + esac + ;; + freebsd) + set -- service "$service" stop + ;; *) - crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}" + crit "$system" "No service manager support to stop for ${BASHTARD_PLATFORM[key]}" return 1 esac |