diff --git a/helper/schema/field_writer_map.go b/helper/schema/field_writer_map.go index b9064709f6..53e4676507 100644 --- a/helper/schema/field_writer_map.go +++ b/helper/schema/field_writer_map.go @@ -141,25 +141,23 @@ func (w *MapFieldWriter) setMap( v := reflect.ValueOf(value) vs := make(map[string]interface{}) - if value != nil { - if v.Kind() != reflect.Map { - return fmt.Errorf("%s: must be a map", k) - } - if v.Type().Key().Kind() != reflect.String { - return fmt.Errorf("%s: keys must strings", k) - } - for _, mk := range v.MapKeys() { - mv := v.MapIndex(mk) - vs[mk.String()] = mv.Interface() - } - } - - if len(vs) == 0 { + if value == nil { // The empty string here means the map is removed. w.result[k] = "" return nil } + if v.Kind() != reflect.Map { + return fmt.Errorf("%s: must be a map", k) + } + if v.Type().Key().Kind() != reflect.String { + return fmt.Errorf("%s: keys must strings", k) + } + for _, mk := range v.MapKeys() { + mv := v.MapIndex(mk) + vs[mk.String()] = mv.Interface() + } + // Remove the pure key since we're setting the full map value delete(w.result, k) diff --git a/helper/schema/resource_data_test.go b/helper/schema/resource_data_test.go index 7d4fdb6a35..3a0c642763 100644 --- a/helper/schema/resource_data_test.go +++ b/helper/schema/resource_data_test.go @@ -2539,7 +2539,9 @@ func TestResourceDataState(t *testing.T) { }, Result: &terraform.InstanceState{ - Attributes: map[string]string{}, + Attributes: map[string]string{ + "tags.#": "0", + }, }, },