Merge pull request #808 from hashicorp/b-weird-getok

helper/schema: don't put things into the state that don't exist or are computed
This commit is contained in:
Sander van Harmelen 2015-01-15 21:44:12 +01:00
commit f8cd9ebbc0
2 changed files with 65 additions and 14 deletions

View File

@ -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
// existed or not in the configuration. The second boolean result will also
// be false if a key is given that isn't in the schema at all.
// has been set.
//
// The first result will not necessarilly be nil if the value doesn't exist.
// The second result should be checked to determine this information.
@ -213,11 +212,13 @@ func (d *ResourceData) State() *terraform.InstanceState {
}
raw := d.get([]string{k}, source)
if raw.Exists && !raw.Computed {
rawMap[k] = raw.Value
if raw.ValueProcessed != nil {
rawMap[k] = raw.ValueProcessed
}
}
}
mapW := &MapFieldWriter{Schema: d.schema}
if err := mapW.WriteField(nil, rawMap); err != nil {
return nil

View File

@ -1919,9 +1919,7 @@ func TestResourceDataState(t *testing.T) {
Partial: []string{},
Result: &terraform.InstanceState{
Attributes: map[string]string{
"availability_zone": "",
},
Attributes: map[string]string{},
},
},
@ -1994,9 +1992,7 @@ func TestResourceDataState(t *testing.T) {
},
Result: &terraform.InstanceState{
Attributes: map[string]string{
"ports.#": "0",
},
Attributes: map[string]string{},
},
},
@ -2176,9 +2172,7 @@ func TestResourceDataState(t *testing.T) {
Partial: []string{},
Result: &terraform.InstanceState{
Attributes: map[string]string{
"ports.#": "0",
},
Attributes: map[string]string{},
},
},
@ -2239,6 +2233,62 @@ func TestResourceDataState(t *testing.T) {
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{},
},
},
// #22
{
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,
},
},
},
Set: map[string]interface{}{
"foo": "bar",
},
Result: &terraform.InstanceState{
Attributes: map[string]string{
"foo": "bar",
},
},
},
}
for i, tc := range cases {