package terraform
import (
- "github.com/hashicorp/terraform/config/module"
+ "github.com/hashicorp/terraform/addrs"
+ "github.com/hashicorp/terraform/configs"
"github.com/hashicorp/terraform/dag"
+ "github.com/hashicorp/terraform/tfdiags"
)
// ImportGraphBuilder implements GraphBuilder and is responsible for building
// 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
+ // Module is a configuration to build the graph from. See ImportOpts.Config.
+ Config *configs.Config
- // Providers is the list of providers supported.
- Providers []string
+ // Components is the factory for our available plugin components.
+ Components contextComponentFactory
+
+ // Schemas is the repository of schemas we will draw from to analyse
+ // the configuration.
+ Schemas *Schemas
}
// Build builds the graph according to the steps returned by Steps.
-func (b *ImportGraphBuilder) Build(path []string) (*Graph, error) {
+func (b *ImportGraphBuilder) Build(path addrs.ModuleInstance) (*Graph, tfdiags.Diagnostics) {
return (&BasicGraphBuilder{
Steps: b.Steps(),
Validate: true,
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()
+ config := b.Config
+ if config == nil {
+ config = configs.NewEmptyConfig()
}
// Custom factory for creating providers.
steps := []GraphTransformer{
// Create all our resources from the configuration and state
- &ConfigTransformer{Module: mod},
+ &ConfigTransformer{Config: config},
// Add the import steps
&ImportStateTransformer{Targets: b.ImportTargets},
- TransformProviders(b.Providers, concreteProvider, mod),
+ // Add root variables
+ &RootVariableTransformer{Config: b.Config},
+
+ TransformProviders(b.Components.ResourceProviders(), concreteProvider, config),
// This validates that the providers only depend on variables
&ImportProviderValidateTransformer{},
+ // Add the local values
+ &LocalTransformer{Config: b.Config},
+
+ // Add the outputs
+ &OutputTransformer{Config: b.Config},
+
+ // Add module variables
+ &ModuleVariableTransformer{Config: b.Config},
+
+ // Must attach schemas before ReferenceTransformer so that we can
+ // analyze the configuration to find references.
+ &AttachSchemaTransformer{Schemas: b.Schemas},
+
+ // Connect so that the references are ready for targeting. We'll
+ // have to connect again later for providers and so on.
+ &ReferenceTransformer{},
+
// Close opened plugin connections
&CloseProviderTransformer{},