mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-27 09:21:14 -06:00
73492fd2d5
We cannot evaluate expansion during validation, since the values may not be known at that time. Inject a nodeValidateModule, using the "Concrete" pattern used for other node types during graph building. This node will always evaluate to a single module instance, so that we have a valid context within which to evaluate all sub resources.
41 lines
1.1 KiB
Go
41 lines
1.1 KiB
Go
package terraform
|
|
|
|
import (
|
|
"github.com/hashicorp/terraform/dag"
|
|
)
|
|
|
|
// ValidateGraphBuilder creates the graph for the validate operation.
|
|
//
|
|
// ValidateGraphBuilder is based on the PlanGraphBuilder. We do this so that
|
|
// we only have to validate what we'd normally plan anyways. The
|
|
// PlanGraphBuilder given will be modified so it shouldn't be used for anything
|
|
// else after calling this function.
|
|
func ValidateGraphBuilder(p *PlanGraphBuilder) GraphBuilder {
|
|
// We're going to customize the concrete functions
|
|
p.CustomConcrete = true
|
|
|
|
// Set the provider to the normal provider. This will ask for input.
|
|
p.ConcreteProvider = func(a *NodeAbstractProvider) dag.Vertex {
|
|
return &NodeApplyableProvider{
|
|
NodeAbstractProvider: a,
|
|
}
|
|
}
|
|
|
|
p.ConcreteResource = func(a *NodeAbstractResource) dag.Vertex {
|
|
return &NodeValidatableResource{
|
|
NodeAbstractResource: a,
|
|
}
|
|
}
|
|
|
|
p.ConcreteModule = func(n *nodeExpandModule) dag.Vertex {
|
|
return &nodeValidateModule{
|
|
nodeExpandModule: *n,
|
|
}
|
|
}
|
|
|
|
// We purposely don't set any other concrete types since they don't
|
|
// require validation.
|
|
|
|
return p
|
|
}
|