This repository has been archived on 2026-05-18. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
disco/universe/bin/disco-param
Andrew Kesterson 3cfffd192e Moved disco colorization into a function, can be used standalone with "client/bin/disco colorize" on stdin.
Fixed disco-fs-diff to only use rsync, sed, grep, etc to produce the filesystem changelog, python script is gone

Minor fixups to other scripts
2012-08-17 19:24:25 -04:00

143 lines
3.9 KiB
Bash
Executable File

#!/bin/bash
PARAMROOT=/var/disco/parameters
function check_names_regex() {
echo $1 | grep -E '^[a-zA-Z0-9_\-\.\/]*$' >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "error: Invalid characters in pathname '$1'. Valid pathname characters are [a-zA-Z0-9_-.\/]*." >&2
exit 1
fi
echo "$1" | grep "^/" >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "error: Pathnames cannot start with /" >&2
exit 1
fi
}
function disco_delete() {
if [ "$1" == "--help" ] || [ "$1" == "" ]; then
echo "info: disco-param delete [PATH_NAME] [optarg]... deletes parameter trees (recursively, if optarg is '-r'). PATH_NAME must not be empty." >&2
exit 1
fi
check_names_regex "$1" || exit 1
cd ${PARAMROOT}
if [ "$2" == "-r" ]; then
OUT=$(rm -rf ${1} 2>&1)
elif [ -d ${PARAMROOT}/${1} ]; then
# We want the error message from rmdir to have just the key path, not the param root in it
OUT=$(rmdir ${1} 2>&1)
else
OUT=$(rm -f ${1} 2>&1)
fi
if [ "$OUT" != "" ]; then
echo "error: $OUT" >&2
exit 1
fi
exit 0
}
function disco_set() {
if [ "$1" == "--help" ]; then
echo "info: disco-param set [PATH_NAME] [optarg] ... reads from stdin and sets PATH_NAME, unless [optarg] is {}, in which case a new hierarchy is made" >&2
echo "info: disco-param set - .... Reads lines from stdin, with each line being PATH_NAME=VALUE, and performs 'set' for each pair." >&2
exit 1
fi
if [ "$1" == "-" ]; then
RETVAL=0
while read LINE
do
PATHNAME=$(echo $LINE | cut -d = -f 1)
VALUE=$(echo $LINE | cut -d = -f 2-| sed s/"^\s*"//g)
echo $PATHNAME = $VALUE
if [ "$VALUE" == "{}" ]; then
disco_set $PATHNAME "{}"
else
echo $VALUE | disco_set $PATHNAME
fi
RETVAL=$(expr $RETVAL + $?)
done
exit $RETVAL
fi
check_names_regex "$1" || exit 1
mkdir -p $(dirname ${PARAMROOT}/${1})
if [ "$2" == "" ]; then
cat > ${PARAMROOT}/${1}
elif [ "$2" == "{}" ]; then
if [ -e ${PARAMROOT}/${1} ] && [ ! -d ${PARAMROOT}/${1} ]; then
echo "error: ${1} : existing type '$(stat -c '%F' ${PARAMROOT}/${1})' cannot be overriden with type 'directory'." >&2
exit 1
fi
mkdir -p ${PARAMROOT}/${1}
else
echo "error: Unknown optarg '$2'." >&2
exit 1
fi
}
function disco_keys() {
if [ "$1" == "--help" ]; then
echo "info: disco-param keys [PATH_NAME] ... returns a list of all keys present in the toplevel of the given directory" >&2
exit 1
fi
VARPATH=$(echo $1 | sed s/"^\/*"//g)
check_names_regex "$VARPATH" || exit 1
if [ -d ${PARAMROOT}/${VARPATH} ]; then
# Iterate over the path like a key/value dictionary
cd ${PARAMROOT}/${VARPATH}
for file in $(ls 2>/dev/null);
do
echo $file
done
exit 0
else
echo "error: $VARPATH does not exist or is not a directory" >&2
exit 1
fi
}
function disco_dump() {
if [ "$1" == "--help" ]; then
echo "info: disco-param dump [PATH_NAME] ... Print each key/value pair in the tree in PATH_NAME = VALUE format, one per line." >&2
exit 1
fi
VARPATH=$(echo $1 | sed s/"^\/*"//g)
check_names_regex "$VARPATH" || exit 1
cd $PARAMROOT
find $VARPATH | sed s/"^\.\/*"//g | grep -v "^$" | while read line; do if [ -d $line ]; then echo $line = '{}' ; else echo $line = $(cat $line); fi; done | sort -u
exit 0
}
function disco_get() {
if [ "$1" == "--help" ]; then
echo "info: disco-param get [PATH_NAME] ... Get the value of the given path name." >&2
exit 1
fi
VARPATH=$(echo $1 | sed s/"^\/*"//g)
check_names_regex "$VARPATH" || exit 1
cd $PARAMROOT
if [ -d ${PARAMROOT}/${VARPATH} ]; then
echo '{}'
else
cat ${PARAMROOT}/${VARPATH}
fi
exit $?
}
if [ "$1" == "--help" ]; then
echo "info: disco-param [CMD] [OPTIONS] ... execute the given command with the given options, and return zero on success."
echo
$0 set --help
$0 get --help
$0 dump --help
$0 delete --help
$0 keys --help
exit 0
fi
disco_$1 "$2" "$3" "$4" "$5" "$6"
exit $?
# LocalWords: regex