// 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 }