mirror of
https://github.com/tofuutils/pre-commit-opentofu.git
synced 2025-10-15 17:38:54 +02:00
feat: rename pre-commit-terraform to pre-commit-opentofu, pt III
This commit is contained in:
parent
2e537a9cd4
commit
233f6c6c8b
18 changed files with 103 additions and 103 deletions
|
|
@ -37,7 +37,7 @@ function common::parse_cmdline {
|
|||
# common global arrays.
|
||||
# Populated via `common::parse_cmdline` and can be used inside hooks' functions
|
||||
ARGS=() HOOK_CONFIG=() FILES=()
|
||||
# Used inside `common::terraform_init` function
|
||||
# Used inside `common::tofu_init` function
|
||||
TF_INIT_ARGS=()
|
||||
# Used inside `common::export_provided_env_vars` function
|
||||
ENV_VARS=()
|
||||
|
|
@ -302,38 +302,38 @@ function common::colorify {
|
|||
}
|
||||
|
||||
#######################################################################
|
||||
# Run terraform init command
|
||||
# Run tofu init command
|
||||
# Arguments:
|
||||
# command_name (string) command that will tun after successful init
|
||||
# dir_path (string) PATH to dir relative to git repo root.
|
||||
# Can be used in error logging
|
||||
# Globals (init and populate):
|
||||
# TF_INIT_ARGS (array) arguments for `terraform init` command
|
||||
# TF_INIT_ARGS (array) arguments for `tofu init` command
|
||||
# Outputs:
|
||||
# If failed - print out terraform init output
|
||||
# If failed - print out tofu init output
|
||||
#######################################################################
|
||||
# TODO: v2.0: Move it inside terraform_validate.sh
|
||||
function common::terraform_init {
|
||||
function common::tofu_init {
|
||||
local -r command_name=$1
|
||||
local -r dir_path=$2
|
||||
|
||||
local exit_code=0
|
||||
local init_output
|
||||
|
||||
# Suppress terraform init color
|
||||
# Suppress tofu init color
|
||||
if [ "$PRE_COMMIT_COLOR" = "never" ]; then
|
||||
TF_INIT_ARGS+=("-no-color")
|
||||
fi
|
||||
|
||||
if [ ! -d .terraform/modules ] || [ ! -d .terraform/providers ]; then
|
||||
init_output=$(terraform init -backend=false "${TF_INIT_ARGS[@]}" 2>&1)
|
||||
init_output=$(tofu init -backend=false "${TF_INIT_ARGS[@]}" 2>&1)
|
||||
exit_code=$?
|
||||
|
||||
if [ $exit_code -ne 0 ]; then
|
||||
common::colorify "red" "'terraform init' failed, '$command_name' skipped: $dir_path"
|
||||
common::colorify "red" "'tofu init' failed, '$command_name' skipped: $dir_path"
|
||||
echo -e "$init_output\n\n"
|
||||
else
|
||||
common::colorify "green" "Command 'terraform init' successfully done: $dir_path"
|
||||
common::colorify "green" "Command 'tofu init' successfully done: $dir_path"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@ readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
|
|||
|
||||
# set up default insertion markers. These will be changed to the markers used by
|
||||
# terraform-docs if the hook config contains `--use-standard-markers=true`
|
||||
insertion_marker_begin="<!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK -->"
|
||||
insertion_marker_end="<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->"
|
||||
insertion_marker_begin="<!-- BEGINNING OF PRE-COMMIT-OPENTOFU DOCS HOOK -->"
|
||||
insertion_marker_end="<!-- END OF PRE-COMMIT-OPENTOFU DOCS HOOK -->"
|
||||
|
||||
# these are the standard insertion markers used by terraform-docs
|
||||
readonly standard_insertion_marker_begin="<!-- BEGIN_TF_DOCS -->"
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ function main {
|
|||
common::export_provided_env_vars "${ENV_VARS[@]}"
|
||||
common::parse_and_export_env_vars
|
||||
|
||||
# Suppress terraform fmt color
|
||||
# Suppress tofu fmt color
|
||||
if [ "$PRE_COMMIT_COLOR" = "never" ]; then
|
||||
ARGS+=("-no-color")
|
||||
fi
|
||||
|
|
@ -44,7 +44,7 @@ function per_dir_hook_unique_part {
|
|||
local -a -r args=("$@")
|
||||
|
||||
# pass the arguments to hook
|
||||
terraform fmt "${args[@]}"
|
||||
tofu fmt "${args[@]}"
|
||||
|
||||
# return exit code to common::per_dir_hook
|
||||
local exit_code=$?
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ function main {
|
|||
common::parse_cmdline "$@"
|
||||
common::export_provided_env_vars "${ENV_VARS[@]}"
|
||||
common::parse_and_export_env_vars
|
||||
# JFYI: suppress color for `terraform providers lock` is N/A`
|
||||
# JFYI: suppress color for `tofu providers lock` is N/A`
|
||||
|
||||
# shellcheck disable=SC2153 # False positive
|
||||
common::per_dir_hook "$HOOK_ID" "${#ARGS[@]}" "${ARGS[@]}" "${FILES[@]}"
|
||||
|
|
@ -136,7 +136,7 @@ function per_dir_hook_unique_part {
|
|||
common::colorify "yellow" "DEPRECATION NOTICE: We introduced '--mode' flag for this hook.
|
||||
Check migration instructions at https://github.com/tofuutils/pre-commit-opentofu#terraform_providers_lock
|
||||
"
|
||||
common::terraform_init 'terraform providers lock' "$dir_path" || {
|
||||
common::tofu_init 'OpenTofu providers lock' "$dir_path" || {
|
||||
exit_code=$?
|
||||
return $exit_code
|
||||
}
|
||||
|
|
@ -149,9 +149,9 @@ Check migration instructions at https://github.com/tofuutils/pre-commit-opentofu
|
|||
fi
|
||||
|
||||
#? Don't require `tf init` for providers, but required `tf init` for modules
|
||||
#? Mitigated by `function match_validate_errors` from terraform_validate hook
|
||||
#? Mitigated by `function match_validate_errors` from tofu_validate hook
|
||||
# pass the arguments to hook
|
||||
terraform providers lock "${args[@]}"
|
||||
tofu providers lock "${args[@]}"
|
||||
|
||||
# return exit code to common::per_dir_hook
|
||||
exit_code=$?
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
|
|||
# shellcheck source=_common.sh
|
||||
. "$SCRIPT_DIR/_common.sh"
|
||||
|
||||
# `terraform validate` requires this env variable to be set
|
||||
# `tofu validate` requires this env variable to be set
|
||||
export AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION:-us-east-1}
|
||||
|
||||
function main {
|
||||
|
|
@ -16,7 +16,7 @@ function main {
|
|||
common::export_provided_env_vars "${ENV_VARS[@]}"
|
||||
common::parse_and_export_env_vars
|
||||
|
||||
# Suppress terraform validate color
|
||||
# Suppress tofu validate color
|
||||
if [ "$PRE_COMMIT_COLOR" = "never" ]; then
|
||||
ARGS+=("-no-color")
|
||||
fi
|
||||
|
|
@ -25,9 +25,9 @@ function main {
|
|||
}
|
||||
|
||||
#######################################################################
|
||||
# Run `terraform validate` and match errors. Requires `jq`
|
||||
# Run `tofu validate` and match errors. Requires `jq`
|
||||
# Arguments:
|
||||
# validate_output (string with json) output of `terraform validate` command
|
||||
# validate_output (string with json) output of `tofu validate` command
|
||||
# Outputs:
|
||||
# Returns integer:
|
||||
# - 0 (no errors)
|
||||
|
|
@ -66,8 +66,8 @@ function match_validate_errors {
|
|||
#######################################################################
|
||||
# Unique part of `common::per_dir_hook`. The function is executed in loop
|
||||
# on each provided dir path. Run wrapped tool with specified arguments
|
||||
# 1. Check if `.terraform` dir exists and if not - run `terraform init`
|
||||
# 2. Run `terraform validate`
|
||||
# 1. Check if `.terraform` dir exists and if not - run `tofu init`
|
||||
# 2. Run `tofu validate`
|
||||
# 3. If at least 1 check failed - change the exit code to non-zero
|
||||
# Arguments:
|
||||
# dir_path (string) PATH to dir relative to git repo root.
|
||||
|
|
@ -111,28 +111,28 @@ function per_dir_hook_unique_part {
|
|||
esac
|
||||
done
|
||||
|
||||
# First try `terraform validate` with the hope that all deps are
|
||||
# First try `terratofuform validate` with the hope that all deps are
|
||||
# pre-installed. That is needed for cases when `.terraform/modules`
|
||||
# or `.terraform/providers` missed AND that is expected.
|
||||
terraform validate "${args[@]}" &> /dev/null && {
|
||||
tofu validate "${args[@]}" &> /dev/null && {
|
||||
exit_code=$?
|
||||
return $exit_code
|
||||
}
|
||||
|
||||
# In case `terraform validate` failed to execute
|
||||
# - check is simple `terraform init` will help
|
||||
common::terraform_init 'terraform validate' "$dir_path" || {
|
||||
# In case `tofu validate` failed to execute
|
||||
# - check is simple `tofu init` will help
|
||||
common::tofu_init 'tofu validate' "$dir_path" || {
|
||||
exit_code=$?
|
||||
return $exit_code
|
||||
}
|
||||
|
||||
if [ "$retry_once_with_cleanup" != "true" ]; then
|
||||
# terraform validate only
|
||||
validate_output=$(terraform validate "${args[@]}" 2>&1)
|
||||
# tofu validate only
|
||||
validate_output=$(tofu validate "${args[@]}" 2>&1)
|
||||
exit_code=$?
|
||||
else
|
||||
# terraform validate, plus capture possible errors
|
||||
validate_output=$(terraform validate -json "${args[@]}" 2>&1)
|
||||
# tofu validate, plus capture possible errors
|
||||
validate_output=$(tofu validate -json "${args[@]}" 2>&1)
|
||||
exit_code=$?
|
||||
|
||||
# Match specific validation errors
|
||||
|
|
@ -150,12 +150,12 @@ function per_dir_hook_unique_part {
|
|||
|
||||
common::colorify "yellow" "Re-validating: $dir_path"
|
||||
|
||||
common::terraform_init 'terraform validate' "$dir_path" || {
|
||||
common::tofu_init 'tofu validate' "$dir_path" || {
|
||||
exit_code=$?
|
||||
return $exit_code
|
||||
}
|
||||
|
||||
validate_output=$(terraform validate "${args[@]}" 2>&1)
|
||||
validate_output=$(tofu validate "${args[@]}" 2>&1)
|
||||
exit_code=$?
|
||||
fi
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ function main {
|
|||
check_dependencies
|
||||
|
||||
# shellcheck disable=SC2153 # False positive
|
||||
terraform_module_wrapper_ "${ARGS[*]}"
|
||||
tofu_module_wrapper_ "${ARGS[*]}"
|
||||
}
|
||||
|
||||
readonly CONTENT_MAIN_TF='module "wrapper" {}'
|
||||
|
|
@ -38,12 +38,12 @@ readonly CONTENT_OUTPUTS_TF='output "wrapper" {
|
|||
WRAPPER_OUTPUT_SENSITIVE
|
||||
}'
|
||||
readonly CONTENT_VERSIONS_TF='terraform {
|
||||
required_version = ">= 0.13.1"
|
||||
required_version = ">= 1.6.0"
|
||||
}'
|
||||
# shellcheck disable=SC2016 # False positive
|
||||
readonly CONTENT_README='# WRAPPER_TITLE
|
||||
|
||||
The configuration in this directory contains an implementation of a single module wrapper pattern, which allows managing several copies of a module in places where using the native Terraform 0.13+ `for_each` feature is not feasible (e.g., with Terragrunt).
|
||||
The configuration in this directory contains an implementation of a single module wrapper pattern, which allows managing several copies of a module in places where using the native OpenTofu 1.6.0+ `for_each` feature is not feasible (e.g., with Terragrunt).
|
||||
|
||||
You may want to use a single Terragrunt configuration file to manage multiple resources without duplicating `terragrunt.hcl` files for each copy of the same module.
|
||||
|
||||
|
|
@ -64,7 +64,7 @@ inputs = {
|
|||
defaults = { # Default values
|
||||
create = true
|
||||
tags = {
|
||||
Terraform = "true"
|
||||
OpenTofu = "true"
|
||||
Environment = "dev"
|
||||
}
|
||||
}
|
||||
|
|
@ -81,7 +81,7 @@ inputs = {
|
|||
}
|
||||
```
|
||||
|
||||
## Usage with Terraform
|
||||
## Usage with OpenTofu
|
||||
|
||||
```hcl
|
||||
module "wrapper" {
|
||||
|
|
@ -90,7 +90,7 @@ module "wrapper" {
|
|||
defaults = { # Default values
|
||||
create = true
|
||||
tags = {
|
||||
Terraform = "true"
|
||||
OpenTofu = "true"
|
||||
Environment = "dev"
|
||||
}
|
||||
}
|
||||
|
|
@ -142,7 +142,7 @@ inputs = {
|
|||
}
|
||||
```'
|
||||
|
||||
function terraform_module_wrapper_ {
|
||||
function tofu_module_wrapper_ {
|
||||
local args
|
||||
read -r -a args <<< "$1"
|
||||
|
||||
|
|
@ -197,7 +197,7 @@ function terraform_module_wrapper_ {
|
|||
cat << EOF
|
||||
ERROR: Unrecognized argument: $key
|
||||
Hook ID: $HOOK_ID.
|
||||
Generate Terraform module wrapper. Available arguments:
|
||||
Generate OpenTofu module wrapper. Available arguments:
|
||||
--root-dir=... - Root dir of the repository (Optional)
|
||||
--module-dir=... - Single module directory. Options: "." (means just root module),
|
||||
"modules/iam-user" (a single module), or empty (means include all
|
||||
|
|
@ -212,7 +212,7 @@ Generate Terraform module wrapper. Available arguments:
|
|||
Example:
|
||||
--module-dir=modules/object - Generate wrapper for one specific submodule.
|
||||
--module-dir=. - Generate wrapper for the root module.
|
||||
--module-repo-org=terraform-google-modules --module-repo-shortname=network --module-repo-provider=google - Generate wrappers for repository available by name "terraform-google-modules/network/google" in the Terraform registry and it includes all modules (root and in "modules/*").
|
||||
--module-repo-org=terraform-google-modules --module-repo-shortname=network --module-repo-provider=google - Generate wrappers for repository available by name "terraform-google-modules/network/google" in the OpenTofu registry and it includes all modules (root and in "modules/*").
|
||||
EOF
|
||||
exit 1
|
||||
;;
|
||||
|
|
@ -310,7 +310,7 @@ EOF
|
|||
echo
|
||||
fi
|
||||
|
||||
# Read content of all terraform files
|
||||
# Read content of all OpenTofu files
|
||||
# shellcheck disable=SC2207
|
||||
all_tf_content=$(find "${full_module_dir}" -name '*.tf' -maxdepth 1 -type f -exec cat {} +)
|
||||
|
||||
|
|
@ -319,15 +319,15 @@ EOF
|
|||
continue
|
||||
fi
|
||||
|
||||
# Get names of module variables in all terraform files
|
||||
# Get names of module variables in all OpenTofu files
|
||||
# shellcheck disable=SC2207
|
||||
module_vars=($(echo "$all_tf_content" | hcledit block list | { grep "^variable\." | cut -d'.' -f 2 | sort || true; }))
|
||||
|
||||
# Get names of module outputs in all terraform files
|
||||
# Get names of module outputs in all OpenTofu files
|
||||
# shellcheck disable=SC2207
|
||||
module_outputs=($(echo "$all_tf_content" | hcledit block list | { grep "^output\." | cut -d'.' -f 2 || true; }))
|
||||
|
||||
# Get names of module providers in all terraform files
|
||||
# Get names of module providers in all OpenTofu files
|
||||
module_providers=$(echo "$all_tf_content" | hcledit block list | { grep "^provider\." || true; })
|
||||
|
||||
if [[ $module_providers ]]; then
|
||||
|
|
@ -342,7 +342,7 @@ EOF
|
|||
|
||||
# At least one output is sensitive - the wrapper's output should be sensitive, too
|
||||
if [[ "$module_output_sensitive" == "true" ]]; then
|
||||
wrapper_output_sensitive="sensitive = true # At least one sensitive module output (${module_output}) found (requires Terraform 0.14+)"
|
||||
wrapper_output_sensitive="sensitive = true # At least one sensitive module output (${module_output}) found (requires OpenTofu 1.6.0+)"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ function per_dir_hook_unique_part {
|
|||
local -a -r args=("$@")
|
||||
|
||||
# pass the arguments to hook
|
||||
terrascan scan -i terraform "${args[@]}"
|
||||
terrascan scan -i tofu "${args[@]}"
|
||||
|
||||
# return exit code to common::per_dir_hook
|
||||
local exit_code=$?
|
||||
|
|
@ -57,7 +57,7 @@ function run_hook_on_whole_repo {
|
|||
local -a -r args=("$@")
|
||||
|
||||
# pass the arguments to hook
|
||||
terrascan scan -i terraform "${args[@]}"
|
||||
terrascan scan -i tofu "${args[@]}"
|
||||
|
||||
# return exit code to common::per_dir_hook
|
||||
local exit_code=$?
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue