A CLI tool that runs opinionated quality checks on your IaC codebase.
Check the IaC guild guidelines for more information on the quality checks.
ℹ️ If you use Linux, you can install Linuxbrew
brew tap padok-team/tap
brew install guacamole
Prerequisites :
- Golang
- Terraform
- Terragrunt
One-liner installer (in /tmp
) :
DIR=$(pwd) cd /tmp && git clone git@github.com:padok-team/guacamole.git && cd guacamole && go build && alias guacamole=/tmp/guacamole/guacamole && cd $DIR
For a more permanent installation, just move the /tmp/guacamole/guacamole
binary into a directory present in your $PATH
.
Three modes currently exist :
-
Static mode : runs quality checks on the codebase without running Terraform / Terragrunt commands
guacamole static -p /path/to/your/codebase
-
[EXPERIMENTAL] State mode : runs quality checks based on your layers' state
We recommend to use this command after checking that your codebase has been initialized properly.
guacamole state -p /path/to/your/codebase
-
[EXPERIMENTAL] Profile mode : creates a detailed report of the contents of your codebase
We recommend to use this command after checking that your codebase has been initialized properly.
guacamole profile -p /path/to/your/codebase
A verbose mode (-v
) exists to add more infos to the output.
TF_MOD_001
- Remote module call should be pinned to a specific versionTF_MOD_002
- Provider should be defined by the consumer of the moduleTF_MOD_003
- Required provider versions in modules should be set with ~> operatorTF_NAM_001
- Resources and datasources in modules should be named "this" or "these" if their type is uniqueTF_NAM_002
- snake_case should be used for all resource namesTF_NAM_003
- Stuttering in the naming of resourcesTF_NAM_004
- Variable name's number should match its typeTF_VAR_001
- Variable should contain a descriptionTF_VAR_002
- Variable should declare a specific type
TF_MOD_004
- Use for_each to create multiple resources of the same type