aboutsummaryrefslogtreecommitdiff
path: root/lib/util.bash
diff options
context:
space:
mode:
authorPatrick Spek <p.spek@tyil.nl>2020-03-22 11:48:23 +0100
committerPatrick Spek <p.spek@tyil.nl>2020-03-22 11:48:23 +0100
commit1d983e9f934bf6aeb9333c763fe1a603b8d8e5c4 (patch)
treeff96afaf569e8669a28ba35e85a1441621117d0b /lib/util.bash
Initial commit
Diffstat (limited to 'lib/util.bash')
-rw-r--r--lib/util.bash118
1 files changed, 118 insertions, 0 deletions
diff --git a/lib/util.bash b/lib/util.bash
new file mode 100644
index 0000000..025aeba
--- /dev/null
+++ b/lib/util.bash
@@ -0,0 +1,118 @@
+#!/usr/bin/env bash
+
+# Log a message as error, and exit the program. This is intended for serious
+# issues that prevent the script from running correctly. The exit code can be
+# specified with -i, or will default to 1.
+die() {
+ local OPTIND
+ local code
+
+ while getopts ":i:" opt
+ do
+ case "$opt" in
+ i) code=$OPTARG ;;
+ esac
+ done
+
+ shift $(( OPTIND -1 ))
+
+ alert "$@"
+ exit ${code:-1}
+}
+
+# Fetch a file from an URL. Using this function introduces a dependency on curl.
+fetch() {
+ local OPTIND
+ local buffer
+
+ while getopts ":o:" opt
+ do
+ case "$opt" in
+ o) buffer=$OPTARG ;;
+ esac
+ done
+
+ shift $(( OPTIND -1 ))
+
+ [[ -z $buffer ]] && buffer="$(tempfile)"
+
+ notice "Downloading $1 to $buffer"
+
+ # TODO: Switch to the most appropriate downloading tool, depending on
+ # what is available.
+
+ curl -Ls "$1" > "$buffer"
+ local exit_code=$?
+
+ printf "%s" "$buffer"
+
+ return $exit_code
+}
+
+# Read a particular value from a key/value configuration file. Using this
+# function introduces a dependency on awk.
+config_etc_kv() {
+ local file="$BASEDIR/etc/$1"
+ shift
+
+ if [[ ! -f $file ]]
+ then
+ crit "Tried to read value for $1 from $file, but $file does not exist"
+ return
+ fi
+
+ debug "Reading value for $1 from $file"
+
+ awk -F= '$1 == "'"$1"'" { print $NF }' "$file"
+}
+
+# Create a temporary directory. Similar to tempfile, but you'll get a directory
+# instead.
+tempdir() {
+ local dir="$(mktemp -d)"
+
+ # Ensure the file was created succesfully
+ if [[ ! -d "$dir" ]]
+ then
+ die "Failed to create a temporary directory at $dir"
+ fi
+
+ debug "Temporary file created at $dir"
+
+ printf "$dir"
+}
+
+# Create a temporary file. In usage, this is no different from mktemp itself,
+# however, it will apply additional checks to ensure everything is going
+# correctly, and the files will be cleaned up automatically at the end.
+tempfile() {
+ local OPTIND
+ local extension="tmp"
+
+ while getopts ":x:" opt
+ do
+ case "$opt" in
+ x) extension=$OPTARG ;;
+ esac
+ done
+
+ shift $(( OPTIND -1 ))
+
+ local file="$(mktemp --suffix ".$extension")"
+
+ # Ensure the file was created succesfully
+ if [[ ! -f "$file" ]]
+ then
+ die "Failed to create a temporary file at $file"
+ fi
+
+ debug "Temporary file created at $file"
+
+ printf "$file"
+}
+
+export -f config_etc_kv
+export -f die
+export -f fetch
+export -f tempdir
+export -f tempfile