diff --git a/helper/schema/resource_data.go b/helper/schema/resource_data.go index 5b6329457..8f8f600f5 100644 --- a/helper/schema/resource_data.go +++ b/helper/schema/resource_data.go @@ -558,20 +558,25 @@ func (d *ResourceData) getPrimitive( if d.diff != nil && source >= getSourceDiff { attrD, ok := d.diff.Attributes[k] - if ok && !attrD.NewComputed { - result = attrD.New - if attrD.NewExtra != nil { - // If NewExtra != nil, then we have processed data as the New, - // so we store that but decode the unprocessed data into result - resultProcessed = result + if ok { + if !attrD.NewComputed { + result = attrD.New + if attrD.NewExtra != nil { + // If NewExtra != nil, then we have processed data as the New, + // so we store that but decode the unprocessed data into result + resultProcessed = result - err := mapstructure.WeakDecode(attrD.NewExtra, &result) - if err != nil { - panic(err) + err := mapstructure.WeakDecode(attrD.NewExtra, &result) + if err != nil { + panic(err) + } } - } - resultSet = true + resultSet = true + } else { + result = "" + resultSet = false + } } } diff --git a/helper/schema/resource_data_test.go b/helper/schema/resource_data_test.go index 3b630459d..7f08e4c16 100644 --- a/helper/schema/resource_data_test.go +++ b/helper/schema/resource_data_test.go @@ -30,8 +30,8 @@ func TestResourceDataGet(t *testing.T) { Diff: &terraform.ResourceDiff{ Attributes: map[string]*terraform.ResourceAttrDiff{ "availability_zone": &terraform.ResourceAttrDiff{ - Old: "", - New: "", + Old: "foo", + New: "bar", NewComputed: true, }, }, @@ -117,6 +117,36 @@ func TestResourceDataGet(t *testing.T) { Value: "bar", }, + { + Schema: map[string]*Schema{ + "availability_zone": &Schema{ + Type: TypeString, + Optional: true, + Computed: true, + ForceNew: true, + }, + }, + + State: &terraform.ResourceState{ + Attributes: map[string]string{ + "availability_zone": "foo", + }, + }, + + Diff: &terraform.ResourceDiff{ + Attributes: map[string]*terraform.ResourceAttrDiff{ + "availability_zone": &terraform.ResourceAttrDiff{ + Old: "foo", + New: "bar", + NewComputed: true, + }, + }, + }, + + Key: "availability_zone", + Value: "", + }, + { Schema: map[string]*Schema{ "port": &Schema{