From 489516b8e9be457fdc23a2708638146ee7bed3f9 Mon Sep 17 00:00:00 2001 From: Shah Newaz Khan Date: Thu, 24 Oct 2019 00:07:26 -0700 Subject: [PATCH] Added deploy flag functionality to kubernetes --- internal/config/config.go | 1 + internal/generate/kubernetes/generate.go | 98 ++++++++++++++++++- .../{teraform => terraform}/README.md | 0 .../{teraform => terraform}/eks-cluster.tf | 0 .../eks-worker-ndoes.tf | 0 .../{teraform => terraform}/outputs.tf | 0 .../{teraform => terraform}/providers.tf | 0 .../{teraform => terraform}/variables.tf | 0 .../kubernetes/{teraform => terraform}/vpc.tf | 0 9 files changed, 97 insertions(+), 2 deletions(-) rename templates/kubernetes/{teraform => terraform}/README.md (100%) rename templates/kubernetes/{teraform => terraform}/eks-cluster.tf (100%) rename templates/kubernetes/{teraform => terraform}/eks-worker-ndoes.tf (100%) rename templates/kubernetes/{teraform => terraform}/outputs.tf (100%) rename templates/kubernetes/{teraform => terraform}/providers.tf (100%) rename templates/kubernetes/{teraform => terraform}/variables.tf (100%) rename templates/kubernetes/{teraform => terraform}/vpc.tf (100%) diff --git a/internal/config/config.go b/internal/config/config.go index 0197d21c6..dd29569fd 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -62,6 +62,7 @@ type Commit0Config struct { type Kubernetes struct { ClusterName string DNSName string + Deploy bool } func LoadConfig(filePath string) *Commit0Config { diff --git a/internal/generate/kubernetes/generate.go b/internal/generate/kubernetes/generate.go index 937d688c1..ca45c937b 100644 --- a/internal/generate/kubernetes/generate.go +++ b/internal/generate/kubernetes/generate.go @@ -1,13 +1,107 @@ package kubernetes import ( - //"github.com/commitdev/commit0/util" - + "bytes" + "fmt" + "io" + "sync" + "log" + "os" + "os/exec" + "path/filepath" "github.com/commitdev/commit0/config" "github.com/commitdev/commit0/templator" ) func Generate(templator *templator.Templator, config *config.Commit0Config) { templator.Kubernetes.TemplateFiles(config, false) + + + if config.Kubernetes.Deploy { + _tf_init := tf_init() + _tf_plan := tf_plan() + execute(_tf_init) + execute(_tf_plan) + } + +} + +// Terraform init cmd +func tf_init() *exec.Cmd { + + return exec.Command("terraform","init") +} + +// Terraform plan cmd +func tf_plan() *exec.Cmd { + + return exec.Command("terraform","plan") } +// Executes cmd passed in +func execute( cmd *exec.Cmd){ + dir, err1 := filepath.Abs(filepath.Dir(os.Args[0])) + if err1 != nil { + log.Fatal(err1) + } + + cmd.Dir = dir + "/kubernetes/terraform" + + + var errStdout, errStderr error + stdoutIn, _ := cmd.StdoutPipe() + stderrIn, _ := cmd.StderrPipe() + stdout := NewCapturingPassThroughWriter(os.Stdout) + stderr := NewCapturingPassThroughWriter(os.Stderr) + err := cmd.Start() + if err != nil { + log.Fatalf("cmd.Start() failed with '%s'\n", err) + } + + var wg sync.WaitGroup + wg.Add(1) + + go func() { + _, errStdout = io.Copy(stdout, stdoutIn) + wg.Done() + }() + + _, errStderr = io.Copy(stderr, stderrIn) + wg.Wait() + + err = cmd.Wait() + if err != nil { + log.Fatalf("cmd.Run() failed with %s\n", err) + } + if errStdout != nil || errStderr != nil { + log.Fatal("failed to capture stdout or stderr\n") + } + outStr, errStr := string(stdout.Bytes()), string(stderr.Bytes()) + fmt.Printf("\nout:\n%s\nerr:\n%s\n", outStr, errStr) + +} + +// CapturingPassThroughWriter is a writer that remembers +// data written to it and passes it to w +type CapturingPassThroughWriter struct { + buf bytes.Buffer + w io.Writer +} + +// NewCapturingPassThroughWriter creates new CapturingPassThroughWriter +func NewCapturingPassThroughWriter(w io.Writer) *CapturingPassThroughWriter { + return &CapturingPassThroughWriter{ + w: w, + } +} + +// Write writes data to the writer, returns number of bytes written and an error +func (w *CapturingPassThroughWriter) Write(d []byte) (int, error) { + w.buf.Write(d) + return w.w.Write(d) +} + +// Bytes returns bytes written to the writer +func (w *CapturingPassThroughWriter) Bytes() []byte { + return w.buf.Bytes() +} diff --git a/templates/kubernetes/teraform/README.md b/templates/kubernetes/terraform/README.md similarity index 100% rename from templates/kubernetes/teraform/README.md rename to templates/kubernetes/terraform/README.md diff --git a/templates/kubernetes/teraform/eks-cluster.tf b/templates/kubernetes/terraform/eks-cluster.tf similarity index 100% rename from templates/kubernetes/teraform/eks-cluster.tf rename to templates/kubernetes/terraform/eks-cluster.tf diff --git a/templates/kubernetes/teraform/eks-worker-ndoes.tf b/templates/kubernetes/terraform/eks-worker-ndoes.tf similarity index 100% rename from templates/kubernetes/teraform/eks-worker-ndoes.tf rename to templates/kubernetes/terraform/eks-worker-ndoes.tf diff --git a/templates/kubernetes/teraform/outputs.tf b/templates/kubernetes/terraform/outputs.tf similarity index 100% rename from templates/kubernetes/teraform/outputs.tf rename to templates/kubernetes/terraform/outputs.tf diff --git a/templates/kubernetes/teraform/providers.tf b/templates/kubernetes/terraform/providers.tf similarity index 100% rename from templates/kubernetes/teraform/providers.tf rename to templates/kubernetes/terraform/providers.tf diff --git a/templates/kubernetes/teraform/variables.tf b/templates/kubernetes/terraform/variables.tf similarity index 100% rename from templates/kubernetes/teraform/variables.tf rename to templates/kubernetes/terraform/variables.tf diff --git a/templates/kubernetes/teraform/vpc.tf b/templates/kubernetes/terraform/vpc.tf similarity index 100% rename from templates/kubernetes/teraform/vpc.tf rename to templates/kubernetes/terraform/vpc.tf