helper/schema: don't put things into the state that don't exist or are

computed [GH-805]
pull/808/head
Mitchell Hashimoto 11 years ago
parent 943e62222b
commit 4d067f4d6d

@ -84,8 +84,7 @@ func (d *ResourceData) GetChange(key string) (interface{}, interface{}) {
} }
// GetOk returns the data for the given key and whether or not the key // GetOk returns the data for the given key and whether or not the key
// existed or not in the configuration. The second boolean result will also // has been set.
// be false if a key is given that isn't in the schema at all.
// //
// The first result will not necessarilly be nil if the value doesn't exist. // The first result will not necessarilly be nil if the value doesn't exist.
// The second result should be checked to determine this information. // The second result should be checked to determine this information.
@ -213,9 +212,11 @@ func (d *ResourceData) State() *terraform.InstanceState {
} }
raw := d.get([]string{k}, source) raw := d.get([]string{k}, source)
rawMap[k] = raw.Value if raw.Exists && !raw.Computed {
if raw.ValueProcessed != nil { rawMap[k] = raw.Value
rawMap[k] = raw.ValueProcessed if raw.ValueProcessed != nil {
rawMap[k] = raw.ValueProcessed
}
} }
} }
mapW := &MapFieldWriter{Schema: d.schema} mapW := &MapFieldWriter{Schema: d.schema}

@ -1919,9 +1919,7 @@ func TestResourceDataState(t *testing.T) {
Partial: []string{}, Partial: []string{},
Result: &terraform.InstanceState{ Result: &terraform.InstanceState{
Attributes: map[string]string{ Attributes: map[string]string{},
"availability_zone": "",
},
}, },
}, },
@ -1994,9 +1992,7 @@ func TestResourceDataState(t *testing.T) {
}, },
Result: &terraform.InstanceState{ Result: &terraform.InstanceState{
Attributes: map[string]string{ Attributes: map[string]string{},
"ports.#": "0",
},
}, },
}, },
@ -2176,9 +2172,7 @@ func TestResourceDataState(t *testing.T) {
Partial: []string{}, Partial: []string{},
Result: &terraform.InstanceState{ Result: &terraform.InstanceState{
Attributes: map[string]string{ Attributes: map[string]string{},
"ports.#": "0",
},
}, },
}, },
@ -2239,6 +2233,31 @@ func TestResourceDataState(t *testing.T) {
Attributes: map[string]string{}, Attributes: map[string]string{},
}, },
}, },
// #21
{
Schema: map[string]*Schema{
"foo": &Schema{
Type: TypeString,
Optional: true,
Computed: true,
},
},
State: nil,
Diff: &terraform.InstanceDiff{
Attributes: map[string]*terraform.ResourceAttrDiff{
"foo": &terraform.ResourceAttrDiff{
NewComputed: true,
},
},
},
Result: &terraform.InstanceState{
Attributes: map[string]string{},
},
},
} }
for i, tc := range cases { for i, tc := range cases {

Loading…
Cancel
Save