11package kubernetes
22
33import (
4- "bytes"
54 "fmt"
65 "io"
76 "log"
87 "os"
98 "os/exec"
10- "path/filepath"
119 "sync"
1210
1311 "github.com/commitdev/commit0/internal/config"
@@ -17,65 +15,50 @@ import (
1715func Generate (templator * templator.Templator , config * config.Commit0Config , wg * sync.WaitGroup ) {
1816 templator .Kubernetes .TemplateFiles (config , false , wg )
1917
20- if config .Kubernetes .Deploy {
21- _tf_init := tf_init ()
22- _tf_plan := tf_plan ()
23- execute (_tf_init )
24- execute (_tf_plan )
25- }
26-
2718}
2819
29- // Terraform init cmd
30- func tf_init () * exec.Cmd {
31-
32- return exec .Command ("terraform" , "init" )
33- }
34-
35- // Terraform plan cmd
36- func tf_plan () * exec.Cmd {
37-
38- return exec .Command ("terraform" , "plan" )
20+ func Execute (config * config.Commit0Config ) {
21+ if config .Kubernetes .Deploy {
22+ log .Println ("Planning infrastructure..." )
23+ execute (exec .Command ("terraform" , "init" ))
24+ execute (exec .Command ("terraform" , "plan" ))
25+ }
3926}
4027
4128func execute (cmd * exec.Cmd ) {
42- dir , err1 := filepath . Abs ( filepath . Dir ( os .Args [ 0 ]) )
43- if err1 != nil {
44- log .Fatal ( err1 )
29+ dir , err := os .Getwd ( )
30+ if err != nil {
31+ log .Fatalf ( "Getting working directory failed: %v \n " , err )
4532 }
4633
47- cmd .Dir = dir + " /kubernetes/terraform/environments/staging"
34+ cmd .Dir = fmt . Sprintf ( "%s /kubernetes/terraform/environments/staging", dir )
4835
49- var stdoutBuf , stderrBuf bytes.Buffer
50- stdoutIn , _ := cmd .StdoutPipe ()
51- stderrIn , _ := cmd .StderrPipe ()
36+ stdoutPipe , _ := cmd .StdoutPipe ()
37+ stderrPipe , _ := cmd .StderrPipe ()
5238
5339 var errStdout , errStderr error
54- stdout := io .MultiWriter (os .Stdout , & stdoutBuf )
55- stderr := io .MultiWriter (os .Stderr , & stderrBuf )
56- err := cmd .Start ()
40+ err = cmd .Start ()
5741 if err != nil {
58- log .Fatalf ("cmd.Start() failed with '%s' \n " , err )
42+ log .Fatalf ("Starting terraform command failed: %v \n " , err )
5943 }
6044
61- var wg sync.WaitGroup
62- wg .Add (1 )
63-
6445 go func () {
65- _ , errStdout = io .Copy (stdout , stdoutIn )
66- wg .Done ()
46+ _ , errStdout = io .Copy (os .Stdout , stdoutPipe )
47+ }()
48+ go func () {
49+ _ , errStderr = io .Copy (os .Stderr , stderrPipe )
6750 }()
68-
69- _ , errStderr = io .Copy (stderr , stderrIn )
70- wg .Wait ()
7151
7252 err = cmd .Wait ()
7353 if err != nil {
74- log .Fatalf ("cmd.Run() failed with %s\n " , err )
54+ log .Fatalf ("Executing terraform command failed: %v\n " , err )
55+ }
56+
57+ if errStdout != nil {
58+ log .Printf ("Failed to capture stdout: %v\n " , errStdout )
7559 }
76- if errStdout != nil || errStderr != nil {
77- log .Fatal ("failed to capture stdout or stderr\n " )
60+
61+ if errStderr != nil {
62+ log .Printf ("Failed to capture stderr: %v\n " , errStderr )
7863 }
79- outStr , errStr := string (stdoutBuf .Bytes ()), string (stderrBuf .Bytes ())
80- fmt .Printf ("\n out:\n %s\n err:\n %s\n " , outStr , errStr )
8164}
0 commit comments