#!/bin/sh # # Shell-based configuration management framework for unix-like systems. set -eu PROGNAME=boxconf USAGE="${PROGNAME} [-d] [-s SSH_HOST] [-e VAR=VALUE]... HOSTNAME" BOXCONF_ROOT=$(dirname "$(readlink -f "$0")") usage(){ [ $# -gt 0 ] && printf '%s\n' "$1" 2>&1 printf 'usage: %s\n' "$USAGE" 2>&1 exit 2 } while getopts :hde:s:X _bc_opt; do case $_bc_opt in h) usage ;; d) set -x ;; e) eval "$OPTARG" ;; s) BOXCONF_SSH_HOST=$OPTARG ;; X) _bc_run=1 ;; :) usage "missing option value: -${OPTARG}" ;; ?) usage "unknown option: -${OPTARG}" ;; esac done [ $(( OPTIND - $# )) -eq 0 ] || usage eval "BOXCONF_HOSTNAME=\$$#" for _bc_lib in "${BOXCONF_ROOT}/lib"/*; do . "$_bc_lib" done if [ -n "${_bc_run:-}" ]; then _boxconf_run else _boxconf_deploy "${BOXCONF_SSH_HOST:-$BOXCONF_HOSTNAME}" "$BOXCONF_HOSTNAME" "$@" fi