terraform: test that varaibles from the plan are interpolated in
This commit is contained in:
parent
92ffbf2880
commit
9e8f578c8b
|
@ -167,7 +167,7 @@ func (t *Terraform) applyWalkFn(
|
||||||
return vars, nil
|
return vars, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return t.genericWalkFn(p.State, p.Diff, cb)
|
return t.genericWalkFn(p.State, p.Diff, p.Vars, cb)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Terraform) planWalkFn(
|
func (t *Terraform) planWalkFn(
|
||||||
|
@ -179,7 +179,12 @@ func (t *Terraform) planWalkFn(
|
||||||
|
|
||||||
// Write our configuration out
|
// Write our configuration out
|
||||||
result.Config = t.config
|
result.Config = t.config
|
||||||
result.Vars = t.variables
|
|
||||||
|
// Copy the variables
|
||||||
|
result.Vars = make(map[string]string)
|
||||||
|
for k, v := range t.variables {
|
||||||
|
result.Vars[k] = v
|
||||||
|
}
|
||||||
|
|
||||||
cb := func(r *Resource) (map[string]string, error) {
|
cb := func(r *Resource) (map[string]string, error) {
|
||||||
// Refresh the state so we're working with the latest resource info
|
// Refresh the state so we're working with the latest resource info
|
||||||
|
@ -216,19 +221,20 @@ func (t *Terraform) planWalkFn(
|
||||||
return vars, nil
|
return vars, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return t.genericWalkFn(state, nil, cb)
|
return t.genericWalkFn(state, nil, t.variables, cb)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Terraform) genericWalkFn(
|
func (t *Terraform) genericWalkFn(
|
||||||
state *State,
|
state *State,
|
||||||
diff *Diff,
|
diff *Diff,
|
||||||
|
invars map[string]string,
|
||||||
cb genericWalkFunc) depgraph.WalkFunc {
|
cb genericWalkFunc) depgraph.WalkFunc {
|
||||||
var l sync.Mutex
|
var l sync.Mutex
|
||||||
|
|
||||||
// Initialize the variables for application
|
// Initialize the variables for application
|
||||||
vars := make(map[string]string)
|
vars := make(map[string]string)
|
||||||
for k, v := range t.variables {
|
for k, v := range invars {
|
||||||
vars[k] = v
|
vars[fmt.Sprintf("var.%s", k)] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(n *depgraph.Noun) error {
|
return func(n *depgraph.Noun) error {
|
||||||
|
|
|
@ -256,6 +256,31 @@ func TestTerraformApply_compute(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTerraformApply_vars(t *testing.T) {
|
||||||
|
tf := testTerraform(t, "apply-vars")
|
||||||
|
tf.variables = map[string]string{"foo": "baz"}
|
||||||
|
|
||||||
|
s := &State{}
|
||||||
|
p, err := tf.Plan(s)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Explicitly set the "foo" variable
|
||||||
|
p.Vars["foo"] = "bar"
|
||||||
|
|
||||||
|
state, err := tf.Apply(p)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
actual := strings.TrimSpace(state.String())
|
||||||
|
expected := strings.TrimSpace(testTerraformApplyVarsStr)
|
||||||
|
if actual != expected {
|
||||||
|
t.Fatalf("bad: \n%s", actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestTerraformPlan(t *testing.T) {
|
func TestTerraformPlan(t *testing.T) {
|
||||||
tf := testTerraform(t, "plan-good")
|
tf := testTerraform(t, "plan-good")
|
||||||
|
|
||||||
|
@ -550,6 +575,17 @@ aws_instance.foo:
|
||||||
id = computed_id
|
id = computed_id
|
||||||
`
|
`
|
||||||
|
|
||||||
|
const testTerraformApplyVarsStr = `
|
||||||
|
aws_instance.bar:
|
||||||
|
ID = foo
|
||||||
|
type = aws_instance
|
||||||
|
foo = bar
|
||||||
|
aws_instance.foo:
|
||||||
|
ID = foo
|
||||||
|
type = aws_instance
|
||||||
|
num = 2
|
||||||
|
`
|
||||||
|
|
||||||
const testTerraformPlanStr = `
|
const testTerraformPlanStr = `
|
||||||
UPDATE: aws_instance.bar
|
UPDATE: aws_instance.bar
|
||||||
foo: "" => "2"
|
foo: "" => "2"
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
resource "aws_instance" "foo" {
|
||||||
|
num = "2"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_instance" "bar" {
|
||||||
|
foo = "${var.foo}"
|
||||||
|
}
|
Loading…
Reference in New Issue