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

restrict the ComputedKeys usage to containers
pull/21251/head
James Bardin 7 years ago committed by GitHub
commit 02781206ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

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

@ -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
}
`),
},
},
})
}

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

Loading…
Cancel
Save