Skip to content

Commit 0827c4f

Browse files
committed
forgot to add the plan file
1 parent c9d1ee9 commit 0827c4f

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

cli/plan.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package cli
2+
3+
import (
4+
"bytes"
5+
"fmt"
6+
"os"
7+
"os/exec"
8+
9+
"github.com/coder/serpent"
10+
)
11+
12+
func (r *RootCmd) TerraformPlan() *serpent.Command {
13+
cmd := &serpent.Command{
14+
Use: "plan",
15+
Short: "Runs `terraform init -upgrade` and `terraform plan`, saving the output.",
16+
// This command is mainly for developing the preview tool.
17+
Hidden: true,
18+
Handler: func(i *serpent.Invocation) error {
19+
ctx := i.Context()
20+
21+
cmd := exec.CommandContext(ctx, "terraform", "init", "-upgrade")
22+
cmd.Stdin = i.Stdin
23+
cmd.Stdout = i.Stdout
24+
cmd.Stderr = i.Stderr
25+
26+
if err := cmd.Run(); err != nil {
27+
return fmt.Errorf("terraform init: %w", err)
28+
}
29+
30+
cmd = exec.CommandContext(ctx, "terraform", "plan", "-out", "out.plan")
31+
cmd.Stdin = i.Stdin
32+
cmd.Stdout = i.Stdout
33+
cmd.Stderr = i.Stderr
34+
35+
if err := cmd.Run(); err != nil {
36+
return fmt.Errorf("terraform plan: %w", err)
37+
}
38+
39+
var buf bytes.Buffer
40+
cmd = exec.CommandContext(ctx, "terraform", "show", "-json", "out.plan")
41+
cmd.Stdin = i.Stdin
42+
cmd.Stdout = &buf
43+
cmd.Stderr = i.Stderr
44+
45+
if err := cmd.Run(); err != nil {
46+
_, _ = cmd.Stdout.Write(buf.Bytes())
47+
return fmt.Errorf("terraform show: %w", err)
48+
}
49+
50+
if !cmd.ProcessState.Success() {
51+
return fmt.Errorf("terraform show not successful: %w", cmd.ProcessState)
52+
}
53+
54+
_ = os.WriteFile("plan.json", buf.Bytes(), 0644)
55+
return nil
56+
},
57+
}
58+
59+
return cmd
60+
}

0 commit comments

Comments
 (0)