-
Notifications
You must be signed in to change notification settings - Fork 33
Expand file tree
/
Copy pathapply.sh
More file actions
97 lines (70 loc) · 2.35 KB
/
Copy pathapply.sh
File metadata and controls
97 lines (70 loc) · 2.35 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
set -x
cat >/tmp/github.py <<"EOF"
include github.py
EOF
cat >/tmp/cmp.py <<"EOF"
include cmp.py
EOF
cat >/tmp/comment_util.py <<"EOF"
include comment_util.py
EOF
export CIRCLE_PR_NUMBER="${CIRCLE_PR_NUMBER:-${CIRCLE_PULL_REQUEST##*/}}"
export label="<< parameters.label >>"
function update_status() {
local status="$1"
if ! echo "$status" | python3 /tmp/github.py status; then
echo "Unable to update status on PR"
fi
}
function apply() {
set +e
if [[ "<< parameters.timeout >>" -gt 0 ]]; then
timeout "<< parameters.timeout >>" terraform -chdir=${module_path} apply -input=false -no-color -auto-approve -lock-timeout=300s plan.out | $TFMASK
else
terraform -chdir=${module_path} apply -input=false -no-color -auto-approve -lock-timeout=300s plan.out | $TFMASK
fi
local TF_EXIT=${PIPESTATUS[0]}
set -e
if [[ $TF_EXIT -eq 0 ]]; then
update_status "Plan applied in CircleCI Job [${CIRCLE_JOB}](${CIRCLE_BUILD_URL})"
else
update_status "Error applying plan in CircleCI Job [${CIRCLE_JOB}](${CIRCLE_BUILD_URL})"
exit 1
fi
}
if [[ "<< parameters.auto_approve >>" == "true" && -n "<< parameters.target >>" ]]; then
for target in $(echo "<< parameters.target >>" | tr ',' '\n'); do
PLAN_ARGS="$PLAN_ARGS -target $target"
done
fi
update_status "Applying plan in CircleCI Job [${CIRCLE_JOB}](${CIRCLE_BUILD_URL})"
exec 3>&1
set +e
if [[ "<< parameters.reuse_plan >>" == "false" ]]; then
terraform -chdir=${module_path} plan -input=false -no-color -detailed-exitcode -lock-timeout=300s -out=plan.out $PLAN_ARGS \
| $TFMASK \
| tee /dev/fd/3 \
| $COMPACT_PLAN \
>plan.txt
TF_EXIT=${PIPESTATUS[0]}
if [[ $TF_EXIT -eq 1 ]]; then
update_status "Error creating plan in CircleCI Job [${CIRCLE_JOB}](${CIRCLE_BUILD_URL})"
exit 1
fi
fi
set -e
if [[ "<< parameters.auto_approve >>" == "true" || $TF_EXIT -eq 0 ]]; then
echo "Automatically approving plan"
apply
else
if ! python3 /tmp/github.py get >approved-plan.txt; then
echo "Approved plan not found"
exit 1
fi
if python3 /tmp/cmp.py plan.txt approved-plan.txt; then
apply
else
update_status "Plan not applied in CircleCI Job [${CIRCLE_JOB}](${CIRCLE_BUILD_URL}) (Plan has changed)"
exit 1
fi
fi