s/GraphNodeResource/GraphNodeConfigResource/

Make the interface name reflect the new return type of the method.
Remove the confusingly named and unused ResourceAddress method from the
resource nodes as well.
This commit is contained in:
James Bardin 2020-03-15 11:32:06 -04:00
parent a7de3d07b8
commit d905b990a5
24 changed files with 83 additions and 143 deletions

View File

@ -111,9 +111,9 @@ func evaluateResourceCountExpressionKnown(expr hcl.Expression, ctx EvalContext)
// Since the state is modified in-place, this function must take a writer lock // Since the state is modified in-place, this function must take a writer lock
// on the state. The caller must therefore not also be holding a state lock, // on the state. The caller must therefore not also be holding a state lock,
// or this function will block forever awaiting the lock. // or this function will block forever awaiting the lock.
func fixResourceCountSetTransition(ctx EvalContext, addr addrs.AbsResource, countEnabled bool) { func fixResourceCountSetTransition(ctx EvalContext, addr addrs.ConfigResource, countEnabled bool) {
state := ctx.State() state := ctx.State()
changed := state.MaybeFixUpResourceInstanceAddressForCount(addr.Config(), countEnabled) changed := state.MaybeFixUpResourceInstanceAddressForCount(addr, countEnabled)
if changed { if changed {
log.Printf("[TRACE] renamed first %s instance in transient state due to count argument change", addr) log.Printf("[TRACE] renamed first %s instance in transient state due to count argument change", addr)
} }

View File

@ -69,7 +69,7 @@ func (n *EvalCountFixZeroOneBoundaryGlobal) fixModule(ctx EvalContext, moduleAdd
continue continue
} }
hasCount := rCfg.Count != nil hasCount := rCfg.Count != nil
fixResourceCountSetTransition(ctx, r.Addr, hasCount) fixResourceCountSetTransition(ctx, r.Addr.Config(), hasCount)
} }
return nil return nil

View File

@ -19,7 +19,7 @@ var (
_ GraphNodeDynamicExpandable = (*NodeRefreshableDataResource)(nil) _ GraphNodeDynamicExpandable = (*NodeRefreshableDataResource)(nil)
_ GraphNodeReferenceable = (*NodeRefreshableDataResource)(nil) _ GraphNodeReferenceable = (*NodeRefreshableDataResource)(nil)
_ GraphNodeReferencer = (*NodeRefreshableDataResource)(nil) _ GraphNodeReferencer = (*NodeRefreshableDataResource)(nil)
_ GraphNodeResource = (*NodeRefreshableDataResource)(nil) _ GraphNodeConfigResource = (*NodeRefreshableDataResource)(nil)
_ GraphNodeAttachResourceConfig = (*NodeRefreshableDataResource)(nil) _ GraphNodeAttachResourceConfig = (*NodeRefreshableDataResource)(nil)
_ GraphNodeAttachProviderMetaConfigs = (*NodeAbstractResource)(nil) _ GraphNodeAttachProviderMetaConfigs = (*NodeAbstractResource)(nil)
) )

View File

@ -16,11 +16,11 @@ import (
// abstract resource to a concrete one of some type. // abstract resource to a concrete one of some type.
type ConcreteResourceNodeFunc func(*NodeAbstractResource) dag.Vertex type ConcreteResourceNodeFunc func(*NodeAbstractResource) dag.Vertex
// GraphNodeResource is implemented by any nodes that represent a resource. // GraphNodeConfigResource is implemented by any nodes that represent a resource.
// The type of operation cannot be assumed, only that this node represents // The type of operation cannot be assumed, only that this node represents
// the given resource. // the given resource.
type GraphNodeResource interface { type GraphNodeConfigResource interface {
ResourceAddr() addrs.AbsResource ResourceAddr() addrs.ConfigResource
} }
// ConcreteResourceInstanceNodeFunc is a callback type used to convert an // ConcreteResourceInstanceNodeFunc is a callback type used to convert an
@ -69,7 +69,7 @@ var (
_ GraphNodeReferencer = (*NodeAbstractResource)(nil) _ GraphNodeReferencer = (*NodeAbstractResource)(nil)
_ GraphNodeProviderConsumer = (*NodeAbstractResource)(nil) _ GraphNodeProviderConsumer = (*NodeAbstractResource)(nil)
_ GraphNodeProvisionerConsumer = (*NodeAbstractResource)(nil) _ GraphNodeProvisionerConsumer = (*NodeAbstractResource)(nil)
_ GraphNodeResource = (*NodeAbstractResource)(nil) _ GraphNodeConfigResource = (*NodeAbstractResource)(nil)
_ GraphNodeAttachResourceConfig = (*NodeAbstractResource)(nil) _ GraphNodeAttachResourceConfig = (*NodeAbstractResource)(nil)
_ GraphNodeAttachResourceSchema = (*NodeAbstractResource)(nil) _ GraphNodeAttachResourceSchema = (*NodeAbstractResource)(nil)
_ GraphNodeAttachProvisionerSchema = (*NodeAbstractResource)(nil) _ GraphNodeAttachProvisionerSchema = (*NodeAbstractResource)(nil)
@ -117,7 +117,7 @@ var (
_ GraphNodeReferencer = (*NodeAbstractResourceInstance)(nil) _ GraphNodeReferencer = (*NodeAbstractResourceInstance)(nil)
_ GraphNodeProviderConsumer = (*NodeAbstractResourceInstance)(nil) _ GraphNodeProviderConsumer = (*NodeAbstractResourceInstance)(nil)
_ GraphNodeProvisionerConsumer = (*NodeAbstractResourceInstance)(nil) _ GraphNodeProvisionerConsumer = (*NodeAbstractResourceInstance)(nil)
_ GraphNodeResource = (*NodeAbstractResourceInstance)(nil) _ GraphNodeConfigResource = (*NodeAbstractResourceInstance)(nil)
_ GraphNodeResourceInstance = (*NodeAbstractResourceInstance)(nil) _ GraphNodeResourceInstance = (*NodeAbstractResourceInstance)(nil)
_ GraphNodeAttachResourceState = (*NodeAbstractResourceInstance)(nil) _ GraphNodeAttachResourceState = (*NodeAbstractResourceInstance)(nil)
_ GraphNodeAttachResourceConfig = (*NodeAbstractResourceInstance)(nil) _ GraphNodeAttachResourceConfig = (*NodeAbstractResourceInstance)(nil)
@ -375,8 +375,8 @@ func (n *NodeAbstractResource) AttachProvisionerSchema(name string, schema *conf
} }
// GraphNodeResource // GraphNodeResource
func (n *NodeAbstractResource) ResourceAddr() addrs.AbsResource { func (n *NodeAbstractResource) ResourceAddr() addrs.ConfigResource {
return n.addr() return n.Addr
} }
// GraphNodeResourceInstance // GraphNodeResourceInstance
@ -384,11 +384,6 @@ func (n *NodeAbstractResourceInstance) ResourceInstanceAddr() addrs.AbsResourceI
return n.NodeAbstractResource.addr().Instance(n.InstanceKey) return n.NodeAbstractResource.addr().Instance(n.InstanceKey)
} }
// GraphNodeAddressable, TODO: remove, used by target, should unify
func (n *NodeAbstractResource) ResourceAddress() *ResourceAddress {
return NewLegacyResourceAddress(n.addr())
}
// GraphNodeTargetable // GraphNodeTargetable
func (n *NodeAbstractResource) SetTargets(targets []addrs.Targetable) { func (n *NodeAbstractResource) SetTargets(targets []addrs.Targetable) {
n.Targets = targets n.Targets = targets

View File

@ -21,7 +21,7 @@ type NodeApplyableResource struct {
} }
var ( var (
_ GraphNodeResource = (*NodeApplyableResource)(nil) _ GraphNodeConfigResource = (*NodeApplyableResource)(nil)
_ GraphNodeEvalable = (*NodeApplyableResource)(nil) _ GraphNodeEvalable = (*NodeApplyableResource)(nil)
_ GraphNodeProviderConsumer = (*NodeApplyableResource)(nil) _ GraphNodeProviderConsumer = (*NodeApplyableResource)(nil)
_ GraphNodeAttachResourceConfig = (*NodeApplyableResource)(nil) _ GraphNodeAttachResourceConfig = (*NodeApplyableResource)(nil)

View File

@ -28,7 +28,7 @@ type NodeApplyableResourceInstance struct {
} }
var ( var (
_ GraphNodeResource = (*NodeApplyableResourceInstance)(nil) _ GraphNodeConfigResource = (*NodeApplyableResourceInstance)(nil)
_ GraphNodeResourceInstance = (*NodeApplyableResourceInstance)(nil) _ GraphNodeResourceInstance = (*NodeApplyableResourceInstance)(nil)
_ GraphNodeCreator = (*NodeApplyableResourceInstance)(nil) _ GraphNodeCreator = (*NodeApplyableResourceInstance)(nil)
_ GraphNodeReferencer = (*NodeApplyableResourceInstance)(nil) _ GraphNodeReferencer = (*NodeApplyableResourceInstance)(nil)
@ -99,8 +99,13 @@ func (n *NodeApplyableResourceInstance) References() []*addrs.Reference {
} }
// GraphNodeAttachDependencies // GraphNodeAttachDependencies
func (n *NodeApplyableResourceInstance) AttachDependencies(deps []addrs.AbsResource) { func (n *NodeApplyableResourceInstance) AttachDependencies(deps []addrs.ConfigResource) {
n.Dependencies = deps var shimmed []addrs.AbsResource
for _, r := range deps {
shimmed = append(shimmed, r.Absolute(r.Module.UnkeyedInstanceShim()))
}
n.Dependencies = shimmed
} }
// GraphNodeEvalable // GraphNodeEvalable

View File

@ -26,7 +26,7 @@ type NodeDestroyResourceInstance struct {
} }
var ( var (
_ GraphNodeResource = (*NodeDestroyResourceInstance)(nil) _ GraphNodeConfigResource = (*NodeDestroyResourceInstance)(nil)
_ GraphNodeResourceInstance = (*NodeDestroyResourceInstance)(nil) _ GraphNodeResourceInstance = (*NodeDestroyResourceInstance)(nil)
_ GraphNodeDestroyer = (*NodeDestroyResourceInstance)(nil) _ GraphNodeDestroyer = (*NodeDestroyResourceInstance)(nil)
_ GraphNodeDestroyerCBD = (*NodeDestroyResourceInstance)(nil) _ GraphNodeDestroyerCBD = (*NodeDestroyResourceInstance)(nil)
@ -292,10 +292,10 @@ type NodeDestroyResource struct {
} }
var ( var (
_ GraphNodeResource = (*NodeDestroyResource)(nil) _ GraphNodeConfigResource = (*NodeDestroyResource)(nil)
_ GraphNodeReferenceable = (*NodeDestroyResource)(nil) _ GraphNodeReferenceable = (*NodeDestroyResource)(nil)
_ GraphNodeReferencer = (*NodeDestroyResource)(nil) _ GraphNodeReferencer = (*NodeDestroyResource)(nil)
_ GraphNodeEvalable = (*NodeDestroyResource)(nil) _ GraphNodeEvalable = (*NodeDestroyResource)(nil)
// FIXME: this is here to document that this node is both // FIXME: this is here to document that this node is both
// GraphNodeProviderConsumer by virtue of the embedded // GraphNodeProviderConsumer by virtue of the embedded
@ -339,7 +339,7 @@ func (n *NodeDestroyResource) EvalTree() EvalNode {
} }
// GraphNodeResource // GraphNodeResource
func (n *NodeDestroyResource) ResourceAddr() addrs.AbsResource { func (n *NodeDestroyResource) ResourceAddr() addrs.ConfigResource {
return n.NodeAbstractResource.ResourceAddr() return n.NodeAbstractResource.ResourceAddr()
} }

View File

@ -33,7 +33,7 @@ type NodePlanDeposedResourceInstanceObject struct {
var ( var (
_ GraphNodeDeposedResourceInstanceObject = (*NodePlanDeposedResourceInstanceObject)(nil) _ GraphNodeDeposedResourceInstanceObject = (*NodePlanDeposedResourceInstanceObject)(nil)
_ GraphNodeResource = (*NodePlanDeposedResourceInstanceObject)(nil) _ GraphNodeConfigResource = (*NodePlanDeposedResourceInstanceObject)(nil)
_ GraphNodeResourceInstance = (*NodePlanDeposedResourceInstanceObject)(nil) _ GraphNodeResourceInstance = (*NodePlanDeposedResourceInstanceObject)(nil)
_ GraphNodeReferenceable = (*NodePlanDeposedResourceInstanceObject)(nil) _ GraphNodeReferenceable = (*NodePlanDeposedResourceInstanceObject)(nil)
_ GraphNodeReferencer = (*NodePlanDeposedResourceInstanceObject)(nil) _ GraphNodeReferencer = (*NodePlanDeposedResourceInstanceObject)(nil)
@ -167,7 +167,7 @@ type NodeDestroyDeposedResourceInstanceObject struct {
var ( var (
_ GraphNodeDeposedResourceInstanceObject = (*NodeDestroyDeposedResourceInstanceObject)(nil) _ GraphNodeDeposedResourceInstanceObject = (*NodeDestroyDeposedResourceInstanceObject)(nil)
_ GraphNodeResource = (*NodeDestroyDeposedResourceInstanceObject)(nil) _ GraphNodeConfigResource = (*NodeDestroyDeposedResourceInstanceObject)(nil)
_ GraphNodeResourceInstance = (*NodeDestroyDeposedResourceInstanceObject)(nil) _ GraphNodeResourceInstance = (*NodeDestroyDeposedResourceInstanceObject)(nil)
_ GraphNodeDestroyer = (*NodeDestroyDeposedResourceInstanceObject)(nil) _ GraphNodeDestroyer = (*NodeDestroyDeposedResourceInstanceObject)(nil)
_ GraphNodeDestroyerCBD = (*NodeDestroyDeposedResourceInstanceObject)(nil) _ GraphNodeDestroyerCBD = (*NodeDestroyDeposedResourceInstanceObject)(nil)

View File

@ -23,7 +23,7 @@ var (
_ GraphNodeDynamicExpandable = (*NodePlannableResource)(nil) _ GraphNodeDynamicExpandable = (*NodePlannableResource)(nil)
_ GraphNodeReferenceable = (*NodePlannableResource)(nil) _ GraphNodeReferenceable = (*NodePlannableResource)(nil)
_ GraphNodeReferencer = (*NodePlannableResource)(nil) _ GraphNodeReferencer = (*NodePlannableResource)(nil)
_ GraphNodeResource = (*NodePlannableResource)(nil) _ GraphNodeConfigResource = (*NodePlannableResource)(nil)
_ GraphNodeAttachResourceConfig = (*NodePlannableResource)(nil) _ GraphNodeAttachResourceConfig = (*NodePlannableResource)(nil)
) )

View File

@ -21,7 +21,7 @@ var (
_ GraphNodeReferenceable = (*NodePlanDestroyableResourceInstance)(nil) _ GraphNodeReferenceable = (*NodePlanDestroyableResourceInstance)(nil)
_ GraphNodeReferencer = (*NodePlanDestroyableResourceInstance)(nil) _ GraphNodeReferencer = (*NodePlanDestroyableResourceInstance)(nil)
_ GraphNodeDestroyer = (*NodePlanDestroyableResourceInstance)(nil) _ GraphNodeDestroyer = (*NodePlanDestroyableResourceInstance)(nil)
_ GraphNodeResource = (*NodePlanDestroyableResourceInstance)(nil) _ GraphNodeConfigResource = (*NodePlanDestroyableResourceInstance)(nil)
_ GraphNodeResourceInstance = (*NodePlanDestroyableResourceInstance)(nil) _ GraphNodeResourceInstance = (*NodePlanDestroyableResourceInstance)(nil)
_ GraphNodeAttachResourceConfig = (*NodePlanDestroyableResourceInstance)(nil) _ GraphNodeAttachResourceConfig = (*NodePlanDestroyableResourceInstance)(nil)
_ GraphNodeAttachResourceState = (*NodePlanDestroyableResourceInstance)(nil) _ GraphNodeAttachResourceState = (*NodePlanDestroyableResourceInstance)(nil)

View File

@ -23,7 +23,7 @@ var (
_ GraphNodeModuleInstance = (*NodePlannableResourceInstance)(nil) _ GraphNodeModuleInstance = (*NodePlannableResourceInstance)(nil)
_ GraphNodeReferenceable = (*NodePlannableResourceInstance)(nil) _ GraphNodeReferenceable = (*NodePlannableResourceInstance)(nil)
_ GraphNodeReferencer = (*NodePlannableResourceInstance)(nil) _ GraphNodeReferencer = (*NodePlannableResourceInstance)(nil)
_ GraphNodeResource = (*NodePlannableResourceInstance)(nil) _ GraphNodeConfigResource = (*NodePlannableResourceInstance)(nil)
_ GraphNodeResourceInstance = (*NodePlannableResourceInstance)(nil) _ GraphNodeResourceInstance = (*NodePlannableResourceInstance)(nil)
_ GraphNodeAttachResourceConfig = (*NodePlannableResourceInstance)(nil) _ GraphNodeAttachResourceConfig = (*NodePlannableResourceInstance)(nil)
_ GraphNodeAttachResourceState = (*NodePlannableResourceInstance)(nil) _ GraphNodeAttachResourceState = (*NodePlannableResourceInstance)(nil)

View File

@ -16,7 +16,7 @@ var (
_ GraphNodeModuleInstance = (*NodePlannableResourceInstanceOrphan)(nil) _ GraphNodeModuleInstance = (*NodePlannableResourceInstanceOrphan)(nil)
_ GraphNodeReferenceable = (*NodePlannableResourceInstanceOrphan)(nil) _ GraphNodeReferenceable = (*NodePlannableResourceInstanceOrphan)(nil)
_ GraphNodeReferencer = (*NodePlannableResourceInstanceOrphan)(nil) _ GraphNodeReferencer = (*NodePlannableResourceInstanceOrphan)(nil)
_ GraphNodeResource = (*NodePlannableResourceInstanceOrphan)(nil) _ GraphNodeConfigResource = (*NodePlannableResourceInstanceOrphan)(nil)
_ GraphNodeResourceInstance = (*NodePlannableResourceInstanceOrphan)(nil) _ GraphNodeResourceInstance = (*NodePlannableResourceInstanceOrphan)(nil)
_ GraphNodeAttachResourceConfig = (*NodePlannableResourceInstanceOrphan)(nil) _ GraphNodeAttachResourceConfig = (*NodePlannableResourceInstanceOrphan)(nil)
_ GraphNodeAttachResourceState = (*NodePlannableResourceInstanceOrphan)(nil) _ GraphNodeAttachResourceState = (*NodePlannableResourceInstanceOrphan)(nil)

View File

@ -28,14 +28,19 @@ var (
_ GraphNodeDynamicExpandable = (*NodeRefreshableManagedResource)(nil) _ GraphNodeDynamicExpandable = (*NodeRefreshableManagedResource)(nil)
_ GraphNodeReferenceable = (*NodeRefreshableManagedResource)(nil) _ GraphNodeReferenceable = (*NodeRefreshableManagedResource)(nil)
_ GraphNodeReferencer = (*NodeRefreshableManagedResource)(nil) _ GraphNodeReferencer = (*NodeRefreshableManagedResource)(nil)
_ GraphNodeResource = (*NodeRefreshableManagedResource)(nil) _ GraphNodeConfigResource = (*NodeRefreshableManagedResource)(nil)
_ GraphNodeAttachResourceConfig = (*NodeRefreshableManagedResource)(nil) _ GraphNodeAttachResourceConfig = (*NodeRefreshableManagedResource)(nil)
_ GraphNodeAttachDependencies = (*NodeRefreshableManagedResource)(nil) _ GraphNodeAttachDependencies = (*NodeRefreshableManagedResource)(nil)
) )
// GraphNodeAttachDependencies // GraphNodeAttachDependencies
func (n *NodeRefreshableManagedResource) AttachDependencies(deps []addrs.AbsResource) { func (n *NodeRefreshableManagedResource) AttachDependencies(deps []addrs.ConfigResource) {
n.Dependencies = deps var shimmed []addrs.AbsResource
for _, r := range deps {
shimmed = append(shimmed, r.Absolute(r.Module.UnkeyedInstanceShim()))
}
n.Dependencies = shimmed
} }
// GraphNodeDynamicExpandable // GraphNodeDynamicExpandable
@ -144,7 +149,7 @@ var (
_ GraphNodeReferenceable = (*NodeRefreshableManagedResourceInstance)(nil) _ GraphNodeReferenceable = (*NodeRefreshableManagedResourceInstance)(nil)
_ GraphNodeReferencer = (*NodeRefreshableManagedResourceInstance)(nil) _ GraphNodeReferencer = (*NodeRefreshableManagedResourceInstance)(nil)
_ GraphNodeDestroyer = (*NodeRefreshableManagedResourceInstance)(nil) _ GraphNodeDestroyer = (*NodeRefreshableManagedResourceInstance)(nil)
_ GraphNodeResource = (*NodeRefreshableManagedResourceInstance)(nil) _ GraphNodeConfigResource = (*NodeRefreshableManagedResourceInstance)(nil)
_ GraphNodeResourceInstance = (*NodeRefreshableManagedResourceInstance)(nil) _ GraphNodeResourceInstance = (*NodeRefreshableManagedResourceInstance)(nil)
_ GraphNodeAttachResourceConfig = (*NodeRefreshableManagedResourceInstance)(nil) _ GraphNodeAttachResourceConfig = (*NodeRefreshableManagedResourceInstance)(nil)
_ GraphNodeAttachResourceState = (*NodeRefreshableManagedResourceInstance)(nil) _ GraphNodeAttachResourceState = (*NodeRefreshableManagedResourceInstance)(nil)

View File

@ -18,7 +18,7 @@ var (
_ GraphNodeEvalable = (*NodeValidatableResource)(nil) _ GraphNodeEvalable = (*NodeValidatableResource)(nil)
_ GraphNodeReferenceable = (*NodeValidatableResource)(nil) _ GraphNodeReferenceable = (*NodeValidatableResource)(nil)
_ GraphNodeReferencer = (*NodeValidatableResource)(nil) _ GraphNodeReferencer = (*NodeValidatableResource)(nil)
_ GraphNodeResource = (*NodeValidatableResource)(nil) _ GraphNodeConfigResource = (*NodeValidatableResource)(nil)
_ GraphNodeAttachResourceConfig = (*NodeValidatableResource)(nil) _ GraphNodeAttachResourceConfig = (*NodeValidatableResource)(nil)
_ GraphNodeAttachProviderMetaConfigs = (*NodeValidatableResource)(nil) _ GraphNodeAttachProviderMetaConfigs = (*NodeValidatableResource)(nil)
) )

View File

@ -3,7 +3,6 @@ package terraform
import ( import (
"fmt" "fmt"
"reflect" "reflect"
"strconv"
"testing" "testing"
"github.com/hashicorp/terraform/configs/configschema" "github.com/hashicorp/terraform/configs/configschema"
@ -13,63 +12,6 @@ import (
"github.com/mitchellh/reflectwalk" "github.com/mitchellh/reflectwalk"
) )
func TestInstanceInfoResourceAddress(t *testing.T) {
tests := []struct {
Input *InstanceInfo
Want string
}{
{
&InstanceInfo{
Id: "test_resource.baz",
},
"test_resource.baz",
},
{
&InstanceInfo{
Id: "test_resource.baz",
ModulePath: rootModulePath,
},
"test_resource.baz",
},
{
&InstanceInfo{
Id: "test_resource.baz",
ModulePath: []string{"root", "foo"},
},
"module.foo.test_resource.baz",
},
{
&InstanceInfo{
Id: "test_resource.baz",
ModulePath: []string{"root", "foo", "bar"},
},
"module.foo.module.bar.test_resource.baz",
},
{
&InstanceInfo{
Id: "test_resource.baz (tainted)",
},
"test_resource.baz.tainted",
},
{
&InstanceInfo{
Id: "test_resource.baz (deposed #0)",
},
"test_resource.baz.deposed",
},
}
for i, test := range tests {
t.Run(strconv.Itoa(i), func(t *testing.T) {
gotAddr := test.Input.ResourceAddress()
got := gotAddr.String()
if got != test.Want {
t.Fatalf("wrong result\ngot: %s\nwant: %s", got, test.Want)
}
})
}
}
func TestResourceConfigGet(t *testing.T) { func TestResourceConfigGet(t *testing.T) {
fooStringSchema := &configschema.Block{ fooStringSchema := &configschema.Block{
Attributes: map[string]*configschema.Attribute{ Attributes: map[string]*configschema.Attribute{

View File

@ -8,7 +8,7 @@ import (
// GraphNodeAttachProviderMetaConfigs is an interface that must be implemented // GraphNodeAttachProviderMetaConfigs is an interface that must be implemented
// by nodes that want provider meta configurations attached. // by nodes that want provider meta configurations attached.
type GraphNodeAttachProviderMetaConfigs interface { type GraphNodeAttachProviderMetaConfigs interface {
GraphNodeResource GraphNodeConfigResource
// Sets the configuration // Sets the configuration
AttachProviderMetaConfigs(map[addrs.Provider]*configs.ProviderMeta) AttachProviderMetaConfigs(map[addrs.Provider]*configs.ProviderMeta)

View File

@ -10,7 +10,7 @@ import (
// GraphNodeAttachResourceConfig is an interface that must be implemented by nodes // GraphNodeAttachResourceConfig is an interface that must be implemented by nodes
// that want resource configurations attached. // that want resource configurations attached.
type GraphNodeAttachResourceConfig interface { type GraphNodeAttachResourceConfig interface {
GraphNodeResource GraphNodeConfigResource
// Sets the configuration // Sets the configuration
AttachResourceConfig(*configs.Resource) AttachResourceConfig(*configs.Resource)
@ -40,7 +40,7 @@ func (t *AttachResourceConfigTransformer) Transform(g *Graph) error {
addr := arn.ResourceAddr() addr := arn.ResourceAddr()
// Get the configuration. // Get the configuration.
config := t.Config.DescendentForInstance(addr.Module) config := t.Config.Descendent(addr.Module)
if config == nil { if config == nil {
log.Printf("[TRACE] AttachResourceConfigTransformer: %q (%T) has no configuration available", dag.VertexName(v), v) log.Printf("[TRACE] AttachResourceConfigTransformer: %q (%T) has no configuration available", dag.VertexName(v), v)
continue continue

View File

@ -13,7 +13,7 @@ import (
// GraphNodeAttachResourceSchema is an interface implemented by node types // GraphNodeAttachResourceSchema is an interface implemented by node types
// that need a resource schema attached. // that need a resource schema attached.
type GraphNodeAttachResourceSchema interface { type GraphNodeAttachResourceSchema interface {
GraphNodeResource GraphNodeConfigResource
GraphNodeProviderConsumer GraphNodeProviderConsumer
AttachResourceSchema(schema *configschema.Block, version uint64) AttachResourceSchema(schema *configschema.Block, version uint64)

View File

@ -36,9 +36,9 @@ func (t *DiffTransformer) Transform(g *Graph) error {
// get evaluated before any of the corresponding instances by creating // get evaluated before any of the corresponding instances by creating
// dependency edges, so we'll do some prep work here to ensure we'll only // dependency edges, so we'll do some prep work here to ensure we'll only
// create connections to nodes that existed before we started here. // create connections to nodes that existed before we started here.
resourceNodes := map[string][]GraphNodeResource{} resourceNodes := map[string][]GraphNodeConfigResource{}
for _, node := range g.Vertices() { for _, node := range g.Vertices() {
rn, ok := node.(GraphNodeResource) rn, ok := node.(GraphNodeConfigResource)
if !ok { if !ok {
continue continue
} }

View File

@ -18,44 +18,39 @@ import (
type OrphanResourceCountTransformer struct { type OrphanResourceCountTransformer struct {
Concrete ConcreteResourceInstanceNodeFunc Concrete ConcreteResourceInstanceNodeFunc
Addr addrs.AbsResource // Addr of the resource to look for orphans Addr addrs.ConfigResource // Addr of the resource to look for orphans
InstanceAddrs []addrs.AbsResourceInstance // Addresses that currently exist in config InstanceAddrs []addrs.AbsResourceInstance // Addresses that currently exist in config
State *states.State // Full global state State *states.State // Full global state
} }
func (t *OrphanResourceCountTransformer) Transform(g *Graph) error { func (t *OrphanResourceCountTransformer) Transform(g *Graph) error {
// FIXME: This is currently assuming that all of the instances of resources := t.State.Resources(t.Addr)
// this resource belong to a single module instance, which is true if len(resources) == 0 {
// at the time of writing this because Terraform Core doesn't support
// repetition of module calls yet, but this will need to be corrected
// in order to support count and for_each on module calls, where
// our t.InstanceAddrs may contain resource instances from many different
// module instances.
rs := t.State.Resource(t.Addr)
if rs == nil {
return nil // Resource doesn't exist in state, so nothing to do! return nil // Resource doesn't exist in state, so nothing to do!
} }
// This is an O(n*m) analysis, which we accept for now because the for _, rs := range resources {
// number of instances of a single resource ought to always be small in any // This is an O(n*m) analysis, which we accept for now because the
// reasonable Terraform configuration. // number of instances of a single resource ought to always be small in any
Have: // reasonable Terraform configuration.
for key := range rs.Instances { Have:
thisAddr := t.Addr.Instance(key) for key := range rs.Instances {
for _, wantAddr := range t.InstanceAddrs { thisAddr := rs.Addr.Instance(key)
if wantAddr.Equal(thisAddr) { for _, wantAddr := range t.InstanceAddrs {
continue Have if wantAddr.Equal(thisAddr) {
continue Have
}
} }
} // If thisAddr is not in t.InstanceAddrs then we've found an "orphan"
// If thisAddr is not in t.InstanceAddrs then we've found an "orphan"
abstract := NewNodeAbstractResourceInstance(thisAddr) abstract := NewNodeAbstractResourceInstance(thisAddr)
var node dag.Vertex = abstract var node dag.Vertex = abstract
if f := t.Concrete; f != nil { if f := t.Concrete; f != nil {
node = f(abstract) node = f(abstract)
}
log.Printf("[TRACE] OrphanResourceCountTransformer: adding %s as %T", thisAddr, node)
g.Add(node)
} }
log.Printf("[TRACE] OrphanResourceCountTransformer: adding %s as %T", thisAddr, node)
g.Add(node)
} }
return nil return nil

View File

@ -137,7 +137,7 @@ func (t *OrphanResourceTransformer) Transform(g *Graph) error {
case GraphNodeResourceInstance: case GraphNodeResourceInstance:
k := tv.ResourceInstanceAddr().ContainingResource().String() k := tv.ResourceInstanceAddr().ContainingResource().String()
deps[k] = append(deps[k], v) deps[k] = append(deps[k], v)
case GraphNodeResource: case GraphNodeConfigResource:
k := tv.ResourceAddr().String() k := tv.ResourceAddr().String()
deps[k] = append(deps[k], v) deps[k] = append(deps[k], v)
case GraphNodeDestroyer: case GraphNodeDestroyer:

View File

@ -41,8 +41,8 @@ type GraphNodeReferencer interface {
} }
type GraphNodeAttachDependencies interface { type GraphNodeAttachDependencies interface {
GraphNodeResource GraphNodeConfigResource
AttachDependencies([]addrs.AbsResource) AttachDependencies([]addrs.ConfigResource)
} }
// GraphNodeReferenceOutside is an interface that can optionally be implemented. // GraphNodeReferenceOutside is an interface that can optionally be implemented.
@ -116,6 +116,8 @@ type AttachDependenciesTransformer struct {
} }
func (t AttachDependenciesTransformer) Transform(g *Graph) error { func (t AttachDependenciesTransformer) Transform(g *Graph) error {
// FIXME: this is only working with ResourceConfigAddr for now
for _, v := range g.Vertices() { for _, v := range g.Vertices() {
attacher, ok := v.(GraphNodeAttachDependencies) attacher, ok := v.(GraphNodeAttachDependencies)
if !ok { if !ok {
@ -135,15 +137,15 @@ func (t AttachDependenciesTransformer) Transform(g *Graph) error {
// dedupe addrs when there's multiple instances involved, or // dedupe addrs when there's multiple instances involved, or
// multiple paths in the un-reduced graph // multiple paths in the un-reduced graph
depMap := map[string]addrs.AbsResource{} depMap := map[string]addrs.ConfigResource{}
for _, d := range ans { for _, d := range ans {
var addr addrs.AbsResource var addr addrs.ConfigResource
switch d := d.(type) { switch d := d.(type) {
case GraphNodeResourceInstance: case GraphNodeResourceInstance:
instAddr := d.ResourceInstanceAddr() instAddr := d.ResourceInstanceAddr()
addr = instAddr.Resource.Resource.Absolute(instAddr.Module) addr = instAddr.ContainingResource().Config()
case GraphNodeResource: case GraphNodeConfigResource:
addr = d.ResourceAddr() addr = d.ResourceAddr()
default: default:
continue continue
@ -160,7 +162,7 @@ func (t AttachDependenciesTransformer) Transform(g *Graph) error {
depMap[addr.String()] = addr depMap[addr.String()] = addr
} }
deps := make([]addrs.AbsResource, 0, len(depMap)) deps := make([]addrs.ConfigResource, 0, len(depMap))
for _, d := range depMap { for _, d := range depMap {
deps = append(deps, d) deps = append(deps, d)
} }

View File

@ -16,7 +16,7 @@ type ResourceCountTransformer struct {
Concrete ConcreteResourceInstanceNodeFunc Concrete ConcreteResourceInstanceNodeFunc
Schema *configschema.Block Schema *configschema.Block
Addr addrs.AbsResource Addr addrs.ConfigResource
InstanceAddrs []addrs.AbsResourceInstance InstanceAddrs []addrs.AbsResourceInstance
} }

View File

@ -58,7 +58,7 @@ func (t *TargetsTransformer) Transform(g *Graph) error {
for _, v := range g.Vertices() { for _, v := range g.Vertices() {
removable := false removable := false
if _, ok := v.(GraphNodeResource); ok { if _, ok := v.(GraphNodeConfigResource); ok {
removable = true removable = true
} }
@ -225,16 +225,12 @@ func (t *TargetsTransformer) nodeIsTarget(v dag.Vertex, targets []addrs.Targetab
switch r := v.(type) { switch r := v.(type) {
case GraphNodeResourceInstance: case GraphNodeResourceInstance:
vertexAddr = r.ResourceInstanceAddr() vertexAddr = r.ResourceInstanceAddr()
case GraphNodeResource: case GraphNodeConfigResource:
vertexAddr = r.ResourceAddr() vertexAddr = r.ResourceAddr()
default: default:
// Only resource and resource instance nodes can be targeted. // Only resource and resource instance nodes can be targeted.
return false return false
} }
_, ok := v.(GraphNodeResource)
if !ok {
return false
}
for _, targetAddr := range targets { for _, targetAddr := range targets {
if t.IgnoreIndices { if t.IgnoreIndices {