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:
commit
f8cd9ebbc0
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue