forked from aims145/sample-site
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdeploy.sh
More file actions
145 lines (124 loc) · 3.42 KB
/
deploy.sh
File metadata and controls
145 lines (124 loc) · 3.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/usr/bin/env bash
# set -x # Un-comment to debug this script
#TF_LOG=DEBUG; TF_LOG_PATH=~tf.log # Un-comment to debug terraform
if [ -z "${BASH_VERSINFO[*]}" ] || [ -z "${BASH_VERSINFO[0]}" ] || [ "${BASH_VERSINFO[0]}" -lt 4 ]; then
echo "This script requires Bash version >= 4"
exit 1
fi
programname=$0
SCRIPT_REL_DIR=$(dirname "${0}")
ROOT=$(realpath "$SCRIPT_REL_DIR/../")
cd "$ROOT" || exit
TERRAFORM_OPTS=()
# echo 'pull latest code ...'
# git pull origin master
usage() {
echo "usage: $programname [-e environment] [-o operation]"
echo "MANDATORY:"
echo " -e, --environment VAL specify environment [global sandbox staging production management ops new_sandbox]"
echo " -o, --operation VAL specify operation [plan print_output apply]"
echo "OPTIONAL:"
echo " -a, --auto-approve TERRAFORM_OPTS: auto-approve on apply"
exit 1
}
parse_params() {
while [ ! $# -eq 0 ]; do
case "$1" in
--help | -h)
usage
exit
;;
--environment | -e)
ENV=$2
if [[ $ENV != "global" && $ENV != "sandbox" && $ENV != "staging" && $ENV != "production" && $ENV != "management" && $ENV != "ops" && $ENV != "new_sandbox" ]]; then
echo "Wrong environment: $ENV. Valid options: global sandbox staging production management ops"
exit 1
fi
;;
--operation | -o)
OPER=$2
if [[ $OPER != "plan" && $OPER != "print_output" && $OPER != "apply" ]]; then
echo "Wrong operation: $OPER. Valid options: plan print_output apply"
exit 1
fi
;;
--auto-approve | -a)
if [[ $OPER == "apply" ]]; then
TERRAFORM_OPTS+=('-auto-approve')
fi
;;
esac
shift
done
}
print_params() {
echo "-------------------------------"
echo "ENV : $ENV"
echo "OPER : $OPER"
echo "-------------------------------"
}
select_environment() {
ENVS=("global" "sandbox" "staging" "production" "management" "ops")
echo "Select environment:"
select var in "${ENVS[@]}"; do
ENV=$var
break
done
}
select_oper() {
OPERS=("apply" "plan" "print_output")
echo "Select operation:"
select oper in "${OPERS[@]}"; do
OPER=$oper
break
done
}
release_notes() {
RELEASE="RELEASES.md"
if ! grep -q "$PROJECT" $RELEASE; then
echo "#$PROJECT" >>$RELEASE
fi
DATE=$(date +%Y-%m-%d)
sed -i "/$PROJECT/a * **$DATE** - $DESCRIPTION" $RELEASE
}
get_output_var() {
terraform output -json | jq -r ".$1.value"
}
# Display output
display_output() {
terraform output
}
do_project() {
# cd to env folder
cd "environments/$ENV" || exit
# Deploy architecture
if [[ $OPER == "print_output" ]]; then
display_output
else
echo "Performing $OPER"
terraform "$OPER" "${TERRAFORM_OPTS[@]}" || exit 1
fi
}
update_shared_json() {
if [[ $ENV == "global" ]]; then
echo "[Skipping] Uploading shared.json to S3 - global env does not expose shared.json"
elif [[ $OPER != "apply" ]]; then
echo "[Skipping] Uploading shared.json to S3 - terraform outputs are updated only on apply"
else
echo 'Uploading shared.json to S3 ...'
output=$(terraform output -json)
echo "$output" >shared.json
aws s3 cp shared.json "s3://lambda-$ENV.spire.io/shared.json"
fi
}
# execution sequence:
[[ $# -eq 0 ]] && usage
parse_params "$@"
print_params
# select_project
# select_environment
# select_oper
do_project
update_shared_json
echo ''
echo 'done.'