mirror of
https://github.com/hashicorp/terraform.git
synced 2026-03-21 18:10:30 -04:00
86 lines
2.6 KiB
Go
86 lines
2.6 KiB
Go
// Copyright IBM Corp. 2014, 2026
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package arguments
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/hashicorp/terraform/internal/tfdiags"
|
|
)
|
|
|
|
// Taint represents the command-line arguments for the taint command.
|
|
type Taint struct {
|
|
// Address is the address of the resource instance to taint.
|
|
Address string
|
|
|
|
// AllowMissing, if true, means the command will succeed even if the
|
|
// resource is not found in state.
|
|
AllowMissing bool
|
|
|
|
// BackupPath is the path to backup the existing state file before
|
|
// modifying.
|
|
BackupPath string
|
|
|
|
// StateLock, if true, locks the state file during operations.
|
|
StateLock bool
|
|
|
|
// StateLockTimeout is the duration to retry a state lock.
|
|
StateLockTimeout time.Duration
|
|
|
|
// StatePath is the path to the state file to read and modify.
|
|
StatePath string
|
|
|
|
// StateOutPath is the path to write the updated state file.
|
|
StateOutPath string
|
|
|
|
// IgnoreRemoteVersion, if true, continues even if remote and local
|
|
// Terraform versions are incompatible.
|
|
IgnoreRemoteVersion bool
|
|
}
|
|
|
|
// ParseTaint processes CLI arguments, returning a Taint value and errors.
|
|
// If errors are encountered, a Taint value is still returned representing
|
|
// the best effort interpretation of the arguments.
|
|
func ParseTaint(args []string) (*Taint, tfdiags.Diagnostics) {
|
|
var diags tfdiags.Diagnostics
|
|
taint := &Taint{}
|
|
|
|
cmdFlags := defaultFlagSet("taint")
|
|
cmdFlags.BoolVar(&taint.AllowMissing, "allow-missing", false, "allow missing")
|
|
cmdFlags.StringVar(&taint.BackupPath, "backup", "", "path")
|
|
cmdFlags.BoolVar(&taint.StateLock, "lock", true, "lock state")
|
|
cmdFlags.DurationVar(&taint.StateLockTimeout, "lock-timeout", 0, "lock timeout")
|
|
cmdFlags.StringVar(&taint.StatePath, "state", "", "path")
|
|
cmdFlags.StringVar(&taint.StateOutPath, "state-out", "", "path")
|
|
cmdFlags.BoolVar(&taint.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) == 0 {
|
|
diags = diags.Append(tfdiags.Sourceless(
|
|
tfdiags.Error,
|
|
"Required argument missing",
|
|
"The taint command expects exactly one argument: the address of the resource to taint.",
|
|
))
|
|
} else if len(args) > 1 {
|
|
diags = diags.Append(tfdiags.Sourceless(
|
|
tfdiags.Error,
|
|
"Too many command line arguments",
|
|
"The taint command expects exactly one argument: the address of the resource to taint.",
|
|
))
|
|
}
|
|
|
|
if len(args) > 0 {
|
|
taint.Address = args[0]
|
|
}
|
|
|
|
return taint, diags
|
|
}
|