#! /bin/bash # # Run from the xdr-terraform-live root, enviromment root, or partition root # to update the reference for all instances of a given module. # # USAGE: # update_module_refs --module 006-account-standards --newtag v4.0.2 function argparse { PARAMS="" while (( "$#" )); do case "$1" in -m|--module) if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then MODULE=$2 shift 2 else echo "Error: Argument for $1 is missing" >&2 exit 1 fi ;; -n|--newtag) if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then NEWTAG=$2 shift 2 else echo "Error: Argument for $1 is missing" >&2 exit 1 fi ;; -h|--help) echo Usage: $0 '[-t|--test] [-d|--debug] -m|--module MODULE -n|--newtag NEWTAG' exit 0 ;; -t|--test) TESTING="/bin/echo TESTING: " shift ;; -d|--debug) >&2 echo debug: Enabling debugging.. DEBUG=1 shift ;; # -p|--only-path) # if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then # ONLY_PATH=$2 # shift 2 # else # echo "Error: Argument for $1 is missing" >&2 # exit 1 # fi # ;; -*|--*=) # unsupported flags echo "Error: Unsupported flag $1" >&2 exit 1 ;; *) # preserve positional arguments PARAMS="$PARAMS $1" shift ;; esac done # set positional arguments in their proper place eval set -- "$PARAMS" } # Main argparse $* SHORT_PWD=$( basename ${PWD} ) PARENT_PWD=$( basename $( cd .. && pwd ) ) [[ $DEBUG == 1 ]] && >&2 echo debug: PWD=$PWD [[ $DEBUG == 1 ]] && >&2 echo debug: SHORT_PWD=$SHORT_PWD # Sanity Checking if [[ "$NEWTAG" == "" ]]; then >&2 echo Error: Parameter \'--newtag\' is required. exit 5 fi # Sanity Checking if [[ "$MODULE" == "" ]]; then >&2 echo Error: Parameter \'--module\' is required. exit 6 fi # Only function in the root, the environment, or the partition directories # # There's probably a clean way to do this syntax but I couldn't get it to work. # This check is "If globals.hcl doesn't exist AND env.hcl doesn't exist AND ..." if [ ! -e globals.hcl -a ! -e env.hcl -a ! -e partition.hcl ]; then read -p "You do not appear to be in an appropriate directory. Continue anyway [y/N]? " -n 1 -r echo "" if [[ $REPLY =~ ^[Yy]$ ]] then echo Continuing... else echo Exiting... exit 10 fi fi if [[ $NEWTAG =~ v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then [[ $TESTING ]] && >&2 echo debug: Newtag $NEWTAG is valid format. else >&2 echo Error: Invalid format for new tag. \"$NEWTAG\" must be of format v1.2.3 exit 6 fi if [[ $MODULE =~ ^[0-9]{3}- ]]; then [[ $TESTING ]] && >&2 echo debug: module $MODULE is valid format. else >&2 echo Error: Invalid format for Module. \"$MODULE\" must be of format xxx-modulename, where the x\'s are numeric digits. exit 7 fi for i in `find . -type d -name "$MODULE"`; do if [[ $i =~ skeleton ]]; then echo ======= Skipping $i continue fi echo ======= Processing $i ${TESTING} sed -E -i .bak 's/ref=v[0-9]+.[0-9]+\.[0-9]+"$/ref='${NEWTAG}'"/' $i/terragrunt.hcl done