diff --git a/terraform/resource_provider.go b/terraform/resource_provider.go index d60e15109..75410c2ea 100644 --- a/terraform/resource_provider.go +++ b/terraform/resource_provider.go @@ -58,6 +58,7 @@ type ResourceProvider interface { type ResourceConfig struct { ComputedKeys []string Raw map[string]interface{} + Config map[string]interface{} } // ResourceType is a type of resource that a resource provider can manage. @@ -74,6 +75,7 @@ func NewResourceConfig(c *config.RawConfig) *ResourceConfig { return &ResourceConfig{ ComputedKeys: c.UnknownKeys(), Raw: c.Raw, + Config: c.Config(), } } diff --git a/terraform/terraform.go b/terraform/terraform.go index 846ca1de8..6a31b5838 100644 --- a/terraform/terraform.go +++ b/terraform/terraform.go @@ -278,11 +278,8 @@ func (t *Terraform) genericWalkFn( // Call the callack newVars, err := cb(&Resource{ - Id: r.Id(), - Config: &ResourceConfig{ - ComputedKeys: r.RawConfig.UnknownKeys(), - Raw: r.RawConfig.Config(), - }, + Id: r.Id(), + Config: NewResourceConfig(r.RawConfig), Diff: rd, Provider: p.Provider, State: rs, diff --git a/terraform/terraform_test.go b/terraform/terraform_test.go index c77e790b4..106e27f00 100644 --- a/terraform/terraform_test.go +++ b/terraform/terraform_test.go @@ -371,6 +371,19 @@ func testProviderFunc(n string, rs []string) ResourceProviderFactory { continue } + // If this key is not computed, then look it up in the + // cleaned config. + found := false + for _, ck := range c.ComputedKeys { + if ck == k { + found = true + break + } + } + if !found { + v = c.Config[k] + } + attrDiff := &ResourceAttrDiff{ Old: "", New: v.(string),