Skip to content

Commit e17c404

Browse files
Use diffSuppressor instead of makeEmptyBlockSuppressFunc (#3099)
* update * update * update
1 parent d1a3302 commit e17c404

File tree

3 files changed

+12
-21
lines changed

3 files changed

+12
-21
lines changed

common/reflect_resource.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ func StructToSchema(v any, customize func(map[string]*schema.Schema) map[string]
8888
// fields for which the platform returns a value, but the user has not configured any value.
8989
// For example: the REST API returns `{"tags": {}}` for a resource with no tags.
9090
func SetSuppressDiff(v *schema.Schema) {
91-
v.DiffSuppressFunc = diffSuppressor(fmt.Sprintf("%v", v.Type.Zero()))
91+
v.DiffSuppressFunc = diffSuppressor(v)
9292
}
9393

9494
// SetDefault sets the default value for a schema.
@@ -170,7 +170,7 @@ func handleSuppressDiff(typeField reflect.StructField, v *schema.Schema) {
170170
tfTags := strings.Split(typeField.Tag.Get("tf"), ",")
171171
for _, tag := range tfTags {
172172
if tag == "suppress_diff" {
173-
v.DiffSuppressFunc = diffSuppressor(fmt.Sprintf("%v", v.Type.Zero()))
173+
v.DiffSuppressFunc = diffSuppressor(v)
174174
break
175175
}
176176
}
@@ -200,7 +200,8 @@ func chooseFieldName(typeField reflect.StructField) string {
200200
return strings.Split(jsonTag, ",")[0]
201201
}
202202

203-
func diffSuppressor(zero string) func(k, old, new string, d *schema.ResourceData) bool {
203+
func diffSuppressor(v *schema.Schema) func(k, old, new string, d *schema.ResourceData) bool {
204+
zero := fmt.Sprintf("%v", v.Type.Zero())
204205
return func(k, old, new string, d *schema.ResourceData) bool {
205206
if new == zero && old != zero {
206207
log.Printf("[DEBUG] Suppressing diff for %v: platform=%#v config=%#v", k, old, new)
@@ -319,11 +320,10 @@ func typeToSchema(v reflect.Value, path []string) map[string]*schema.Schema {
319320
sv := reflect.New(elem).Elem()
320321
nestedSchema := typeToSchema(sv, append(path, fieldName, "0"))
321322
if strings.Contains(tfTag, "suppress_diff") {
322-
blockCount := strings.Join(append(path, fieldName, "#"), ".")
323-
scm[fieldName].DiffSuppressFunc = makeEmptyBlockSuppressFunc(blockCount)
323+
scm[fieldName].DiffSuppressFunc = diffSuppressor(scm[fieldName])
324324
for _, v := range nestedSchema {
325325
// to those relatively new to GoLang: we must explicitly pass down v by copy
326-
v.DiffSuppressFunc = diffSuppressor(fmt.Sprintf("%v", v.Type.Zero()))
326+
v.DiffSuppressFunc = diffSuppressor(v)
327327
}
328328
}
329329
scm[fieldName].Elem = &schema.Resource{
@@ -338,11 +338,10 @@ func typeToSchema(v reflect.Value, path []string) map[string]*schema.Schema {
338338

339339
nestedSchema := typeToSchema(sv, append(path, fieldName, "0"))
340340
if strings.Contains(tfTag, "suppress_diff") {
341-
blockCount := strings.Join(append(path, fieldName, "#"), ".")
342-
scm[fieldName].DiffSuppressFunc = makeEmptyBlockSuppressFunc(blockCount)
341+
scm[fieldName].DiffSuppressFunc = diffSuppressor(scm[fieldName])
343342
for _, v := range nestedSchema {
344343
// to those relatively new to GoLang: we must explicitly pass down v by copy
345-
v.DiffSuppressFunc = diffSuppressor(fmt.Sprintf("%v", v.Type.Zero()))
344+
v.DiffSuppressFunc = diffSuppressor(v)
346345
}
347346
}
348347
scm[fieldName].Elem = &schema.Resource{

common/reflect_resource_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,10 @@ func TestStructToData(t *testing.T) {
424424
}
425425

426426
func TestDiffSuppressor(t *testing.T) {
427-
dsf := diffSuppressor("")
427+
stringSchema := &schema.Schema{
428+
Type: schema.TypeString,
429+
}
430+
dsf := diffSuppressor(stringSchema)
428431
d := schema.TestResourceDataRaw(t, map[string]*schema.Schema{
429432
"foo": {
430433
Type: schema.TypeBool,

common/resource.go

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -198,17 +198,6 @@ func MustCompileKeyRE(name string) *regexp.Regexp {
198198
return regexp.MustCompile(regexFromName)
199199
}
200200

201-
func makeEmptyBlockSuppressFunc(name string) func(k, old, new string, d *schema.ResourceData) bool {
202-
re := MustCompileKeyRE(name)
203-
return func(k, old, new string, d *schema.ResourceData) bool {
204-
if re.Match([]byte(name)) && old == "1" && new == "0" {
205-
log.Printf("[DEBUG] Suppressing diff for name=%s k=%#v platform=%#v config=%#v", name, k, old, new)
206-
return true
207-
}
208-
return false
209-
}
210-
}
211-
212201
// Deprecated: migrate to WorkspaceData
213202
func DataResource(sc any, read func(context.Context, any, *DatabricksClient) error) *schema.Resource {
214203
// TODO: migrate to go1.18 and get schema from second function argument?..

0 commit comments

Comments
 (0)