aboutsummaryrefslogtreecommitdiff
path: root/lib/util
diff options
context:
space:
mode:
Diffstat (limited to 'lib/util')
-rw-r--r--lib/util/config.bash34
-rw-r--r--lib/util/pkg.bash18
-rw-r--r--lib/util/svc.bash107
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