mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-27 09:21:14 -06:00
2f91007999
The series of provider transformations is important, and often repeated. Group these together in a single transform function.
72 lines
1.9 KiB
Go
72 lines
1.9 KiB
Go
package terraform
|
|
|
|
import (
|
|
"github.com/hashicorp/terraform/config/module"
|
|
"github.com/hashicorp/terraform/dag"
|
|
)
|
|
|
|
// ImportGraphBuilder implements GraphBuilder and is responsible for building
|
|
// a graph for importing resources into Terraform. This is a much, much
|
|
// simpler graph than a normal configuration graph.
|
|
type ImportGraphBuilder struct {
|
|
// ImportTargets are the list of resources to import.
|
|
ImportTargets []*ImportTarget
|
|
|
|
// Module is the module to add to the graph. See ImportOpts.Module.
|
|
Module *module.Tree
|
|
|
|
// Providers is the list of providers supported.
|
|
Providers []string
|
|
}
|
|
|
|
// Build builds the graph according to the steps returned by Steps.
|
|
func (b *ImportGraphBuilder) Build(path []string) (*Graph, error) {
|
|
return (&BasicGraphBuilder{
|
|
Steps: b.Steps(),
|
|
Validate: true,
|
|
Name: "ImportGraphBuilder",
|
|
}).Build(path)
|
|
}
|
|
|
|
// Steps returns the ordered list of GraphTransformers that must be executed
|
|
// to build a complete graph.
|
|
func (b *ImportGraphBuilder) Steps() []GraphTransformer {
|
|
// Get the module. If we don't have one, we just use an empty tree
|
|
// so that the transform still works but does nothing.
|
|
mod := b.Module
|
|
if mod == nil {
|
|
mod = module.NewEmptyTree()
|
|
}
|
|
|
|
// Custom factory for creating providers.
|
|
concreteProvider := func(a *NodeAbstractProvider) dag.Vertex {
|
|
return &NodeApplyableProvider{
|
|
NodeAbstractProvider: a,
|
|
}
|
|
}
|
|
|
|
steps := []GraphTransformer{
|
|
// Create all our resources from the configuration and state
|
|
&ConfigTransformer{Module: mod},
|
|
|
|
// Add the import steps
|
|
&ImportStateTransformer{Targets: b.ImportTargets},
|
|
|
|
TransformProviders(b.Providers, concreteProvider, mod),
|
|
|
|
// This validates that the providers only depend on variables
|
|
&ImportProviderValidateTransformer{},
|
|
|
|
// Close opened plugin connections
|
|
&CloseProviderTransformer{},
|
|
|
|
// Single root
|
|
&RootTransformer{},
|
|
|
|
// Optimize
|
|
&TransitiveReductionTransformer{},
|
|
}
|
|
|
|
return steps
|
|
}
|