Add GraphNodeNoProvider to skip adding a providers
While the NodeDestroyResource type should not be a GraphNodeProviderConsumer, we're going to avoid uncovering more hidden behavior by explicitly skipping provider creation and connections in the provider transformers. This should be removed when more in-depth testing can be done during a major release cycle.
This commit is contained in:
parent
a6cdfad590
commit
4aa8a1cece
|
@ -277,7 +277,7 @@ func (n *NodeDestroyResourceInstance) EvalTree() EvalNode {
|
||||||
// leaving skeleton resource objects in state after their instances have
|
// leaving skeleton resource objects in state after their instances have
|
||||||
// all been destroyed.
|
// all been destroyed.
|
||||||
type NodeDestroyResource struct {
|
type NodeDestroyResource struct {
|
||||||
NodeAbstractResource *NodeAbstractResource
|
*NodeAbstractResource
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -285,10 +285,17 @@ var (
|
||||||
_ 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
|
||||||
|
// GraphNodeProviderConsumer by virtue of the embedded
|
||||||
|
// NodeAbstractResource, but that behavior is not desired and we skip it by
|
||||||
|
// checking for GraphNodeNoProvider.
|
||||||
|
_ GraphNodeProviderConsumer = (*NodeDestroyResource)(nil)
|
||||||
|
_ GraphNodeNoProvider = (*NodeDestroyResource)(nil)
|
||||||
)
|
)
|
||||||
|
|
||||||
func (n *NodeDestroyResource) Name() string {
|
func (n *NodeDestroyResource) Name() string {
|
||||||
return n.NodeAbstractResource.ResourceAddr().String() + " (clean up state)"
|
return n.ResourceAddr().String() + " (clean up state)"
|
||||||
}
|
}
|
||||||
|
|
||||||
// GraphNodeReferenceable, overriding NodeAbstractResource
|
// GraphNodeReferenceable, overriding NodeAbstractResource
|
||||||
|
@ -316,7 +323,7 @@ func (n *NodeDestroyResource) EvalTree() EvalNode {
|
||||||
// leftover husk of a resource in state after all of the child instances
|
// leftover husk of a resource in state after all of the child instances
|
||||||
// and their objects were destroyed.
|
// and their objects were destroyed.
|
||||||
return &EvalForgetResourceState{
|
return &EvalForgetResourceState{
|
||||||
Addr: n.NodeAbstractResource.ResourceAddr().Resource,
|
Addr: n.ResourceAddr().Resource,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -329,3 +336,13 @@ func (n *NodeDestroyResource) ResourceAddr() addrs.AbsResource {
|
||||||
func (n *NodeDestroyResource) Path() addrs.ModuleInstance {
|
func (n *NodeDestroyResource) Path() addrs.ModuleInstance {
|
||||||
return n.NodeAbstractResource.Path()
|
return n.NodeAbstractResource.Path()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GraphNodeNoProvider
|
||||||
|
// FIXME: this should be removed once the node can be separated from the
|
||||||
|
// Internal NodeAbstractResource behavior.
|
||||||
|
func (n *NodeDestroyResource) NoProvider() {
|
||||||
|
}
|
||||||
|
|
||||||
|
type GraphNodeNoProvider interface {
|
||||||
|
NoProvider()
|
||||||
|
}
|
||||||
|
|
|
@ -99,6 +99,13 @@ func (t *ProviderTransformer) Transform(g *Graph) error {
|
||||||
needConfigured := map[string]addrs.AbsProviderConfig{}
|
needConfigured := map[string]addrs.AbsProviderConfig{}
|
||||||
for _, v := range g.Vertices() {
|
for _, v := range g.Vertices() {
|
||||||
|
|
||||||
|
// FIXME: fix the type that implements this, so it's not a
|
||||||
|
// GraphNodeProviderConsumer.
|
||||||
|
// check if we want to skip connecting this to a provider
|
||||||
|
if _, ok := v.(GraphNodeNoProvider); ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
// Does the vertex _directly_ use a provider?
|
// Does the vertex _directly_ use a provider?
|
||||||
if pv, ok := v.(GraphNodeProviderConsumer); ok {
|
if pv, ok := v.(GraphNodeProviderConsumer); ok {
|
||||||
requested[v] = make(map[string]ProviderRequest)
|
requested[v] = make(map[string]ProviderRequest)
|
||||||
|
@ -275,6 +282,13 @@ func (t *MissingProviderTransformer) Transform(g *Graph) error {
|
||||||
var err error
|
var err error
|
||||||
m := providerVertexMap(g)
|
m := providerVertexMap(g)
|
||||||
for _, v := range g.Vertices() {
|
for _, v := range g.Vertices() {
|
||||||
|
// FIXME: fix the type that implements this, so it's not a
|
||||||
|
// GraphNodeProviderConsumer.
|
||||||
|
// check if we want to skip connecting this to a provider
|
||||||
|
if _, ok := v.(GraphNodeNoProvider); ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
pv, ok := v.(GraphNodeProviderConsumer)
|
pv, ok := v.(GraphNodeProviderConsumer)
|
||||||
if !ok {
|
if !ok {
|
||||||
continue
|
continue
|
||||||
|
|
Loading…
Reference in New Issue