terraform: missing providers need to do dependencies
This commit is contained in:
parent
7fd432b076
commit
8f58367680
|
@ -69,6 +69,18 @@ func (g *Graph) Remove(v dag.Vertex) dag.Vertex {
|
||||||
return g.Graph.Remove(v)
|
return g.Graph.Remove(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Replace is the same as dag.Graph.Replace
|
||||||
|
func (g *Graph) Replace(o, n dag.Vertex) bool {
|
||||||
|
// Go through and update our lookaside to point to the new vertex
|
||||||
|
for k, v := range g.dependableMap {
|
||||||
|
if v == o {
|
||||||
|
g.dependableMap[k] = n
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return g.Graph.Replace(o, n)
|
||||||
|
}
|
||||||
|
|
||||||
// ConnectDependent connects a GraphNodeDependent to all of its
|
// ConnectDependent connects a GraphNodeDependent to all of its
|
||||||
// GraphNodeDependables. It returns the list of dependents it was
|
// GraphNodeDependables. It returns the list of dependents it was
|
||||||
// unable to connect to.
|
// unable to connect to.
|
||||||
|
|
|
@ -136,6 +136,22 @@ func TestBuiltinGraphBuilder_cbdDepNonCbd_errorsWhenVerbose(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBuiltinGraphBuilder_fuck(t *testing.T) {
|
||||||
|
b := &BuiltinGraphBuilder{
|
||||||
|
Providers: []string{"aws"},
|
||||||
|
Root: testModule(t, "validate-module-pc-inherit-unused"),
|
||||||
|
Validate: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
g, err := b.Build(RootModulePath)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
println(g.String())
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
TODO: This exposes a really bad bug we need to fix after we merge
|
TODO: This exposes a really bad bug we need to fix after we merge
|
||||||
the f-ast-branch. This bug still exists in master.
|
the f-ast-branch. This bug still exists in master.
|
||||||
|
|
|
@ -33,6 +33,49 @@ func (t *ModuleInputTransformer) Transform(g *Graph) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ModuleDestroyTransformer is a GraphTransformer that adds a node
|
||||||
|
// to the graph that will just mark the full module for destroy in
|
||||||
|
// the destroy scenario.
|
||||||
|
type ModuleDestroyTransformer struct{}
|
||||||
|
|
||||||
|
func (t *ModuleDestroyTransformer) Transform(g *Graph) error {
|
||||||
|
// Create the node
|
||||||
|
n := &graphNodeModuleDestroy{Path: g.Path}
|
||||||
|
|
||||||
|
// Add it to the graph
|
||||||
|
g.Add(n)
|
||||||
|
|
||||||
|
// Connect the inputs to the bottom of the graph so that it happens
|
||||||
|
// first.
|
||||||
|
for _, v := range g.Vertices() {
|
||||||
|
if v == n {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if g.DownEdges(v).Len() == 0 {
|
||||||
|
g.Connect(dag.BasicEdge(v, n))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type graphNodeModuleDestroy struct {
|
||||||
|
Path []string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *graphNodeModuleDestroy) Name() string {
|
||||||
|
return "module destroy (for plan)"
|
||||||
|
}
|
||||||
|
|
||||||
|
// GraphNodeEvalable impl.
|
||||||
|
func (n *graphNodeModuleDestroy) EvalTree() EvalNode {
|
||||||
|
return &EvalOpFilter{
|
||||||
|
Ops: []walkOperation{walkPlanDestroy},
|
||||||
|
Node: &EvalDiffDestroyModule{Path: n.Path},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type graphNodeModuleInput struct {
|
type graphNodeModuleInput struct {
|
||||||
Variables map[string]string
|
Variables map[string]string
|
||||||
}
|
}
|
||||||
|
|
|
@ -190,6 +190,21 @@ func (n *graphNodeDisabledProvider) DotOrigin() bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GraphNodeDependable impl.
|
||||||
|
func (n *graphNodeDisabledProvider) DependableName() []string {
|
||||||
|
return []string{"provider." + n.ProviderName()}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GraphNodeProvider impl.
|
||||||
|
func (n *graphNodeDisabledProvider) ProviderName() string {
|
||||||
|
return n.GraphNodeProvider.ProviderName()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GraphNodeProvider impl.
|
||||||
|
func (n *graphNodeDisabledProvider) ProviderConfig() *config.RawConfig {
|
||||||
|
return n.GraphNodeProvider.ProviderConfig()
|
||||||
|
}
|
||||||
|
|
||||||
type graphNodeMissingProvider struct {
|
type graphNodeMissingProvider struct {
|
||||||
ProviderNameValue string
|
ProviderNameValue string
|
||||||
}
|
}
|
||||||
|
@ -264,3 +279,21 @@ func (n *graphNodeMissingProviderFlat) ProviderName() string {
|
||||||
"%s.%s", modulePrefixStr(n.PathValue),
|
"%s.%s", modulePrefixStr(n.PathValue),
|
||||||
n.graphNodeMissingProvider.ProviderName())
|
n.graphNodeMissingProvider.ProviderName())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (n *graphNodeMissingProviderFlat) DependentOn() []string {
|
||||||
|
var result []string
|
||||||
|
|
||||||
|
// If we're in a module, then depend on our parent's provider
|
||||||
|
if len(n.PathValue) > 1 {
|
||||||
|
prefix := modulePrefixStr(n.PathValue[:len(n.PathValue)-1])
|
||||||
|
if prefix != "" {
|
||||||
|
prefix += "."
|
||||||
|
}
|
||||||
|
|
||||||
|
result = append(result, fmt.Sprintf(
|
||||||
|
"%s%s",
|
||||||
|
prefix, n.graphNodeMissingProvider.Name()))
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue