fix: Change terraform_validate hook functionality for subdirectories 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:
35e0356188

* - Clean up comments.
- Adjust variable names to better reflect what they are holding.
This commit is contained in:
Nick M 2020-04-04 02:17:25 -04:00 committed by GitHub
commit 7694fb9b9a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 3 deletions

View file

@ -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

View file

@ -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