87 lines
2.7 KiB
Bash
Executable File
87 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# shellcheck disable=SC2207
|
|
|
|
CURRENT_DIR="$(pwd -P)"
|
|
PARENT_PATH="$(
|
|
cd "$(dirname "${BASH_SOURCE[0]}")" || exit
|
|
pwd -P
|
|
)/.."
|
|
cd "$PARENT_PATH" || exit
|
|
|
|
# Sets REGION, APP_NAME, AWS_REGION, AWS_PROFILE
|
|
. ./scripts/project-variables.sh
|
|
|
|
STAGE=$1
|
|
|
|
echo "Begin: exporting cloudformation outputs as environment variables"
|
|
start=$(date +%s)
|
|
|
|
echo "App Name: [${APP_NAME}]"
|
|
echo "Profile: [${AWS_PROFILE}]"
|
|
echo "Region: [${REGION}]"
|
|
echo "Stage: [${STAGE}]"
|
|
|
|
if [ "$AWS_PROFILE" == "" ] || [ "$STAGE" == "" ] || [ "$REGION" == "" ]; then
|
|
echo "Error: No profile, stage or region passed"
|
|
exit 1
|
|
fi
|
|
|
|
IS_STACK="$(aws cloudformation describe-stacks --region "${REGION}" --profile "${AWS_PROFILE}" --max-items 1 >/dev/null)"
|
|
if ! $IS_STACK; then
|
|
echo "No stacks found in region, nothing to export"
|
|
elif [[ "$(aws cloudformation describe-stacks --region "${REGION}" --profile "${AWS_PROFILE}" --max-items 1 --query "Stacks[]")" == "[]" ]]; then
|
|
echo "Empty set of stacks found, nothing to export"
|
|
else
|
|
stacksForRegion=$(aws cloudformation describe-stacks --region "${REGION}")
|
|
|
|
echo "Env Stack filter: [$APP_NAME] && [$STAGE]"
|
|
|
|
stacksForEnvFilter="$(echo "${stacksForRegion:-}" | grep "StackName" | { grep -i "$APP_NAME" | grep -i "$STAGE" || true; })"
|
|
|
|
if [ "${stacksForEnvFilter:-}" != "" ]; then
|
|
stacksForEnv="$(echo "${stacksForEnvFilter:-}" | cut -d\" -f4)"
|
|
|
|
if [ "${stacksForEnv:-}" != "" ]; then
|
|
for stack in $stacksForEnv; do
|
|
echo
|
|
echo "Outputs for: $stack"
|
|
echo
|
|
stack_info=$(aws cloudformation describe-stacks \
|
|
--region "$REGION" \
|
|
--stack-name "$stack" \
|
|
--profile "${AWS_PROFILE}" \
|
|
--output json)
|
|
|
|
if [[ "$stack_info" =~ "OutputKey" ]]; then
|
|
outputKeys=($(echo "$stack_info" | jq ".Stacks[].Outputs[].OutputKey"))
|
|
outputValues=($(echo "$stack_info" | jq ".Stacks[].Outputs[].OutputValue"))
|
|
|
|
for ((i = 0; i < ${#outputKeys[@]}; i++)); do
|
|
keyTmp=${outputKeys[i]#\"*}
|
|
key=${keyTmp%\"*}
|
|
valTmp=${outputValues[i]#\"*}
|
|
val=${valTmp%\"*}
|
|
echo "export $key=$val"
|
|
export "$key"="$val"
|
|
done
|
|
fi
|
|
done
|
|
else
|
|
echo "No stacks found for environment filter, nothing to export"
|
|
fi
|
|
else
|
|
echo "No stacks found for environment filter, nothing to export"
|
|
fi
|
|
fi
|
|
|
|
AWS_ACCOUNT_ID="$(aws sts get-caller-identity --profile "$AWS_PROFILE" --region us-east-1 --output text --query 'Account')"
|
|
export AWS_ACCOUNT_ID
|
|
|
|
echo AWS_ACCOUNT_ID="$AWS_ACCOUNT_ID"
|
|
|
|
end=$(date +%s)
|
|
runtime=$((end - start))
|
|
echo "Finish ($runtime secs): exporting cloudformation outputs as environment variables"
|
|
|
|
cd "$CURRENT_DIR" || exit
|