79 lines
1.8 KiB
Go
79 lines
1.8 KiB
Go
package tfexec
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os/exec"
|
|
"strconv"
|
|
)
|
|
|
|
type untaintConfig struct {
|
|
state string
|
|
allowMissing bool
|
|
lock bool
|
|
lockTimeout string
|
|
}
|
|
|
|
var defaultUntaintOptions = untaintConfig{
|
|
allowMissing: false,
|
|
lock: true,
|
|
}
|
|
|
|
// OutputOption represents options used in the Output method.
|
|
type UntaintOption interface {
|
|
configureUntaint(*untaintConfig)
|
|
}
|
|
|
|
func (opt *StateOption) configureUntaint(conf *untaintConfig) {
|
|
conf.state = opt.path
|
|
}
|
|
|
|
func (opt *AllowMissingOption) configureUntaint(conf *untaintConfig) {
|
|
conf.allowMissing = opt.allowMissing
|
|
}
|
|
|
|
func (opt *LockOption) configureUntaint(conf *untaintConfig) {
|
|
conf.lock = opt.lock
|
|
}
|
|
|
|
func (opt *LockTimeoutOption) configureUntaint(conf *untaintConfig) {
|
|
conf.lockTimeout = opt.timeout
|
|
}
|
|
|
|
// Untaint represents the terraform untaint subcommand.
|
|
func (tf *Terraform) Untaint(ctx context.Context, address string, opts ...UntaintOption) error {
|
|
err := tf.compatible(ctx, tf0_6_13, nil)
|
|
if err != nil {
|
|
return fmt.Errorf("untaint was first introduced in Terraform 0.6.13: %w", err)
|
|
}
|
|
untaintCmd := tf.untaintCmd(ctx, address, opts...)
|
|
return tf.runTerraformCmd(ctx, untaintCmd)
|
|
}
|
|
|
|
func (tf *Terraform) untaintCmd(ctx context.Context, address string, opts ...UntaintOption) *exec.Cmd {
|
|
c := defaultUntaintOptions
|
|
|
|
for _, o := range opts {
|
|
o.configureUntaint(&c)
|
|
}
|
|
|
|
args := []string{"untaint", "-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...)
|
|
}
|