Skip to content

Commit 3d3df4b

Browse files
Update validation scripts
- To reflect modularized and multiple ecs services
1 parent 849ca0b commit 3d3df4b

File tree

2 files changed

+42
-22
lines changed

2 files changed

+42
-22
lines changed

terraform/scripts/check_task_definition.sh

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,36 +5,54 @@ if [ "$#" -ne 1 ]; then
55
exit 1
66
fi
77

8+
valid_resources=(
9+
"aws_ecs_task_definition\.task_definition" #TODO: Remove after release
10+
"aws_s3_object\.appspec_object"
11+
"module\.web_service\.aws_ecs_task_definition"
12+
"module\.good_job_service\.aws_ecs_task_definition"
13+
)
14+
815
tf_stdout=$1
9-
# Check task definition is replaced
1016
if [[ $(grep -ce "No changes.*Your infrastructure matches the configuration" "$tf_stdout") -eq 1 ]]; then
1117
echo "No changes detected, continuing."
1218
exit 0
1319
fi
14-
if [[ $(grep -cE "aws_ecs_task_definition\.task_definition.*(replaced|created)" "$tf_stdout") -eq 1 ]]; then
15-
echo "Task definition is being replaced or created"
16-
else
17-
echo "Task definition is not being replaced, aborting."
18-
exit 1
19-
fi
20-
if [[ $(grep -cE "aws_s3_object\.appspec_object.*(updated in-place|created)" "$tf_stdout") -eq 1 ]]; then
21-
echo "S3 bucket object is being replaced or created"
22-
else
23-
echo "S3 bucket object is not being replaced, aborting."
24-
exit 1
25-
fi
20+
2621
MODIFICATIONS=$(grep -E "[0-9]+ to add, [0-9]+ to change, [0-9]+ to destroy." "$tf_stdout") || exit 1
2722
ADDITIONS=$(echo "$MODIFICATIONS" | sed -E 's/.*([0-9]+) to add.*/\1/') || exit 1
28-
CHANGES=$(echo "$MODIFICATIONS" | sed -E 's/.*([0-9]+) to change.*/\1/') || exit 1
2923
DELETIONS=$(echo "$MODIFICATIONS" | sed -E 's/.*([0-9]+) to destroy.*/\1/') || exit 1
3024
if [[ $DELETIONS -gt $ADDITIONS ]]; then
31-
echo "More resources are being destroyed than created."
32-
echo "Other resources than task definition and s3 bucket object are being deleted, aborting."
25+
echo "ERROR: More resources are being destroyed than created, run infrastructure deploy first."
3326
exit 1
27+
else
28+
echo "CHECK_PASSED: No resources are being destroyed without replacement."
3429
fi
35-
if [[ $((CHANGES + ADDITIONS)) -gt 2 ]]; then
36-
echo "More than 2 resources are being changed."
37-
echo "Other changes than task definition and s3 bucket object are being made, aborting."
30+
31+
mapfile -t PLANNED_CHANGES < <(grep -E "#.+(replaced|created|updated in-place|destroyed)" "$tf_stdout" || exit 1)
32+
33+
invalid_modifications=()
34+
for change in "${PLANNED_CHANGES[@]}"; do
35+
valid=0
36+
for resource in "${valid_resources[@]}"; do
37+
if [[ "$change" =~ $resource ]]; then
38+
valid=1
39+
break
40+
fi
41+
done
42+
if [ $valid -eq 0 ]; then
43+
invalid_modifications+=("$change")
44+
fi
45+
done
46+
47+
if [ ! ${#invalid_modifications[@]} -eq 0 ]; then
48+
echo "FAILED_CHECK: Invalid resources modified"
49+
for item in "${invalid_modifications[@]}"; do
50+
echo " $item"
51+
done
52+
echo "Please run an infrastructure deployment."
3853
exit 1
54+
else
55+
echo "CHECK_PASSED: All modified resources are expected."
3956
fi
40-
echo "Basic checks passed, only task definition and S3 bucket changes observed."
57+
58+
echo "Basic checks passed, if production please evaluate the plan before applying."

terraform/scripts/validate_plan.sh

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@ down_time_if_destroyed=(
2323
"aws_security_group\.rds_security_group"
2424
"aws_db_subnet_group\.aurora_subnet_group"
2525
"aws_ecs_cluster\.cluster"
26-
"aws_ecs_service\.service"
27-
"aws_security_group\.ecs_service_sg"
26+
"aws_ecs_service\.service" #TODO: Remove after release
27+
"aws_security_group\.ecs_service_sg" #TODO: Remove after release
28+
"module\.ecs_service\.aws_ecs_service\.service"
29+
"module\.ecs_service\.aws_security_group"
2830
)
2931

3032
if [ "$#" -ne 1 ]; then

0 commit comments

Comments
 (0)