4 "github.com/hashicorp/terraform/config/module"
7 // ImportOpts are used as the configuration for Import.
8 type ImportOpts struct {
9 // Targets are the targets to import
10 Targets []*ImportTarget
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.
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"
24 // ID is the ID of the resource to import. This is resource-specific.
31 // Import takes already-created external resources and brings them
32 // under Terraform management. Import requires the exact type, name, and ID
33 // of the resources to import.
35 // This operation is idempotent. If the requested resource is already
36 // imported, no changes are made to the state.
38 // Further, this operation also gracefully handles partial state. If during
39 // an import there is a failure, all previously imported resources remain
41 func (c *Context) Import(opts *ImportOpts) (*State, error) {
42 // Hold a lock since we can modify our own state here
43 defer c.acquireRun("import")()
46 c.state = c.state.DeepCopy()
48 // If no module is given, default to the module configured with
55 // Initialize our graph builder
56 builder := &ImportGraphBuilder{
57 ImportTargets: opts.Targets,
59 Providers: c.components.ResourceProviders(),
63 graph, err := builder.Build(RootModulePath)
69 if _, err := c.walk(graph, nil, walkImport); err != nil {