#!/bin/bash
#------------------------------------------------------------------------------
set -u
# Terraform Demo Driver script.
# This is a wrapper to Robert Cowham's project:
# https://swarm.workshop.perforce.com/projects/perforce_software-sdp-cloud-deploy
function msg () { echo -e "$*"; }
function errmsg () { msg "\nError: ${1:-Unknown Error}\n"; }
function bail () { errmsg "${1:-Unknown Error}"; exit ${2:-1}; }
# Custom path adjustment to find 'ansible' on my Mac.
export PATH=/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/bin:$PATH
# Function cmd("echo Hello", "Description of command.")
function cmd () {
local cmdAndArgs="${1:-echo}"
local desc="${2:-}"
local log=$TmpFile
local -i ec=0
[[ -n "$desc" ]] && msg "$desc"
msg "Executing: $cmdAndArgs"
$cmdAndArgs > $log 2>&1
ec=$?
echo "EXIT_CODE: $ec" >> $log
cat $log
return $ec
}
function do_preflight_checks()
{
msg "Preflight checks"
local util utilPath
local -i errors=0
local -i checks=0
for util in ansible terraform; do
checks+=1
utilPath="$(which $util)"
if [[ -z "$utilPath" ]]; then
errmsg "Could not find [$util] in PATH: $PATH"
errors+=1
fi
done
if [[ $errors -eq 0 ]]; then
msg "Preflight detected no issues."
else
errmsg "Preflight detected $errors issues."
fi
return $errors
}
declare Version=1.0.1
declare DemoRoot=/pub/terraform
declare P4CloneCmd="p4 clone -p public.perforce.com:1666 -f //guest/perforce_software/sdp-cloud-deploy/main/..."
declare TmpFile=$(mktemp)
declare SampleAZ="eu-west-1"
declare MyAZ="us-east-1"
do_preflight_checks || bail "Preflight checks failed."
cmd "rm -rf $DemoRoot" || bail "Failed to remove dir: $DemoRoot"
cmd "mkdir -p $DemoRoot" || bail "Failed to mkdir: $DemoRoot"
cd "$DemoRoot" || bail "Couldn't cd to: $DemoRoot"
cmd "$P4CloneCmd" "Clone Robert's SDP TerraForm files."
msg "Replace sample AWS AZ with my preferred AZ, $MyAZ."
for f in $(grep -lr $SampleAZ *); do
msg " Updating $f"
sed -e "s/$SampleAZ/$MyAZ/g" $f > "$f.new" || bail "Substitution failed."
mv -f "$f.new" "$f" || bail "This failed: mv $f.new $f"
done
cmd "terraform init" "Initializing Terraform."
exit 0