Skip to content

Commit

Permalink
fix: Change terraform_validate hook functionality for subdirectories …
Browse files Browse the repository at this point in the history
…with terraform files (#100)

* Update terraform_validate.sh:
-Change to the directory before running terraform validate to use the Terraform
 configuration for the appropriate working directory.

* Neglected to change the terraform validate call to use the default of the
current directory.

* Several changes to improve functionality:
- Switch to checking the path for '*.tf' instead of always checking the current
  directory.
- Try to find a '.terraform' directory (which indicates a `terraform init`) and
  change to that directory before running `terraform validate`.

* Fix the description for the terraform_validate hook to reflect changes that were
made in:
35e0356

* - Clean up comments.
- Adjust variable names to better reflect what they are holding.
  • Loading branch information
mcdonnnj authored Apr 4, 2020
1 parent 8cbcd8e commit 7694fb9
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 3 deletions.
2 changes: 1 addition & 1 deletion .pre-commit-hooks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
exclude: \.terraform\/.*$

- id: terraform_validate
name: Terraform validate without variables
name: Terraform validate
description: Validates all Terraform configuration files.
entry: terraform_validate.sh
language: script
Expand Down
24 changes: 22 additions & 2 deletions terraform_validate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,33 @@ done
for path_uniq in $(echo "${paths[*]}" | tr ' ' '\n' | sort -u); do
path_uniq="${path_uniq//__REPLACED__SPACE__/ }"

if [[ -n "$(find . -maxdepth 1 -name '*.tf' -print -quit)" ]]; then
if ! terraform validate $path_uniq; then
if [[ -n "$(find $path_uniq -maxdepth 1 -name '*.tf' -print -quit)" ]]; then

starting_path=$(realpath "$path_uniq")
terraform_path="$path_uniq"

# Find the relevant .terraform directory (indicating a 'terraform init'),
# but fall through to the current directory.
while [[ "$terraform_path" != "." ]]; do
if [[ -d "$terraform_path/.terraform" ]]; then
break
else
terraform_path=$(dirname "$terraform_path")
fi
done

validate_path="${path_uniq#"$terraform_path"}"

# Change to the directory that has been initialized, run validation, then
# change back to the starting directory.
cd "$(realpath "$terraform_path")"
if ! terraform validate $validate_path; then
error=1
echo
echo "Failed path: $path_uniq"
echo "================================"
fi
cd "$starting_path"
fi
done

Expand Down

0 comments on commit 7694fb9

Please sign in to comment.