From 40f00d8db5705fbf55c60a8c2571398ca543342a Mon Sep 17 00:00:00 2001 From: Martin Atkins Date: Fri, 31 Aug 2018 10:43:50 -0700 Subject: [PATCH] core: StateReferences method should return []addrs.Referenceable We no longer use strings to represent addresses, so this method was a leftover outlier from previous refactoring efforts. At this time the result is not actually being used due to the state type refactoring, which is a bug we'll address in a subsequent commit. --- terraform/node_resource_abstract.go | 13 ++++++------- terraform/node_resource_apply.go | 12 ++---------- terraform/node_resource_plan_instance.go | 4 ++-- terraform/node_resource_refresh.go | 7 +++---- 4 files changed, 13 insertions(+), 23 deletions(-) diff --git a/terraform/node_resource_abstract.go b/terraform/node_resource_abstract.go index cfd636532..f4844b90b 100644 --- a/terraform/node_resource_abstract.go +++ b/terraform/node_resource_abstract.go @@ -269,16 +269,15 @@ func dottedInstanceAddr(tr addrs.ResourceInstance) string { // StateReferences returns the dependencies to put into the state for // this resource. -func (n *NodeAbstractResource) StateReferences() []string { +func (n *NodeAbstractResource) StateReferences() []addrs.Referenceable { selfAddrs := n.ReferenceableAddrs() depsRaw := n.References() - deps := make([]string, 0, len(depsRaw)) + deps := make([]addrs.Referenceable, 0, len(depsRaw)) for _, d := range depsRaw { switch tr := d.Subject.(type) { case addrs.ResourceInstance: - key := dottedInstanceAddr(tr) - deps = append(deps, key) + deps = append(deps, tr) case addrs.Resource: depStr := tr.String() selfRef := false @@ -289,16 +288,16 @@ func (n *NodeAbstractResource) StateReferences() []string { } } if !selfRef { // Don't create self-references - deps = append(deps, tr.String()) + deps = append(deps, tr) } case addrs.ModuleCallInstance: - deps = append(deps, tr.String()) + deps = append(deps, tr) case addrs.ModuleCallOutput: // For state dependencies, we simplify outputs to just refer // to the module as a whole. It's not really clear why we do this, // but this logic is preserved from before the 0.12 rewrite of // this function. - deps = append(deps, tr.Call.String()) + deps = append(deps, tr) default: // No other reference types are recorded in the state. } diff --git a/terraform/node_resource_apply.go b/terraform/node_resource_apply.go index afc9fab16..d8d3ca881 100644 --- a/terraform/node_resource_apply.go +++ b/terraform/node_resource_apply.go @@ -100,14 +100,6 @@ func (n *NodeApplyableResourceInstance) EvalTree() EvalNode { // Determine the dependencies for the state. stateDeps := n.StateReferences() - // filter out self-references - filtered := []string{} - for _, d := range stateDeps { - if d != dottedInstanceAddr(addr.Resource) { - filtered = append(filtered, d) - } - } - stateDeps = filtered // Eval info is different depending on what kind of resource this is switch n.Config.Mode { @@ -120,7 +112,7 @@ func (n *NodeApplyableResourceInstance) EvalTree() EvalNode { } } -func (n *NodeApplyableResourceInstance) evalTreeDataResource(addr addrs.AbsResourceInstance, stateId string, stateDeps []string) EvalNode { +func (n *NodeApplyableResourceInstance) evalTreeDataResource(addr addrs.AbsResourceInstance, stateId string, stateDeps []addrs.Referenceable) EvalNode { var provider providers.Interface var providerSchema *ProviderSchema var change *plans.ResourceInstanceChange @@ -195,7 +187,7 @@ func (n *NodeApplyableResourceInstance) evalTreeDataResource(addr addrs.AbsResou } } -func (n *NodeApplyableResourceInstance) evalTreeManagedResource(addr addrs.AbsResourceInstance, stateId string, stateDeps []string) EvalNode { +func (n *NodeApplyableResourceInstance) evalTreeManagedResource(addr addrs.AbsResourceInstance, stateId string, stateDeps []addrs.Referenceable) EvalNode { // Declare a bunch of variables that are used for state during // evaluation. Most of this are written to by-address below. var provider providers.Interface diff --git a/terraform/node_resource_plan_instance.go b/terraform/node_resource_plan_instance.go index d0a7865ac..5591fc973 100644 --- a/terraform/node_resource_plan_instance.go +++ b/terraform/node_resource_plan_instance.go @@ -51,7 +51,7 @@ func (n *NodePlannableResourceInstance) EvalTree() EvalNode { } } -func (n *NodePlannableResourceInstance) evalTreeDataResource(addr addrs.AbsResourceInstance, stateId string, stateDeps []string) EvalNode { +func (n *NodePlannableResourceInstance) evalTreeDataResource(addr addrs.AbsResourceInstance, stateId string, stateDeps []addrs.Referenceable) EvalNode { config := n.Config var provider providers.Interface var providerSchema *ProviderSchema @@ -107,7 +107,7 @@ func (n *NodePlannableResourceInstance) evalTreeDataResource(addr addrs.AbsResou } } -func (n *NodePlannableResourceInstance) evalTreeManagedResource(addr addrs.AbsResourceInstance, stateId string, stateDeps []string) EvalNode { +func (n *NodePlannableResourceInstance) evalTreeManagedResource(addr addrs.AbsResourceInstance, stateId string, stateDeps []addrs.Referenceable) EvalNode { config := n.Config var provider providers.Interface var providerSchema *ProviderSchema diff --git a/terraform/node_resource_refresh.go b/terraform/node_resource_refresh.go index 43f6b4ff8..c0bff0361 100644 --- a/terraform/node_resource_refresh.go +++ b/terraform/node_resource_refresh.go @@ -2,6 +2,7 @@ package terraform import ( "fmt" + "log" "github.com/hashicorp/terraform/plans" "github.com/hashicorp/terraform/providers" @@ -133,8 +134,10 @@ func (n *NodeRefreshableManagedResourceInstance) EvalTree() EvalNode { switch addr.Resource.Resource.Mode { case addrs.ManagedResourceMode: if n.ResourceState == nil { + log.Printf("[TRACE] NodeRefreshableManagedResourceInstance: %s has no existing state to refresh", addr) return n.evalTreeManagedResourceNoState() } + log.Printf("[TRACE] NodeRefreshableManagedResourceInstance: %s will be refreshed", addr) return n.evalTreeManagedResource() case addrs.DataResourceMode: @@ -233,10 +236,6 @@ func (n *NodeRefreshableManagedResourceInstance) evalTreeManagedResourceNoState( var change *plans.ResourceInstanceChange var state *states.ResourceInstanceObject - // Determine the dependencies for the state. - // TODO: Update StateReferences to return []addrs.Referenceable - //state.Dependencies = n.StateReferences() - return &EvalSequence{ Nodes: []EvalNode{ &EvalGetProvider{