github.com/tomaszheflik/terraform@v0.7.3-0.20160827060421-32f990b41594/terraform/graph_builder_import.go (about)

     1  package terraform
     2  
     3  import (
     4  	"github.com/hashicorp/terraform/config/module"
     5  )
     6  
     7  // ImportGraphBuilder implements GraphBuilder and is responsible for building
     8  // a graph for importing resources into Terraform. This is a much, much
     9  // simpler graph than a normal configuration graph.
    10  type ImportGraphBuilder struct {
    11  	// ImportTargets are the list of resources to import.
    12  	ImportTargets []*ImportTarget
    13  
    14  	// Module is the module to add to the graph. See ImportOpts.Module.
    15  	Module *module.Tree
    16  
    17  	// Providers is the list of providers supported.
    18  	Providers []string
    19  }
    20  
    21  // Build builds the graph according to the steps returned by Steps.
    22  func (b *ImportGraphBuilder) Build(path []string) (*Graph, error) {
    23  	return (&BasicGraphBuilder{
    24  		Steps:    b.Steps(),
    25  		Validate: true,
    26  	}).Build(path)
    27  }
    28  
    29  // Steps returns the ordered list of GraphTransformers that must be executed
    30  // to build a complete graph.
    31  func (b *ImportGraphBuilder) Steps() []GraphTransformer {
    32  	// Get the module. If we don't have one, we just use an empty tree
    33  	// so that the transform still works but does nothing.
    34  	mod := b.Module
    35  	if mod == nil {
    36  		mod = module.NewEmptyTree()
    37  	}
    38  
    39  	steps := []GraphTransformer{
    40  		// Create all our resources from the configuration and state
    41  		&ConfigTransformer{Module: mod},
    42  
    43  		// Add the import steps
    44  		&ImportStateTransformer{Targets: b.ImportTargets},
    45  
    46  		// Provider-related transformations
    47  		&MissingProviderTransformer{Providers: b.Providers},
    48  		&ProviderTransformer{},
    49  		&DisableProviderTransformer{},
    50  		&PruneProviderTransformer{},
    51  
    52  		// Single root
    53  		&RootTransformer{},
    54  
    55  		// Insert nodes to close opened plugin connections
    56  		&CloseProviderTransformer{},
    57  
    58  		// Optimize
    59  		&TransitiveReductionTransformer{},
    60  	}
    61  
    62  	return steps
    63  }