Terragrunt for Beginners

Terragrunt Functions

get terragrunt dir

The get_terragrunt_dir() function in Terragrunt returns the absolute filesystem path of the directory containing the current terragrunt.hcl configuration. By using this function, you can build dynamic file references, support modular layouts, and adapt configurations based on their location.

The image shows a grid of folder icons with one highlighted, labeled "Path to config dir," and a label "Functionality" at the bottom.

When to Use get_terragrunt_dir()

  • Dynamically adapt resources or input files based on the configuration directory
  • Construct file paths that automatically adjust when the directory hierarchy changes
  • Maintain flexible, modular directory structures without hard-coding absolute paths

The image outlines the benefits of the `get_terragrunt_dir` function, highlighting its adaptability to config locations, dynamic path construction, and support for modular and flexible config structures.

Key Benefits

BenefitDescription
Dynamic Path ResolutionAutomatically resolves relative paths from the terragrunt.hcl location.
Modular ConfigurationKeeps module directories self-contained and portable.
Environment AgnosticWorks consistently across local machines, CI pipelines, and remote states.

Best Practices

  • Always reference inputs, variable files, and modules relative to get_terragrunt_dir()
  • Avoid using ../ in paths that Terragrunt evaluates in its cache directory
  • Combine with extra_arguments to pass var-files into remote Terraform modules

Warning

When Terragrunt downloads Terraform code into a cache, your working directory changes. Always use get_terragrunt_dir() to ensure paths are resolved against your configuration, not the cache folder.

The image provides best practices for using `get_terragrunt_dir`, emphasizing the need for relative paths with remote Terraform configurations and clarifying that these paths are not relative to the temporary directory where code is downloaded.


Example: Fixing Relative Paths in a VPC Module

Imagine you’re calling the Terraform AWS VPC module via Terragrunt and need to supply a common.tfvars file stored in a sibling directory:

# terragrunt.hcl (initial version)
terraform {
  source = "tfr://terraform-aws-modules/vpc/aws/?version=5.8.1"

  extra_arguments "custom_vars" {
    commands  = ["plan"]
    arguments = ["-var-file=../common.tfvars"]
  }
}

Your common.tfvars:

name = "KodeKloud-VPC"
cidr = "10.100.0.0/24"

When you run:

cd workspace/vpc
terragrunt plan

You’ll see:

Error: Failed to read variables file
  Given variables file ../common.tfvars does not exist.

Terragrunt is running Terraform inside its cache folder, so the relative path breaks.

Applying get_terragrunt_dir()

Update your terragrunt.hcl to compute the correct path:

terraform {
  source = "tfr://terraform-aws-modules/vpc/aws//"

  extra_arguments "custom_vars" {
    commands  = ["plan"]
    arguments = ["-var-file=${get_terragrunt_dir()}/../common.tfvars"]
  }
}

Now terragrunt plan correctly locates common.tfvars, and the VPC module receives the desired inputs. After a successful apply, your AWS VPC resource might look like this:

resource "aws_vpc" "this" {
  cidr_block = "10.100.0.0/24"
  tags = {
    Name = "KodeKloud-VPC"
  }
  # ...other attributes omitted for brevity
}

Summary

Using get_terragrunt_dir() ensures that:

  • File references are always relative to your terragrunt.hcl location
  • Your configurations remain portable and modular
  • Terragrunt’s cache directory behavior won’t break your paths

Leverage this function to build more robust and maintainable infrastructure code.


Watch Video

Watch video content

Previous
path relative to include