|
#!/bin/bash |
|
|
|
source "${BASH_SOURCE%/*}/common.sh" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
arg0=$(basename "$0" .sh) |
|
blnk=$(echo "$arg0" | sed 's/./ /g') |
|
|
|
|
|
usage_info() |
|
{ |
|
c_echo $YELLOW "Usage:" |
|
c_echo $YELLOW " $arg0 <environment> [--auto]" |
|
c_echo $YELLOW " $arg0 --interactive [--auto]" |
|
c_echo $YELLOW " $arg0 --environment <environment> [--auto]" |
|
c_echo $YELLOW " $arg0 --account <account> --deployment <deployment> [--auto]" |
|
} |
|
|
|
|
|
usage() |
|
{ |
|
|
|
usage_info |
|
exit 1 |
|
} |
|
|
|
|
|
error() |
|
{ |
|
echo "$arg0: $*" >&2 |
|
exit 1 |
|
} |
|
|
|
|
|
confirmation() |
|
{ |
|
c_echo $YELLOW " |
|
-------------------------------------------------------------------------------- |
|
-- Confirmation -- |
|
-------------------------------------------------------------------------------- |
|
" |
|
c_echo $YELLOW "Are you sure you want to deploy $1 to $2? (y/n) (Default: y)" |
|
read -r CONFIRMATION |
|
if [[ -z $CONFIRMATION ]]; then |
|
CONFIRMATION="y" |
|
fi |
|
if [[ $CONFIRMATION != "y" ]]; then |
|
c_echo $RED "Exiting..." |
|
exit 1 |
|
fi |
|
} |
|
|
|
|
|
help() |
|
{ |
|
usage_info |
|
echo |
|
c_echo $YELLOW "Options:" |
|
echo " {-i|--interactive} -- Interactive mode" |
|
echo " {-e|--environment} <environment> -- Environment to deploy to" |
|
echo " {-a|--account} <account> -- Account to deploy to" |
|
echo " {-d|--deployment} <deployment> -- Deployment to deploy" |
|
echo " {-y|--auto} -- Auto approve" |
|
echo " {-h|--help} -- Display this help and exit" |
|
echo |
|
echo |
|
c_echo $YELLOW "Available Deployments:" |
|
ls -d deployments/* | grep -v backend | sed 's/deployments\///g' | sort |
|
echo |
|
c_echo $YELLOW "Available Environments:" |
|
ls -d environments/* | grep -v backend | sed 's/.tfvars.json//g' | sed 's/environments\///g' |
|
echo |
|
c_echo $YELLOW "Available Accounts:" |
|
ls -d accounts/* | grep -v backend | sed 's/.tfvars.json//g' | sed 's/accounts\///g' |
|
exit 0 |
|
} |
|
|
|
|
|
flags() |
|
{ |
|
|
|
[ $# -eq 0 ] && usage |
|
|
|
|
|
if [ "${1:0:1}" != "-" ]; then |
|
ENVIRONMENT=$1 |
|
shift |
|
set -- "$@" "-e" "$ENVIRONMENT" |
|
fi |
|
|
|
|
|
while test $# -gt 0 |
|
do |
|
case "$1" in |
|
(-i|--interactive) |
|
export INTERACTIVE=true |
|
shift;; |
|
(-e|--environment) |
|
shift |
|
[ $# = 0 ] && error "No environment specified" |
|
export ENVIRONMENT="$1" |
|
|
|
|
|
if [ ! -f "environments/$ENVIRONMENT.tfvars.json" ]; then |
|
error "Invalid environment $ENVIRONMENT" |
|
fi |
|
shift;; |
|
(-a|--account) |
|
shift |
|
[ $# = 0 ] && error "No account specified" |
|
export ACCOUNT="$1" |
|
|
|
|
|
if [ ! -f "accounts/$ACCOUNT.tfvars.json" ]; then |
|
error "Invalid account $ACCOUNT" |
|
fi |
|
shift;; |
|
(-d|--deployment) |
|
shift |
|
[ $# = 0 ] && error "No deployment specified" |
|
export DEPLOYMENT="$1" |
|
|
|
|
|
if [ ! -d "deployments/$DEPLOYMENT" ]; then |
|
error "Invalid deployment $DEPLOYMENT" |
|
fi |
|
shift;; |
|
(-y|--auto) |
|
export AUTO_APPROVE="auto" |
|
shift;; |
|
(-h|--help) |
|
help;; |
|
(-*) |
|
error "Unknown option $1";; |
|
esac |
|
done |
|
|
|
|
|
if [ -n "$INTERACTIVE" ] && ([ -n "$ACCOUNT" ] || [ -n "$DEPLOYMENT" ] || [ -n "$ENVIRONMENT" ]); then |
|
error "--interactive flag must be passed alone" |
|
fi |
|
|
|
|
|
if [ -n "$ENVIRONMENT" ] && ([ -n "$ACCOUNT" ] || [ -n "$DEPLOYMENT" ]); then |
|
error "--environment flag cannot be passed with --account or --deployment flags" |
|
fi |
|
|
|
|
|
if ([ -n "$ACCOUNT" ] && [ -z "$DEPLOYMENT" ]) || ([ -z "$ACCOUNT" ] && [ -n "$DEPLOYMENT" ]); then |
|
error "--account and --deployment flags must be passed together" |
|
fi |
|
|
|
|
|
if [ -n "$ENVIRONMENT" ] && [ -z "$ACCOUNT" ] && [ -z "$DEPLOYMENT" ]; then |
|
export DEPLOYMENT="terraform" |
|
fi |
|
} |
|
|
|
flags "$@" |
|
|
|
|
|
interactive() |
|
{ |
|
|
|
DEPLOYMENTS=$(ls -d deployments/* | grep -v backend | sed 's/deployments\///g' | sort) |
|
|
|
|
|
c_echo $GREEN "Which deployment would you like to deploy?" |
|
select DEPLOYMENT in $DEPLOYMENTS; do test -n "$DEPLOYMENT" && break; echo ">>> Invalid Selection"; done |
|
|
|
|
|
if [[ $DEPLOYMENT == *"terraform"* ]]; then |
|
ENVIRONMENTS=$(ls -d environments/* | sed 's/.tfvars.json//g' | sed 's/environments\///g') |
|
c_echo $GREEN "On which environment would you like to deploy?" |
|
select ENVIRONMENT in $ENVIRONMENTS; do test -n "$ENVIRONMENT" && break; echo ">>> Invalid Selection"; done |
|
|
|
|
|
confirmation $DEPLOYMENT $ENVIRONMENT |
|
fi |
|
|
|
|
|
if [[ $DEPLOYMENT != *"terraform"* ]]; then |
|
ACCOUNTS=$(ls -d accounts/* | grep -v backend | sed 's/.tfvars.json//g' | sed 's/accounts\///g') |
|
c_echo $GREEN "On which account would you like to deploy?" |
|
select ACCOUNT in $ACCOUNTS; do test -n "$ACCOUNT" && break; echo ">>> Invalid Selection"; done |
|
|
|
|
|
confirmation $DEPLOYMENT $ACCOUNT |
|
fi |
|
} |
|
|
|
|
|
if [ -n "$INTERACTIVE" ]; then |
|
c_echo $YELLOW "Running in interactive mode..." |
|
interactive |
|
fi |
|
|
|
|
|
if [[ $DEPLOYMENT == *"terraform"* ]]; then |
|
echo |
|
c_echo $GREEN "Deploying to ${ENVIRONMENT}" |
|
|
|
deployments/terraform/terraform-apply.sh $ENVIRONMENT $AUTO_APPROVE |
|
if [ "$?" -ne "0" ]; then |
|
c_echo $RED "Deployment failed" |
|
exit 1 |
|
fi |
|
echo |
|
c_echo $GREEN "Deployment succeeded" |
|
fi |
|
|
|
|
|
if [[ $DEPLOYMENT != *"terraform"* ]]; then |
|
echo |
|
c_echo $GREEN "Deploying ${DEPLOYMENT} to ${ACCOUNT}" |
|
|
|
deployments/${DEPLOYMENT}/${DEPLOYMENT}-apply.sh $ACCOUNT $AUTO_APPROVE |
|
if [ "$?" -ne "0" ]; then |
|
c_echo $RED "Deployment failed" |
|
exit 1 |
|
fi |
|
echo |
|
c_echo $GREEN "Deployment succeeded" |
|
fi |
|
|
|
|
|
|