github.com/ns1/terraform@v0.7.10-0.20161109153551-8949419bef40/terraform/context_import.go (about) 1 package terraform 2 3 import ( 4 "github.com/hashicorp/terraform/config/module" 5 ) 6 7 // ImportOpts are used as the configuration for Import. 8 type ImportOpts struct { 9 // Targets are the targets to import 10 Targets []*ImportTarget 11 12 // Module is optional, and specifies a config module that is loaded 13 // into the graph and evaluated. The use case for this is to provide 14 // provider configuration. 15 Module *module.Tree 16 } 17 18 // ImportTarget is a single resource to import. 19 type ImportTarget struct { 20 // Addr is the full resource address of the resource to import. 21 // Example: "module.foo.aws_instance.bar" 22 Addr string 23 24 // ID is the ID of the resource to import. This is resource-specific. 25 ID string 26 } 27 28 // Import takes already-created external resources and brings them 29 // under Terraform management. Import requires the exact type, name, and ID 30 // of the resources to import. 31 // 32 // This operation is idempotent. If the requested resource is already 33 // imported, no changes are made to the state. 34 // 35 // Further, this operation also gracefully handles partial state. If during 36 // an import there is a failure, all previously imported resources remain 37 // imported. 38 func (c *Context) Import(opts *ImportOpts) (*State, error) { 39 // Hold a lock since we can modify our own state here 40 v := c.acquireRun("import") 41 defer c.releaseRun(v) 42 43 // Copy our own state 44 c.state = c.state.DeepCopy() 45 46 // Initialize our graph builder 47 builder := &ImportGraphBuilder{ 48 ImportTargets: opts.Targets, 49 Module: opts.Module, 50 Providers: c.components.ResourceProviders(), 51 } 52 53 // Build the graph! 54 graph, err := builder.Build(RootModulePath) 55 if err != nil { 56 return c.state, err 57 } 58 59 // Walk it 60 if _, err := c.walk(graph, nil, walkImport); err != nil { 61 return c.state, err 62 } 63 64 // Clean the state 65 c.state.prune() 66 67 return c.state, nil 68 }