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 {
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
}
}
}

View File

@ -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{