Hi.
I’m trying to render template file test.tpl
{ "CERTFILE": ${test} }
with main.tf
output "test" { value = templatefile("test.tpl", { test=null }) }
And got an error:
$ terraform apply
Error: Error in function call
on main.tf line 2, in output “test”:
2: value = templatefile(“test.tpl”,
3:
4:
5:
Call to function “templatefile” failed: test.tpl:2,17-21: Invalid template
interpolation value; The expression result is null. Cannot include a null
value in a string template…
But it works fine when template file looks
{ "CERTFILE": null }
I need to have exactly the null.
terraform -version
Terraform v0.12.28
Thanks
Templates are string-interpolated, so you cannot pass null
. But in this case, since your template does not have quotes around the value, to render the result you want you can bind the string "null"
. Like this:
output "test" { value = templatefile("test.tpl", { test="null" }) }
$ terraform apply -auto-approve
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
test = { "CERTFILE": null }
However, this looks like a JSON object. In that case, I would recommend using the jsonencode
function to generate the object. This is much less error-prone than trying to write string templates to create JSON.
Example config:
output "test" {
value = jsonencode(
{
"CERTFILE" : null,
}
)
}
1 Like
You’ve saved me. Thanks a lot.