| #!/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 |
|
|
|
|
|
|