Module-Level Helpers

Module-Level helpers are only locally available to the specific module they are defined in.

Example

To define custom helpers, you create a Ruby module the config/helpers folder within the module definition folder. For example, app/modules/example/config/helpers. The helper should be within the Terraspace::Module namespace. By convention, the file name should be in underscore casing and the module name is camelized. Example:

app/modules/example/config/helpers/custom_helpers.rb

module Terraspace::Module::Example::CustomHelpers
  def env_name
    case Terraspace.env
    when "dev"
      "development"
    when "prod"
      "production"
    else
      Terraspace.env
    end
  end
end

Notice that app/modules/example is in the module namespace Terraspace::Module::Example::CustomHelpers. The custom helper methods will be available to use in the .tf files. Example:

Tip: You can also use terraspace new helper to generate a starter helper file.

app/modules/example/main.tf

resource "random_pet" "this" {
  length = 2
}

resource "aws_s3_bucket" "this" {
  bucket = "bucket-${random_pet.this.id}"

  tags = {
    Name = "bucket-<%= Terraspace.env %>"
    Env  = "<%= env_name %>" # use of custom helper
  }
}

Running:

$ terraspace build example
Building .terraspace-cache/us-west-2/dev/modules/example
Built in .terraspace-cache/us-west-2/dev/modules/example
$ terraspace info example --path
.terraspace-cache/us-west-2/dev/modules/example
$ ls .terraspace-cache/us-west-2/dev/modules/example/main.tf
.terraspace-cache/us-west-2/dev/modules/example/main.tf

Produces:

.terraspace-cache/us-west-2/dev/modules/example/main.tf

resource "random_pet" "this" {
  length = 2
}

resource "aws_s3_bucket" "this" {
  bucket = "bucket-${random_pet.this.id}"

  tags = {
    Name = "bucket-dev"
    Env  = "development" # use of custom helper
  }
}

Considerations

Helper methods are a Terraspace concept. Generally, you should strive to use pure Terraform, so the the code can be used outside of Terraspace. Sometimes though, using helper methods can make your code simpler and more managable. So try to use helper methods wisely.

Generator

To help you get started quickly, you can generate starter helper code. Check out the examples in the Helper Generator Docs.

More tools: