You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
terraform/internal/command/arguments/state_replace_provider.go

80 lines
2.5 KiB

// Copyright IBM Corp. 2014, 2026
// SPDX-License-Identifier: BUSL-1.1
package arguments
import (
"time"
"github.com/hashicorp/terraform/internal/tfdiags"
)
// StateReplaceProvider represents the command-line arguments for the state
// replace-provider command.
type StateReplaceProvider struct {
// AutoApprove, if true, skips the interactive approval step.
AutoApprove bool
// BackupPath is the path where Terraform should write the backup state.
BackupPath string
// StateLock, if true, requests that the backend lock the state for this
// operation.
StateLock bool
// StateLockTimeout is the duration to retry a state lock.
StateLockTimeout time.Duration
// StatePath is an optional path to a local state file.
StatePath string
// IgnoreRemoteVersion, if true, continues even if remote and local
// Terraform versions are incompatible.
IgnoreRemoteVersion bool
// FromProviderAddr is the provider address to replace.
FromProviderAddr string
// ToProviderAddr is the replacement provider address.
ToProviderAddr string
}
// ParseStateReplaceProvider processes CLI arguments, returning a
// StateReplaceProvider value and diagnostics. If errors are encountered, a
// StateReplaceProvider value is still returned representing the best effort
// interpretation of the arguments.
func ParseStateReplaceProvider(args []string) (*StateReplaceProvider, tfdiags.Diagnostics) {
var diags tfdiags.Diagnostics
rp := &StateReplaceProvider{}
cmdFlags := defaultFlagSet("state replace-provider")
cmdFlags.BoolVar(&rp.AutoApprove, "auto-approve", false, "skip interactive approval of replacements")
cmdFlags.StringVar(&rp.BackupPath, "backup", "-", "backup")
cmdFlags.BoolVar(&rp.StateLock, "lock", true, "lock states")
cmdFlags.DurationVar(&rp.StateLockTimeout, "lock-timeout", 0, "lock timeout")
cmdFlags.StringVar(&rp.StatePath, "state", "", "path")
cmdFlags.BoolVar(&rp.IgnoreRemoteVersion, "ignore-remote-version", false, "continue even if remote and local Terraform versions are incompatible")
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,
"Required argument missing",
"Exactly two arguments expected: the from and to provider addresses.",
))
return rp, diags
}
rp.FromProviderAddr = args[0]
rp.ToProviderAddr = args[1]
return rp, diags
}