aboutsummaryrefslogtreecommitdiff
path: root/lib/util.bash
diff options
context:
space:
mode:
authorPatrick Spek <p.spek@tyil.nl>2022-04-19 15:32:55 +0200
committerPatrick Spek <p.spek@tyil.nl>2022-04-19 15:32:55 +0200
commit685ccfd9e0d0d89b404129eb4ec068c923b375bc (patch)
treebadeca675a972e07315642f570da0bb6fee82c47 /lib/util.bash
parent9376473a6ff9ca276aa4650a7103d631005affd9 (diff)
Add documentation
Diffstat (limited to 'lib/util.bash')
-rw-r--r--lib/util.bash268
1 files changed, 4 insertions, 264 deletions
diff --git a/lib/util.bash b/lib/util.bash
index 79bac92..8a119f2 100644
--- a/lib/util.bash
+++ b/lib/util.bash
@@ -4,6 +4,10 @@
#
# SPDX-License-Identifier: AGPL-3.0-or-later
+. "$BASHTARD_LIBDIR/util/config.bash"
+. "$BASHTARD_LIBDIR/util/pkg.bash"
+. "$BASHTARD_LIBDIR/util/svc.bash"
+
# Change the working directory. In usage, this is the same as using cd,
# however, it will make additional checks to ensure everything is going fine.
chgdir() {
@@ -11,70 +15,6 @@ chgdir() {
cd -- "$1" || die "Failed to change directory to $1"
}
-# Read a particular value from a key/value configuration file. Using this
-# function introduces a dependency on awk.
-config() {
- config_for "${BASHTARD_PLATFORM[fqdn]}" "$@"
-}
-
-config_for() {
- local host=$1 ; shift
- local key=$1 ; shift
- local default=$1 ; shift
-
- local default
- local file
- local files
-
- files=(
- "$BASHTARD_ETCDIR/hosts.d/$host"
- "$BASHTARD_ETCDIR/os.d/${BASHTARD_PLATFORM[key]}"
- "$BASHTARD_ETCDIR/defaults"
- )
-
- if [[ -n "$BASHTARD_PLAYBOOK" ]]
- then
- debug "bashtard/config_for" "BASHTARD_PLAYBOOK=$BASHTARD_PLAYBOOK, adding etc entries"
- files+=(
- "$BASHTARD_ETCDIR/playbooks.d/$BASHTARD_PLAYBOOK/etc/os.d"
- "$BASHTARD_ETCDIR/playbooks.d/$BASHTARD_PLAYBOOK/etc/defaults"
- )
- fi
-
- files+=(
- "$BASHTARD_SHAREDIR/os.d/${BASHTARD_PLATFORM[key]}"
- "$BASHTARD_SHAREDIR/defaults"
- )
-
- # Check configuration files
- for file in "${files[@]}"
- do
- debug "bashtard/config_for" "Checking for '$key' in '$file'"
-
- [[ ! -f $file ]] && continue
-
- value="$(awk -F= '$1 == "'"$key"'" { print $NF }' "$file")"
-
- if [[ -n $value ]]
- then
- debug "bashtard/config_for" "Found $key=$value in $file"
-
- printf "%s" "$value"
- return
- fi
- done
-
- # Return default value
- if [[ -n $default ]]
- then
- printf "%s" "$default"
- return
- fi
-
- # Error
- alert "bashtard/config_for" "No configuration value for $key"
-}
-
# Create a datetime stamp. This is a wrapper around the date utility, ensuring
# that the date being formatted is always in UTC and respect SOURCE_DATE_EPOCH,
# if it is set.
@@ -186,206 +126,6 @@ join_args() {
printf "%s" "$*"
}
-# OS independent package management
-pkg() {
- local system="bashtard/pkg"
- local action=$1 ; shift
- local pkg
-
- pkg="$(config "pkg.$1")" ; shift
-
- if [[ -z $pkg ]]
- then
- crit "$system" "No package name for $pkg"
- return 1
- fi
-
- if [[ "$(type -t "pkg_$action")" != "function" ]]
- then
- crit "$system" "Invalid package manager action $action"
- return 1
- fi
-
- "pkg_$action" "$pkg"
-}
-
-pkg_install() {
- local system="bashtard/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" ;;
- *)
- crit "$system" "No package manager configured for ${BASHTARD_PLATFORM[key]}"
- return 1
- ;;
- esac
-
- notice "$system" "$*"
- # shellcheck disable=SC2068
- $@
-}
-
-pkg_uninstall() {
- local system="bashtard/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" ;;
- *)
- crit "$system" "No package manager configured for ${BASHTARD_PLATFORM[key]}"
- return 1
- ;;
- esac
-
- notice "$system" "$*"
- # shellcheck disable=SC2068
- $@
-}
-
-# OS independent service management.
-svc() {
- local system="bashtard/svc"
-
- local service
- local action
-
- action=$1 ; shift
- service="$(config "svc.$1")" ; shift
-
- if [[ -z $service ]]
- then
- crit "$system" "No service name for $service"
- return 1
- fi
-
- if [[ "$(type -t "svc_$action")" != "function" ]]
- then
- crit "$system" "Invalid service manager action $action"
- return 1
- fi
-
- "svc_$action" "$service"
-}
-
-svc_disable() {
- local system="bashtard/svc/disable"
-
- local service=$1
-
- case "${BASHTARD_PLATFORM[key]}" in
- linux-gentoo) set -- /sbin/rc-update del "$service" ;;
- linux-*) set -- systemctl disable "$service" ;;
- *)
- crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}"
- return 1
- esac
-
- notice "$system" "$*"
- # shellcheck disable=SC2068
- $@
-}
-
-svc_enable() {
- local system="bashtard/svc/enable"
-
- local service=$1
-
- case "${BASHTARD_PLATFORM[key]}" in
- linux-gentoo) set -- /sbin/rc-update add "$service" ;;
- linux-*) set -- systemctl enable "$service" ;;
- *)
- crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}"
- return 1
- esac
-
- notice "$system" "$*"
- # shellcheck disable=SC2068
- $@
-}
-
-svc_reload() {
- local system="bashtard/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" ;;
- *)
- crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}"
- return 1
- esac
-
- notice "$system" "$*"
- # shellcheck disable=SC2068
- $@
-}
-
-svc_restart() {
- local system="bashtard/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" ;;
- *)
- crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}"
- return 1
- esac
-
- notice "$system" "$*"
- # shellcheck disable=SC2068
- $@
-}
-
-svc_start() {
- local system="bashtard/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" ;;
- *)
- crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}"
- return 1
- esac
-
- notice "$system" "$*"
- # shellcheck disable=SC2068
- $@
-}
-
-svc_stop() {
- local system="bashtard/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" ;;
- *)
- crit "$system" "No service manager configured for ${BASHTARD_PLATFORM[key]}"
- return 1
- esac
-
- notice "$system" "$*"
- # shellcheck disable=SC2068
- $@
-}
-
file_template()
{
local file="$BASHTARD_ETCDIR/playbooks.d/$BASHTARD_PLAYBOOK/share/$1" ; shift