TERRAFORM_BIN=$(which-command terraform | head -1) if [[ -x $TERRAFORM_BIN ]]; then function tfcontext() { [[ -n $(find $PWD -name '*.tf') ]] || return -1 [[ -d _logs ]] || mkdir _logs TF_VAR_FILE_NAME=${TF_VAR_FILE_CLI-:$(basename $PWD).tfvars} [[ -r $TF_VAR_FILE_NAME ]] || unset TF_VAR_FILE_NAME TF_VAR_FILE_CLI=${TF_VAR_FILE_CLI-:-var-file='$TF_VAR_FILE_NAME'} basename $PWD } function _tf_sedFullStop() { sed --unbuffered '/^===FULLSTOP===$/q' | sed --unbuffered '/^===FULLSTOP===$/d' } function less-tf() { local _TF_LOG_FILE=${1-_logs/0_0_lastrun.log} [[ "$1" == "-" ]] && _TF_LOG_FILE='_logs/0_0_lastrun.log' [[ -z "$SZ_DEBUG" ]] || echo "lessts: ${@} | LESS_NO_WAIT = '${LESS_NO_WAIT}'" [[ "$1" == "-" ]] && { [[ -z "$SZ_DEBUG" ]] || echo "tailing..." trap : INT; tail -f $_TF_LOG_FILE | _tf_sedFullStop; } \ || { [[ -z "${LESS_NO_WAIT}" ]] \ && { [[ -z "$SZ_DEBUG" ]] || echo "Invoking less..." less \ --no-init \ --raw-control-chars \ --line-numbers \ --quiet \ --hilite-unread \ --incsearch \ --ignore-case \ --force \ "${@:2}" -- \ "$_TF_LOG_FILE" #\ #'+G?([^\w\W][\[0-9m+])Plan:' \ #'+3k' } } } alias tf!=_tfSetLogTS function _tfSetLogTS() { export TF_LOG_TS=$(date -d "today" +"%Y%m%d%H%M%S") } function tf() { [[ -z "$TF_LOG_TS" ]] && _tfSetLogTS local NAME=$1 [[ "${@}" =~ "-destroy" ]] && NAME="$1-destroy" echo "===_logs/0_$NAME.log===" > _logs/0_0_lastrun.log [[ -z "$SZ_DEBUG" ]] || echo "Executing: terraform ${@}" { terraform "${@}" 2>&1 \ | tee _logs/${TF_LOG_TS}_$NAME.log \ | awk 'BEGIN {p=1}; /<<\W*EOT/ {print; p=0}; /^\W*EOT/ {p=1}; p; fflush();' \ | tee --append _logs/0_0_lastrun.log \ >> _logs/0_$NAME.log echo "===FULLSTOP===" >> _logs/0_0_lastrun.log } & less-tf - } function tf-plan() { [[ -z "$SZ_DEBUG" ]] || echo "DEBUG: tfplan ${@}" local _TF_TARGET="" [[ ${#TF_TARGET} -gt 0 ]] && _TF_TARGET="$(printf -- '--target=%s ' ${TF_TARGET[@]})" [[ "${@}" =~ "-destroy" ]] && [[ ${#TF_DESTROY_TARGET} -gt 0 ]] && _TF_TARGET="$(printf -- '--target=%s ' ${TF_DESTROY_TARGET[@]})" tf plan ${_TF_TARGET} "${@}" } function get-tf-env() { local PATTERN="${1-}" compgen -v | grep "^TF_${PATTERN}" } function clear-tf-env() { local PATTERN="${1}" local TOCLEAR=$(get-tf-env "${PATTERN}") [[ -z "$TOCLEAR" ]] && { echo "Could not find environment variables matching: $(echo "^TF_${PATTERN}")" } || { unset $TOCLEAR echo "Cleared the following vars: $TOCLEAR" } } function clear-tf-env-vars() { clear-tf-env 'VAR_[a-z]' } function clear-tf-env-targets() { clear-tf-env '[A-Z_]*TARGET$' } alias tf-plan-destroy='tf-plan --destroy ' alias tf-apply='tf apply ' alias tfp='tf-plan ' alias tfpd='tf-plan-destroy ' alias tfa='tf-apply ' fi