Skip to content

Commit

Permalink
terraform: disallow simple variables ("foo")
Browse files Browse the repository at this point in the history
Fixes #5338 (and I'm sure many others)

There is no use case for "simple" variables in Terraform at all so
anytime one is found it should be an error.

There is a _huge_ backwards incompatibility here that was not supposed
to be by design but I'm sure a lot of people are relying on: in the
`template_file` datasource, this bug allowed you to not escape your
interpolations and have the work. For example:

```
data "template_file" "foo" {
  template = "${a}"
  vars { a = 12 }
}
```

The above would work, but it shouldn't. The template should have to be
`"$${a}"` (to escape the interpolation).

Because of this BC, I recommend holding this until Terraform 0.8.0 and
documenting it carefully. As part of this PR, I've added some special
error message notes.
  • Loading branch information
mitchellh committed Oct 28, 2016
1 parent 7940af2 commit 3fd390b
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 6 deletions.
14 changes: 8 additions & 6 deletions terraform/interpolate.go
Original file line number Diff line number Diff line change
Expand Up @@ -284,12 +284,14 @@ func (i *Interpolater) valueSimpleVar(
n string,
v *config.SimpleVariable,
result map[string]ast.Variable) error {
// SimpleVars are never handled by Terraform's interpolator
result[n] = ast.Variable{
Value: config.UnknownVariableValue,
Type: ast.TypeString,
}
return nil
// This error message includes some information for people who
// relied on this for their template_file data sources. We should
// remove this at some point but there isn't any rush.
return fmt.Errorf(
"invalid variable syntax: %q. If this is part of inline `template` parameter\n" +
"then you must escape the interpolation with two dollar signs. For\n" +
"example: ${a} becomes $${a}." +
n)
}

func (i *Interpolater) valueUserVar(
Expand Down
6 changes: 6 additions & 0 deletions terraform/interpolate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ import (
"github.com/hashicorp/terraform/config"
)

func TestInterpolater_simpleVar(t *testing.T) {
i := &Interpolater{}
scope := &InterpolationScope{}
testInterpolateErr(t, i, scope, "simple")
}

func TestInterpolater_countIndex(t *testing.T) {
i := &Interpolater{}

Expand Down

0 comments on commit 3fd390b

Please sign in to comment.