| // Copyright IBM Corp. 2014, 2026 | |
| // SPDX-License-Identifier: BUSL-1.1 | |
| package arguments | |
| import ( | |
| "os" | |
| "github.com/hashicorp/terraform/internal/tfdiags" | |
| ) | |
| // getwd is a package-level variable that defaults to os.Getwd. | |
| // It can be overridden in tests to provide a mock implementation. | |
| var getwd = os.Getwd | |
| // Import represents the command-line arguments for the import command. | |
| type Import struct { | |
| // State, Vars are the common extended flags | |
| State *State | |
| Vars *Vars | |
| // ConfigPath is the path to a directory of Terraform configuration files | |
| // to use to configure the provider. An empty string means the caller | |
| // should use the current working directory. | |
| ConfigPath string | |
| // Parallelism is the limit Terraform places on total parallel operations | |
| // as it walks the dependency graph. | |
| Parallelism int | |
| // IgnoreRemoteVersion controls whether to suppress the error when the | |
| // configured Terraform version on the remote workspace does not match the | |
| // local Terraform version. | |
| IgnoreRemoteVersion bool | |
| // InputEnabled is used to disable interactive input for unspecified | |
| // variable and backend config values. Default is true. | |
| InputEnabled bool | |
| // CompactWarnings enables compact warning output. | |
| CompactWarnings bool | |
| // TargetFlags are the raw -target flag values. | |
| TargetFlags []string | |
| // Addr is the resource address to import into. | |
| Addr string | |
| // ID is the provider-specific ID of the resource to import. | |
| ID string | |
| } | |
| // ParseImport processes CLI arguments, returning an Import value and errors. | |
| // If errors are encountered, an Import value is still returned representing | |
| // the best effort interpretation of the arguments. | |
| func ParseImport(args []string) (*Import, tfdiags.Diagnostics) { | |
| var diags tfdiags.Diagnostics | |
| imp := &Import{ | |
| State: &State{ | |
| Lock: true, | |
| }, | |
| Vars: &Vars{}, | |
| } | |
| // Get the pwd since its our default -config flag value | |
| pwd, err := getwd() | |
| if err != nil { | |
| return nil, diags.Append(tfdiags.Sourceless( | |
| tfdiags.Error, | |
| "Error getting pwd", | |
| err.Error(), | |
| )) | |
| } | |
| cmdFlags := extendedFlagSet("import", imp.State, nil, imp.Vars) | |
| cmdFlags.BoolVar(&imp.IgnoreRemoteVersion, "ignore-remote-version", false, "ignore-remote-version") | |
| cmdFlags.IntVar(&imp.Parallelism, "parallelism", DefaultParallelism, "parallelism") | |
| cmdFlags.StringVar(&imp.ConfigPath, "config", pwd, "config") | |
| cmdFlags.BoolVar(&imp.InputEnabled, "input", true, "input") | |
| cmdFlags.BoolVar(&imp.CompactWarnings, "compact-warnings", false, "compact-warnings") | |
| cmdFlags.Var((*FlagStringSlice)(&imp.TargetFlags), "target", "target") | |
| if err := cmdFlags.Parse(args); err != nil { | |
| diags = diags.Append(tfdiags.Sourceless( | |
| tfdiags.Error, | |
| "Failed to parse command-line flags", | |
| err.Error(), | |
| )) | |
| } | |
| args = cmdFlags.Args() | |
| if len(args) != 2 { | |
| diags = diags.Append(tfdiags.Sourceless( | |
| tfdiags.Error, | |
| "Wrong number of arguments", | |
| "The import command expects two arguments: ADDR and ID.", | |
| )) | |
| } | |
| if len(args) > 0 { | |
| imp.Addr = args[0] | |
| } | |
| if len(args) > 1 { | |
| imp.ID = args[1] | |
| } | |
| return imp, diags | |
| } |