#!/bin/sh set -e # Go to root directory cd "$(dirname $0)" # Include utilities . utils/echo REQ_OPS= while [ $# -gt 0 ]; do case "$1" in -h|--help) # TODO ;; --verbose|-v) echo_verbose + 1 ;; --quiet|-q) echo_verbose - 1 ;; --operation|-o) shift REQ_OPS="$REQ_OPS $1" ;; --key) KEY_FILE="" ;; esac shift done # Load host configuration [ -f hosts/"$(hostname)" ] || echo_die "No configuration for host $(hostname) found." . hosts/"$(hostname)" # Run system sanity checks . utils/syscheck # Identify some variables from system . utils/identify # Include enabled operations for OPT in $OPERATIONS; do if [ -f ops/"$OPT" ]; then . ops/"$OPT" else echo_die "No operation $OPT." fi done # TODO do we want to have some explicit sorting? # Check if operations need some update if [ -z "$REQ_OPS" ]; then for OPT in $OPERATIONS; do if ! "$OPT"_check; then echo_info "Scheduled: $OPT" REQ_OPS="$REQ_OPS $OPT" fi done fi if [ -z "$REQ_OPS" ]; then echo_info "All operations are in check." exit fi # Run preparations for OPT in $REQ_OPS; do if "$OPT"_prepare; then PREP_OPS="$PREP_OPS $OPT" else echo_error "Preparation failed for $OPT. Skipping." fi done # Now apply operations for OPT in $PREP_OPS; do if ! "$OPT"_apply; then echo_error "Operation $OPT application failed! Please check what happened." break fi done # And at the end run cleanups on all operations we ever executed for OPT in $REQ_OPS; do "$OPT"_clean || echo_warn "Cleanup of operation $OPT failed." done