terraform: tests that computed placeholders get inserted proprely
This commit is contained in:
parent
796dfd54e9
commit
967d4a61c1
|
@ -19,11 +19,16 @@ func testDiffStr(d *Diff) string {
|
||||||
r := d.Resources[n]
|
r := d.Resources[n]
|
||||||
buf.WriteString(fmt.Sprintf("%s\n", n))
|
buf.WriteString(fmt.Sprintf("%s\n", n))
|
||||||
for attr, attrDiff := range r {
|
for attr, attrDiff := range r {
|
||||||
|
v := attrDiff.New
|
||||||
|
if attrDiff.NewComputed {
|
||||||
|
v = "<computed>"
|
||||||
|
}
|
||||||
|
|
||||||
buf.WriteString(fmt.Sprintf(
|
buf.WriteString(fmt.Sprintf(
|
||||||
" %s: %#v => %#v\n",
|
" %s: %#v => %#v\n",
|
||||||
attr,
|
attr,
|
||||||
attrDiff.Old,
|
attrDiff.Old,
|
||||||
attrDiff.New,
|
v,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,9 +106,6 @@ func (t *Terraform) diffWalkFn(
|
||||||
// Initialize the result diff so we can write to it
|
// Initialize the result diff so we can write to it
|
||||||
result.init()
|
result.init()
|
||||||
|
|
||||||
// This is the value that will be used for computed properties
|
|
||||||
computedId := "computed"
|
|
||||||
|
|
||||||
// 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 t.variables {
|
||||||
|
@ -167,7 +164,7 @@ func (t *Terraform) diffWalkFn(
|
||||||
result.Resources[r.Id()] = diff.Attributes
|
result.Resources[r.Id()] = diff.Attributes
|
||||||
|
|
||||||
// Determine the new state and update variables
|
// Determine the new state and update variables
|
||||||
rs = rs.MergeDiff(diff.Attributes, computedId)
|
rs = rs.MergeDiff(diff.Attributes, ComputedPlaceholder)
|
||||||
for ak, av := range rs.Attributes {
|
for ak, av := range rs.Attributes {
|
||||||
vars[fmt.Sprintf("%s.%s", r.Id(), ak)] = av
|
vars[fmt.Sprintf("%s.%s", r.Id(), ak)] = av
|
||||||
}
|
}
|
||||||
|
|
|
@ -202,6 +202,25 @@ func TestTerraformDiff(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTerraformDiff_computed(t *testing.T) {
|
||||||
|
tf := testTerraform(t, "diff-computed")
|
||||||
|
|
||||||
|
diff, err := tf.Diff(nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(diff.Resources) < 2 {
|
||||||
|
t.Fatalf("bad: %#v", diff.Resources)
|
||||||
|
}
|
||||||
|
|
||||||
|
actual := strings.TrimSpace(testDiffStr(diff))
|
||||||
|
expected := strings.TrimSpace(testTerraformDiffComputedStr)
|
||||||
|
if actual != expected {
|
||||||
|
t.Fatalf("bad:\n%s", actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func testConfig(t *testing.T, name string) *config.Config {
|
func testConfig(t *testing.T, name string) *config.Config {
|
||||||
c, err := config.Load(filepath.Join(fixtureDir, name, "main.tf"))
|
c, err := config.Load(filepath.Join(fixtureDir, name, "main.tf"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -230,10 +249,25 @@ func testProviderFunc(n string, rs []string) ResourceProviderFactory {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
diff.Attributes[k] = &ResourceAttrDiff{
|
if k == "compute" {
|
||||||
|
diff.Attributes[v.(string)] = &ResourceAttrDiff{
|
||||||
|
Old: "",
|
||||||
|
New: "",
|
||||||
|
NewComputed: true,
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
attrDiff := &ResourceAttrDiff{
|
||||||
Old: "",
|
Old: "",
|
||||||
New: v.(string),
|
New: v.(string),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if strings.Contains(attrDiff.New, ComputedPlaceholder) {
|
||||||
|
attrDiff.NewComputed = true
|
||||||
|
}
|
||||||
|
|
||||||
|
diff.Attributes[k] = attrDiff
|
||||||
}
|
}
|
||||||
|
|
||||||
return diff, nil
|
return diff, nil
|
||||||
|
@ -326,3 +360,11 @@ aws_instance.bar
|
||||||
aws_instance.foo
|
aws_instance.foo
|
||||||
num: "" => "2"
|
num: "" => "2"
|
||||||
`
|
`
|
||||||
|
|
||||||
|
const testTerraformDiffComputedStr = `
|
||||||
|
aws_instance.bar
|
||||||
|
foo: "" => "<computed>"
|
||||||
|
aws_instance.foo
|
||||||
|
num: "" => "2"
|
||||||
|
id: "" => "<computed>"
|
||||||
|
`
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
resource "aws_instance" "foo" {
|
||||||
|
num = "2"
|
||||||
|
compute = "id"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_instance" "bar" {
|
||||||
|
foo = "${aws_instance.foo.id}"
|
||||||
|
}
|
Loading…
Reference in New Issue