Skip to content

Commit 760a70d

Browse files
authored
chore(provisioner/terraform): make testdata generate.sh parallel (#16326)
1 parent 92d22e2 commit 760a70d

File tree

1 file changed

+54
-18
lines changed

1 file changed

+54
-18
lines changed

provisioner/terraform/testdata/generate.sh

+54-18
Original file line numberDiff line numberDiff line change
@@ -3,37 +3,73 @@
33
set -euo pipefail
44
cd "$(dirname "${BASH_SOURCE[0]}")"
55

6-
for d in */; do
7-
pushd "$d"
6+
generate() {
7+
local name="$1"
8+
9+
echo "=== BEGIN: $name"
10+
terraform init -upgrade &&
11+
terraform plan -out terraform.tfplan &&
12+
terraform show -json ./terraform.tfplan | jq >"$name".tfplan.json &&
13+
terraform graph -type=plan >"$name".tfplan.dot &&
14+
rm terraform.tfplan &&
15+
terraform apply -auto-approve &&
16+
terraform show -json ./terraform.tfstate | jq >"$name".tfstate.json &&
17+
rm terraform.tfstate &&
18+
terraform graph -type=plan >"$name".tfstate.dot
19+
ret=$?
20+
echo "=== END: $name"
21+
if [[ $ret -ne 0 ]]; then
22+
return $ret
23+
fi
24+
}
25+
26+
run() {
27+
d="$1"
28+
cd "$d"
829
name=$(basename "$(pwd)")
930

1031
# This needs care to update correctly.
1132
if [[ $name == "kubernetes-metadata" ]]; then
12-
popd
13-
continue
33+
echo "== Skipping: $name"
34+
return 0
1435
fi
1536

1637
# This directory is used for a different purpose (quick workaround).
1738
if [[ $name == "cleanup-stale-plugins" ]]; then
18-
popd
19-
continue
39+
echo "== Skipping: $name"
40+
return 0
2041
fi
2142

2243
if [[ $name == "timings-aggregation" ]]; then
23-
popd
24-
continue
44+
echo "== Skipping: $name"
45+
return 0
46+
fi
47+
48+
echo "== Generating test data for: $name"
49+
if ! out="$(generate "$name" 2>&1)"; then
50+
echo "$out"
51+
echo "== Error generating test data for: $name"
52+
return 1
2553
fi
54+
echo "== Done generating test data for: $name"
55+
exit 0
56+
}
2657

27-
terraform init -upgrade
28-
terraform plan -out terraform.tfplan
29-
terraform show -json ./terraform.tfplan | jq >"$name".tfplan.json
30-
terraform graph -type=plan >"$name".tfplan.dot
31-
rm terraform.tfplan
32-
terraform apply -auto-approve
33-
terraform show -json ./terraform.tfstate | jq >"$name".tfstate.json
34-
rm terraform.tfstate
35-
terraform graph -type=plan >"$name".tfstate.dot
36-
popd
58+
declare -a jobs=()
59+
for d in */; do
60+
run "$d" &
61+
jobs+=($!)
62+
done
63+
64+
err=0
65+
for job in "${jobs[@]}"; do
66+
if ! wait "$job"; then
67+
err=$((err + 1))
68+
fi
3769
done
70+
if [[ $err -ne 0 ]]; then
71+
echo "ERROR: Failed to generate test data for $err modules"
72+
exit 1
73+
fi
3874

3975
terraform version -json | jq -r '.terraform_version' >version.txt

0 commit comments

Comments
 (0)