#!/bin/bash # $HeadURL$ $LastChangedRevision$ set -e { [[ $0 =~ ^/ ]] && PROGNAME_FULL=$0; } || PROGNAME_FULL=$(cd $PWD/$(dirname $0) && pwd)/$(basename $0) PROGNAME=$(basename $0) #PROGNAME=${PROGNAME_FULL//\//_} # MODROOT MODROOT=${MDI_MODROOT:-$(while [ ! -d lib/helpers -a $PWD != / ]; do cd ..; done; echo $PWD)} [ -d $MODROOT/lib/helpers ] || { echo "$PROGNAME: ERROR: can't find components (do you need to set 'MDI_MODROOT'?)" >&2; exit 1; } # Load config and support functions . $MODROOT/include/mdi.sh . $MODROOT/etc/mdi.sh # Globals main() { local CMDLINE # Defaults for options VERBOSELEVEL=2 HELPER_HOOKS_FILE=$PROGNAME_FULL-hooks DISPLAY_PROGNAME=$(basename $(dirname $PROGNAME_FULL)) RECURSE_FLAG=true # Process options while [ "X$1" != X ]; do case $1 in # Application-specific options --helper-hooks=*) HELPER_HOOKS_FILE=${1#*=} ;; --progname=*) DISPLAY_PROGNAME=${1#*=} ;; --recurse=*) RECURSE_FLAG=${1#*=} ;; # General options -v|--verbose) VERBOSELEVEL=3 ;; -d) VERBOSELEVEL=$2; shift ;; --debug=*) VERBOSELEVEL=${1#*=} ;; -h|--help) usage 0 ;; --) shift; break ;; -*) usage ;; *) break ;; esac shift done # Process arguments [ $# -ge 1 ] || usage MODE=$1; shift debug 10 "main: MODE=$MODE" case $MODE in edit|create|delete|list|purge|init) : ;; *) usage ;; esac # Sanity checks and derivations [ $RECURSE_FLAG = true -o $RECURSE_FLAG = false ] || usage # Guts debug 10 "main: writing hooks file generic-helper ..." { echo "# This file was generated by $PROGNAME on $(date)." echo cat <<'EOF' # Properties MY_PRIVATE_ATTRIBUTES="uname status" MY_PUBLIC_ATTRIBUTES= MY_ATTRIBUTES="$MY_PRIVATE_ATTRIBUTES $MY_PUBLIC_ATTRIBUTES" MY_HELPER_IDS= for MY_ATTRIBUTE in ${MY_ATTRIBUTES^^}; do eval "$MY_ATTRIBUTE="; done # Defaults # Hooks # This function exists (1) to stop generic's hook, which lists the db, from running and (2) to produce # some debug output. list_prologue() { inherit SQLITE_CMD DB_FILE MY_ID local UNAMES UNAMES=$($SQLITE_CMD $DB_FILE "select group_concat(uname,' ') from attribute_values where helper == '$MY_ID' and attribute == 'status' and value == 'installing';") debug 10 "list_prologue: the following hosts are marked installing: $UNAMES; but nop-helper keeps mum about these" return 0 } # Overloads start here EOF cat $HELPER_HOOKS_FILE } > /tmp/$PROGNAME.$$.helper-hooks CMDLINE="$LIB_DIR/helpers/generic-helper --recurse=$RECURSE_FLAG --progname=$DISPLAY_PROGNAME --debug=$VERBOSELEVEL --helper-hooks=/tmp/$PROGNAME.$$.helper-hooks $MODE $*" debug 10 "main: calling [$CMDLINE]" eval "$CMDLINE" || { RC=$? rm -f /tmp/$PROGNAME.$$.helper-hooks error "generic-helper failed; propogating error upwards ..." return $RC } rm -f /tmp/$PROGNAME.$$.helper-hooks } usage() { local RC RC=${1:-1} { echo "Usage: $DISPLAY_PROGNAME [ ] { edit | create | delete | purge | init | list }" echo } | if [ $RC = 0 ]; then cat else cat >&2 fi exit $RC } main "$@"