Learn how to easily print the rendered output of your Terraform template directly to your terminal, making debugging and validation a breeze.
When working with Terraform, you might be tempted to preview the rendered output of your templates before actually applying them. However, Terraform doesn't offer a direct command for this purpose.
You can't directly output rendered Terraform templates in the terminal before applying them.
Terraform doesn't have a built-in command to show the rendered output of a template file.
To see the results of your template, you need to run terraform apply.
During the apply process, Terraform will render the template and display the final values in the terminal output.
For example, if you have a template file like this:
resource "aws_instance" "example" {
ami = "ami-0c94855ba95c574c9"
instance_type = "t2.micro"
tags = {
Name = "${var.environment}-instance"
}
}
After running terraform apply, you'll see the rendered value of Name tag (e.g., "prod-instance") in the output.
If you need to debug templates, you can use tools like echo with string interpolation in your shell to test parts of your template logic.
For example:
$ export environment="test"
$ echo "Name = ${environment}-instance"
Name = test-instanceRemember that this won't reflect the full complexity of Terraform's interpolation and functions.
This code snippet demonstrates a simple Terraform template that creates an AWS instance with a dynamically generated name tag based on an environment variable. It shows how to apply the template using the Terraform CLI and provides a basic debugging technique using shell commands to test template interpolation. The example highlights that this debugging method is limited and suggests more advanced options like Terraform console or testing frameworks for complex scenarios.
This example demonstrates how Terraform renders templates during the apply process and how to debug template logic using shell commands.
1. main.tf (Terraform Template)
resource "aws_instance" "example" {
ami = "ami-0c94855ba95c574c9"
instance_type = "t2.micro"
tags = {
Name = "${var.environment}-instance"
}
}2. variables.tf (Define the 'environment' variable)
variable "environment" {
type = string
}3. Run Terraform Apply
terraform apply -var="environment=prod"This command will apply your Terraform configuration. During the process, you'll see the rendered output of your template, including the final value of the Name tag (e.g., "prod-instance").
4. Debugging Template Logic with Shell Commands
You can use shell commands like echo with string interpolation to test parts of your template logic.
# Set the environment variable
export environment="test"
# Test the Name tag interpolation
echo "Name = ${environment}-instance"This will output:
Name = test-instance
Important Notes:
terraform console or third-party Terraform testing frameworks.terraform plan: While not showing the fully rendered template, terraform plan gives a detailed view of what actions will be taken, including interpolated values. This is often sufficient for debugging.terraform-compliance, tflint, and checkov can analyze your code and potentially offer insights into rendered values during static analysis.plan output or debugging individual expressions.| Feature | Description |
|---|---|
| Direct Template Output | Not supported by Terraform CLI. |
| Viewing Rendered Templates | Rendered output is shown in the terminal during terraform apply. |
| Example | A template with ${var.environment}-instance will show the final value (e.g., "prod-instance") after apply. |
| Debugging Templates | Use shell commands like echo with string interpolation for basic testing. |
| Limitations | Shell-based debugging doesn't cover the full scope of Terraform's interpolation and functions. |
While you can't directly view rendered Terraform templates before deployment, understanding the rendering process is crucial. Terraform's approach emphasizes the outcome over the verbatim rendered code. Leverage terraform plan to preview changes, employ shell commands for basic template logic testing, and consider advanced tools like terraform console for complex debugging. Remember to prioritize security and explore alternative approaches like modularization and thorough commenting to enhance your infrastructure-as-code workflow.
How to show sensitive values - Terraform - HashiCorp Discuss | I can see how sensitive values need to be protected in CI/CD, but at my terminal I would like to see them. In some cases, there is a workaround, eg for outputs that are marked sensitive you can use json output. BUT this trick does not work for terraform apply: sensitive values are masked, and if the value is say a json blob (created from a template), the whole blob is masked. There is then no way for me to know what actually caused the change in that json/value. Is there a way to tell terraform...
Terraform Output Values : Complete Guide & Examples | What are Terraform outputs? See the different options for their configuration and how Terraform handles and exports output values between modules.
Command: plan | Terraform | HashiCorp Developer | -no-color - Disables terminal formatting sequences in the output. Use this if you are running Terraform in a context where its output will be rendered by a ...
AnsiColor | Jenkins plugin | Adds ANSI coloring to the Console Output
Command Reference · Crossplane v1.18 | The crossplane CLI provides utilities to make using Crossplane easier.
Read the Crossplane CLI overview page for information on installing crossplane.
Global flags The following flags are available …