diff --git a/.pre-commit-hooks.yaml b/.pre-commit-hooks.yaml index c7f403941..d0b27aa71 100644 --- a/.pre-commit-hooks.yaml +++ b/.pre-commit-hooks.yaml @@ -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 diff --git a/terraform_validate.sh b/terraform_validate.sh index 50bfd0ba7..3b44ed77f 100755 --- a/terraform_validate.sh +++ b/terraform_validate.sh @@ -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