Terragrunt dependencies solver (Terrasolver)
This tool is aimed to solve issue with resolving dependencies among a set of Terragrunt modules and run
provided Terragrunt command for each module in a sequence automatically.
It works pretty the same way as Terragrunt: you put a Terraform command and command line options and terrasolver
will
propagate all this to terragrunt
and it will do its job as usual. :)
How to build
Included script build.sh
builds binary for three of supported platforms: MacOS X (amd64), MacOS X (arm64), Linux (amd64)
$ ./build.sh
$ ls -1 terrasolver_* burmuley@RRG-MacPro15
terrasolver_linux_amd64
terrasolver_mac_amd64
terrasolver_mac_arm64
How to use
terrasolver [flags] [terragrunt command and parameters]
Supported flags:
-path
- Path to the working directory where to run all activities. Is omitted will use current directory.
-skip-confirm
- Skip confirmation step after the ordered list modules is displayed, will continue with running Terragrunt command against each module.
-terragrunt
- Path to the Terragrunt binary. The default is /usr/local/bin/terragrunt
-deepdive
- If set to false
will only scan current working directory for dependencies,
If set to true
- will also recursively scan dependencies referenced in files within the working directory
to build the complete dependency tree if any of modules enlist dependencies out of the working directory.
-tf-cache-dir
- enables Terraform provider plugin cache directory
and exports corresponding environment variable TF_PLUGIN_CACHE_DIR
for each module when running;
default value is ~/.terraform.d/plugin-cache
-no-cache
- disable Terragrunt modules "caching"
-cache-duration
- how long (in minutes) modules listed in cache won't be run; default value is 30
minutes
-supress-warning
- suppress warning messages about dependency graph processing; default is true
-version
- displays version and build information
Most of the flags listed above can be also overridden by corresponding environment variables.
Note: values set with environment variables take precedence over values in command line!
TERRASOLVER_PATH
- same as -path
flag
TERRASOLVER_SKIP_CONFIRM
- same as -skip-confirm
flag
TERRASOLVER_TERRAGRUNT_BIN
- same as -terragrunt
flag
TERRASOLVER_DEEP_DIVE
- same as -deepdive
flag
TF_PLUGIN_CACHE_DIR
- overrides value set with -tf-cache-dir
, uses the same variable name as Terraform
TERRASOLVER_SUPPRESS_WARNINGS
- same as -supress-warning
TERRASOLVER_NO_CACHE
- same as -no-cache
Example:
$ terrasolver -path=/home/user/infrastructure/dev -deepdive=true apply -auto-approve
2022/06/08 21:01:18 Terragrunt modules directory: /home/user/infrastructure/dev
Running order for modules in '/home/user/infrastructure/dev':
#1: /home/user/infrastructure/dev/us-west-2/ecs-clusters
#2: /home/user/infrastructure/dev/us-west-2/target-groups
#3: /home/user/infrastructure/dev/us-west-2/load-balancers
#4: /home/user/infrastructure/dev/us-west-2/kms-keys
#5: /home/user/infrastructure/dev/us-east-1/kms-replica-keys
#6: /home/user/infrastructure/dev/us-west-2/s3-buckets
#7: /home/user/infrastructure/dev/us-east-1/s3-buckets
#8: /home/user/infrastructure/dev/global/iam-roles
#9: /home/user/infrastructure/dev/us-west-2/code-deploy
Press ENTER to continue...
...
<then it simply runs `terragrunt [command] for each module in the list above`>