From faa4e759609209483dda80e8da2823645ce86e24 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Wed, 27 Aug 2014 15:43:47 -0700 Subject: [PATCH] helper/schema: Get on computed diff should be empty --- helper/schema/resource_data.go | 27 +++++++++++++---------- helper/schema/resource_data_test.go | 34 +++++++++++++++++++++++++++-- 2 files changed, 48 insertions(+), 13 deletions(-) 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{