Allow for nested fields with checkKey on ResourceDiffs.

When checking if a ResourceDiff key is valid, allow for keys that exist
on sub-blocks. This allows things like diff.Clear to be called on
sub-block fields, instead of just on top-level fields.
This commit is contained in:
Paddy Carver 2018-09-05 17:29:03 -07:00
parent c886869a8c
commit 7ee4339555

View File

@ -536,11 +536,15 @@ func childAddrOf(child, parent string) bool {
// checkKey checks the key to make sure it exists and is computed. // checkKey checks the key to make sure it exists and is computed.
func (d *ResourceDiff) checkKey(key, caller string) error { func (d *ResourceDiff) checkKey(key, caller string) error {
s, ok := d.schema[key] keyParts := strings.Split(key, ".")
if !ok { var schema *Schema
schemaL := addrToSchema(keyParts, d.schema)
if len(schemaL) > 0 {
schema = schemaL[len(schemaL)-1]
} else {
return fmt.Errorf("%s: invalid key: %s", caller, key) return fmt.Errorf("%s: invalid key: %s", caller, key)
} }
if !s.Computed { if !schema.Computed {
return fmt.Errorf("%s only operates on computed keys - %s is not one", caller, key) return fmt.Errorf("%s only operates on computed keys - %s is not one", caller, key)
} }
return nil return nil