Merge pull request #21223 from hashicorp/jbardin/unknown-computed

restrict the ComputedKeys usage to containers
This commit is contained in:
James Bardin 2019-05-07 08:36:47 -04:00 committed by GitHub
commit 02781206ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 54 additions and 7 deletions

View File

@ -54,6 +54,11 @@ func testResource() *schema.Resource {
Computed: true,
ForceNew: true,
},
"optional_computed": {
Type: schema.TypeString,
Optional: true,
Computed: true,
},
"computed_read_only": {
Type: schema.TypeString,
Computed: true,

View File

@ -992,3 +992,40 @@ resource "test_resource" "foo" {
},
})
}
func TestResource_replacedOptionalComputed(t *testing.T) {
resource.UnitTest(t, resource.TestCase{
Providers: testAccProviders,
CheckDestroy: testAccCheckResourceDestroy,
Steps: []resource.TestStep{
resource.TestStep{
Config: strings.TrimSpace(`
resource "test_resource_nested" "a" {
}
resource "test_resource" "foo" {
required = "yep"
required_map = {
key = "value"
}
optional_computed = test_resource_nested.a.id
}
`),
},
resource.TestStep{
Config: strings.TrimSpace(`
resource "test_resource_nested" "b" {
}
resource "test_resource" "foo" {
required = "yep"
required_map = {
key = "value"
}
optional_computed = test_resource_nested.b.id
}
`),
},
},
})
}

View File

@ -2,6 +2,7 @@ package schema
import (
"fmt"
"log"
"strconv"
"strings"
"sync"
@ -94,13 +95,17 @@ func (r *ConfigFieldReader) readField(
}
if protoVersion5 {
// Check if the value itself is unknown.
// The new protocol shims will add unknown values to this list of
// ComputedKeys. THis is the only way we have to indicate that a
// collection is unknown in the config
for _, unknown := range r.Config.ComputedKeys {
if k == unknown {
return FieldReadResult{Computed: true, Exists: true}, nil
switch schema.Type {
case TypeList, TypeSet, TypeMap, typeObject:
// Check if the value itself is unknown.
// The new protocol shims will add unknown values to this list of
// ComputedKeys. This is the only way we have to indicate that a
// collection is unknown in the config
for _, unknown := range r.Config.ComputedKeys {
if k == unknown {
log.Printf("[DEBUG] setting computed for %q from ComputedKeys", k)
return FieldReadResult{Computed: true, Exists: true}, nil
}
}
}
}