helper/schema: Get on computed diff should be empty

This commit is contained in:
Mitchell Hashimoto 2014-08-27 15:43:47 -07:00
parent c9a541d95b
commit faa4e75960
2 changed files with 48 additions and 13 deletions

View File

@ -558,20 +558,25 @@ func (d *ResourceData) getPrimitive(
if d.diff != nil && source >= getSourceDiff { if d.diff != nil && source >= getSourceDiff {
attrD, ok := d.diff.Attributes[k] attrD, ok := d.diff.Attributes[k]
if ok && !attrD.NewComputed { if ok {
result = attrD.New if !attrD.NewComputed {
if attrD.NewExtra != nil { result = attrD.New
// If NewExtra != nil, then we have processed data as the New, if attrD.NewExtra != nil {
// so we store that but decode the unprocessed data into result // If NewExtra != nil, then we have processed data as the New,
resultProcessed = result // so we store that but decode the unprocessed data into result
resultProcessed = result
err := mapstructure.WeakDecode(attrD.NewExtra, &result) err := mapstructure.WeakDecode(attrD.NewExtra, &result)
if err != nil { if err != nil {
panic(err) panic(err)
}
} }
}
resultSet = true resultSet = true
} else {
result = ""
resultSet = false
}
} }
} }

View File

@ -30,8 +30,8 @@ func TestResourceDataGet(t *testing.T) {
Diff: &terraform.ResourceDiff{ Diff: &terraform.ResourceDiff{
Attributes: map[string]*terraform.ResourceAttrDiff{ Attributes: map[string]*terraform.ResourceAttrDiff{
"availability_zone": &terraform.ResourceAttrDiff{ "availability_zone": &terraform.ResourceAttrDiff{
Old: "", Old: "foo",
New: "", New: "bar",
NewComputed: true, NewComputed: true,
}, },
}, },
@ -117,6 +117,36 @@ func TestResourceDataGet(t *testing.T) {
Value: "bar", 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{ Schema: map[string]*Schema{
"port": &Schema{ "port": &Schema{