mirror of
https://github.com/hashicorp/terraform.git
synced 2026-02-19 02:39:17 -05:00
79 lines
2.5 KiB
Go
79 lines
2.5 KiB
Go
// 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
|
|
}
|