Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions tfexec/apply.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (

type applyConfig struct {
backup string
destroy bool
dirOrPlan string
lock bool

Expand All @@ -32,6 +33,7 @@ type applyConfig struct {
}

var defaultApplyOptions = applyConfig{
destroy: false,
lock: true,
parallelism: 10,
refresh: true,
Expand Down Expand Up @@ -94,6 +96,10 @@ func (opt *ReattachOption) configureApply(conf *applyConfig) {
conf.reattachInfo = opt.info
}

func (opt *DestroyFlagOption) configureApply(conf *applyConfig) {
conf.destroy = opt.destroy
}

// Apply represents the terraform apply subcommand.
func (tf *Terraform) Apply(ctx context.Context, opts ...ApplyOption) error {
cmd, err := tf.applyCmd(ctx, opts...)
Expand Down Expand Up @@ -191,6 +197,14 @@ func (tf *Terraform) buildApplyArgs(ctx context.Context, c applyConfig) ([]strin
args = append(args, "-replace="+addr)
}
}
if c.destroy {
err := tf.compatible(ctx, tf0_15_2, nil)
if err != nil {
return nil, fmt.Errorf("-destroy option was introduced in Terraform 0.15.2: %w", err)
}
args = append(args, "-destroy")
}

if c.targets != nil {
for _, ta := range c.targets {
args = append(args, "-target="+ta)
Expand Down
2 changes: 2 additions & 0 deletions tfexec/apply_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ func TestApplyCmd(t *testing.T) {
Target("target2"),
Var("var1=foo"),
Var("var2=bar"),
Destroy(true),
DirOrPlan("testfile"),
)
if err != nil {
Expand All @@ -60,6 +61,7 @@ func TestApplyCmd(t *testing.T) {
"-refresh=false",
"-replace=aws_instance.test",
"-replace=google_pubsub_topic.test",
"-destroy",
"-target=target1",
"-target=target2",
"-var", "var1=foo",
Expand Down
26 changes: 26 additions & 0 deletions tfexec/internal/e2etest/apply_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ import (
"github.com/hashicorp/terraform-exec/tfexec/internal/testutil"
)

var (
applyDestroyMinVersion = version.Must(version.NewVersion("0.15.2"))
)

func TestApply(t *testing.T) {
runTest(t, "basic", func(t *testing.T, tfv *version.Version, tf *tfexec.Terraform) {
err := tf.Init(context.Background())
Expand Down Expand Up @@ -62,3 +66,25 @@ func TestApplyJSON_TF015AndLater(t *testing.T) {
}
})
}

func TestApplyDestroy(t *testing.T) {
runTest(t, "basic", func(t *testing.T, tfv *version.Version, tf *tfexec.Terraform) {
if tfv.LessThan(applyDestroyMinVersion) {
t.Skip("terraform apply -destroy was added in Terraform 0.15.2, so test is not valid")
}
err := tf.Init(context.Background())
if err != nil {
t.Fatalf("error running Init in test directory: %s", err)
}

err = tf.Apply(context.Background())
if err != nil {
t.Fatalf("error running Apply: %s", err)
}

err = tf.Apply(context.Background(), tfexec.Destroy(true))
if err != nil {
t.Fatalf("error running Apply -destroy: %s", err)
}
})
}