Skip to content

Commit

Permalink
update ignore_changes to use cty.Path.Equals
Browse files Browse the repository at this point in the history
Remove reflect.DeepEqual from path comparisons to get reliable results.

The equality issues were only noticed going the grpc interface, so add a
corresponding test to the test provider.
  • Loading branch information
jbardin committed Jul 10, 2019
1 parent e4fbc49 commit a0338df
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 2 deletions.
83 changes: 83 additions & 0 deletions builtin/providers/test/resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1086,3 +1086,86 @@ resource "test_resource" "foo" {
},
})
}

// Verify we can use use numeric indices in `ignore_changes` paths.
func TestResource_ignoreChangesIndex(t *testing.T) {
resource.UnitTest(t, resource.TestCase{
Providers: testAccProviders,
CheckDestroy: testAccCheckResourceDestroy,
Steps: []resource.TestStep{
resource.TestStep{
Config: strings.TrimSpace(`
resource "test_resource" "foo" {
required = "yep"
required_map = {
key = "value"
}
list_of_map = [
{
a = "b"
}
]
lifecycle {
ignore_changes = [list_of_map[0]["a"]]
}
}
`),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr(
"test_resource.foo", "list_of_map.0.a", "b",
),
),
},
resource.TestStep{
Config: strings.TrimSpace(`
resource "test_resource" "foo" {
required = "yep"
required_map = {
key = "value"
}
list_of_map = [
{
a = "c"
}
]
lifecycle {
ignore_changes = [list_of_map[0]["a"]]
}
}
`),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr(
"test_resource.foo", "list_of_map.0.a", "b",
),
),
},
// set ignore_changes to a prefix of the changed value
resource.TestStep{
Config: strings.TrimSpace(`
resource "test_resource" "foo" {
required = "yep"
required_map = {
key = "value"
}
list_of_map = [
{
a = "d"
}
]
lifecycle {
ignore_changes = [list_of_map[0]]
}
}
`),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr(
"test_resource.foo", "list_of_map.0.a", "b",
),
),
},
},
})
}
3 changes: 1 addition & 2 deletions terraform/eval_diff.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"bytes"
"fmt"
"log"
"reflect"
"strings"

"github.com/hashicorp/hcl2/hcl"
Expand Down Expand Up @@ -532,7 +531,7 @@ func processIgnoreChangesIndividual(prior, proposed cty.Value, ignoreChanges []h
// away any deeper values we already produced at that point.
var ignoreTraversal hcl.Traversal
for i, candidate := range ignoreChangesPath {
if reflect.DeepEqual(path, candidate) {
if path.Equals(candidate) {
ignoreTraversal = ignoreChanges[i]
}
}
Expand Down

0 comments on commit a0338df

Please sign in to comment.