terraform-provider-gitea/vendor/github.com/hashicorp/terraform-exec/tfexec/taint.go
Malar Invention 00ebcd295e add vendor
2022-04-03 09:37:16 +05:30

79 lines
1.7 KiB
Go

package tfexec
import (
"context"
"fmt"
"os/exec"
"strconv"
)
type taintConfig struct {
state string
allowMissing bool
lock bool
lockTimeout string
}
var defaultTaintOptions = taintConfig{
allowMissing: false,
lock: true,
}
// TaintOption represents options used in the Taint method.
type TaintOption interface {
configureTaint(*taintConfig)
}
func (opt *StateOption) configureTaint(conf *taintConfig) {
conf.state = opt.path
}
func (opt *AllowMissingOption) configureTaint(conf *taintConfig) {
conf.allowMissing = opt.allowMissing
}
func (opt *LockOption) configureTaint(conf *taintConfig) {
conf.lock = opt.lock
}
func (opt *LockTimeoutOption) configureTaint(conf *taintConfig) {
conf.lockTimeout = opt.timeout
}
// Taint represents the terraform taint subcommand.
func (tf *Terraform) Taint(ctx context.Context, address string, opts ...TaintOption) error {
err := tf.compatible(ctx, tf0_4_1, nil)
if err != nil {
return fmt.Errorf("taint was first introduced in Terraform 0.4.1: %w", err)
}
taintCmd := tf.taintCmd(ctx, address, opts...)
return tf.runTerraformCmd(ctx, taintCmd)
}
func (tf *Terraform) taintCmd(ctx context.Context, address string, opts ...TaintOption) *exec.Cmd {
c := defaultTaintOptions
for _, o := range opts {
o.configureTaint(&c)
}
args := []string{"taint", "-no-color"}
if c.lockTimeout != "" {
args = append(args, "-lock-timeout="+c.lockTimeout)
}
// string opts: only pass if set
if c.state != "" {
args = append(args, "-state="+c.state)
}
args = append(args, "-lock="+strconv.FormatBool(c.lock))
if c.allowMissing {
args = append(args, "-allow-missing")
}
args = append(args, address)
return tf.buildTerraformCmd(ctx, nil, args...)
}