From e41629ba49467ff2d25f0d7ca87e37f5cf9100c5 Mon Sep 17 00:00:00 2001 From: Janet Kuo Date: Mon, 25 Jul 2016 16:45:28 -0700 Subject: [PATCH] Allow --chart and --out to be specified together --- cli/app/app.go | 32 ++++++++--------- cli/app/k8sutils.go | 85 +++++++++++++++++++++++++-------------------- 2 files changed, 61 insertions(+), 56 deletions(-) diff --git a/cli/app/app.go b/cli/app/app.go index 547e45b2..3fd4c29c 100644 --- a/cli/app/app.go +++ b/cli/app/app.go @@ -735,7 +735,7 @@ func loadBundlesFile(file string) KomposeObject { } // Load compose file into KomposeObject -func loadComposeFile(file string, c *cli.Context) KomposeObject { +func loadComposeFile(file string) KomposeObject { komposeObject := KomposeObject{ ServiceConfigs: make(map[string]ServiceConfig), } @@ -813,7 +813,6 @@ type convertOptions struct { replicas int inputFile string outFile string - f *os.File } // Convert komposeObject to K8S controllers @@ -825,6 +824,10 @@ func komposeConvert(komposeObject KomposeObject, opt convertOptions) { mReplicaSets := make(map[string][]byte) // OpenShift DeploymentConfigs mDeploymentConfigs := make(map[string][]byte) + + f := createOutFile(opt.outFile) + defer f.Close() + var svcnames []string for name, service := range komposeObject.ServiceConfigs { @@ -951,41 +954,41 @@ func komposeConvert(komposeObject KomposeObject, opt convertOptions) { for k, v := range mServices { if v != nil { - print(k, "svc", v, opt.toStdout, opt.generateYaml, opt.f) + print(k, "svc", v, opt.toStdout, opt.generateYaml, f) } } // If --out or --stdout is set, the validation should already prevent multiple controllers being generated if opt.createD { for k, v := range mDeployments { - print(k, "deployment", v, opt.toStdout, opt.generateYaml, opt.f) + print(k, "deployment", v, opt.toStdout, opt.generateYaml, f) } } if opt.createDS { for k, v := range mDaemonSets { - print(k, "daemonset", v, opt.toStdout, opt.generateYaml, opt.f) + print(k, "daemonset", v, opt.toStdout, opt.generateYaml, f) } } if opt.createRS { for k, v := range mReplicaSets { - print(k, "replicaset", v, opt.toStdout, opt.generateYaml, opt.f) + print(k, "replicaset", v, opt.toStdout, opt.generateYaml, f) } } if opt.createRC { for k, v := range mReplicationControllers { - print(k, "rc", v, opt.toStdout, opt.generateYaml, opt.f) + print(k, "rc", v, opt.toStdout, opt.generateYaml, f) } } - if opt.f != nil { + if f != nil { fmt.Fprintf(os.Stdout, "file %q created\n", opt.outFile) } if opt.createChart { - err := generateHelm(opt.inputFile, svcnames, opt.generateYaml, opt.createD, opt.createDS, opt.createRS, opt.createRC) + err := generateHelm(opt.inputFile, svcnames, opt.generateYaml, opt.createD, opt.createDS, opt.createRS, opt.createRC, opt.outFile) if err != nil { logrus.Fatalf("Failed to create Chart data: %s\n", err) } @@ -993,7 +996,7 @@ func komposeConvert(komposeObject KomposeObject, opt convertOptions) { if opt.createDeploymentConfig { for k, v := range mDeploymentConfigs { - print(k, "deploymentconfig", v, opt.toStdout, opt.generateYaml, opt.f) + print(k, "deploymentconfig", v, opt.toStdout, opt.generateYaml, f) } } } @@ -1054,12 +1057,6 @@ func Convert(c *cli.Context) { logrus.Fatalf("Error: compose file and dab file cannot be specified at the same time") } - var f *os.File - if !createChart { - f = createOutFile(outFile) - defer f.Close() - } - komposeObject := KomposeObject{} file := inputFile @@ -1067,7 +1064,7 @@ func Convert(c *cli.Context) { komposeObject = loadBundlesFile(dabFile) file = dabFile } else { - komposeObject = loadComposeFile(inputFile, c) + komposeObject = loadComposeFile(inputFile) } // Convert komposeObject to K8S controllers @@ -1083,7 +1080,6 @@ func Convert(c *cli.Context) { replicas: replicas, inputFile: file, outFile: outFile, - f: f, } komposeConvert(komposeObject, opt) } diff --git a/cli/app/k8sutils.go b/cli/app/k8sutils.go index cdb83bb4..f5a6ca74 100644 --- a/cli/app/k8sutils.go +++ b/cli/app/k8sutils.go @@ -32,7 +32,7 @@ import ( /** * Generate Helm Chart configuration */ -func generateHelm(filename string, svcnames []string, generateYaml, createD, createDS, createRS, createRC bool) error { +func generateHelm(filename string, svcnames []string, generateYaml, createD, createDS, createRS, createRC bool, outFile string) error { type ChartDetails struct { Name string } @@ -90,42 +90,47 @@ home: } /* Copy all related json/yaml files into the newly created manifests directory */ - // TODO: support copying the file specified by --out? - for _, svcname := range svcnames { - extension := ".json" - if generateYaml { - extension = ".yaml" - } - if createD { - if err = cpToChart(manifestDir, svcname, "deployment", extension); err != nil { - return err - } - } - if createDS { - if err = cpToChart(manifestDir, svcname, "daemonset", extension); err != nil { - return err - } - } - if createRC { - if err = cpToChart(manifestDir, svcname, "rc", extension); err != nil { - return err - } - } - if createRS { - if err = cpToChart(manifestDir, svcname, "replicaset", extension); err != nil { - return err - } - } - - /* The svc file is optional */ - infile, err := ioutil.ReadFile(svcname + "-svc" + extension) - if err != nil { - continue - } - err = ioutil.WriteFile(manifestDir+string(os.PathSeparator)+svcname+"-svc"+extension, infile, 0644) - if err != nil { + if len(outFile) > 0 { + if err = cpFileToChart(manifestDir, outFile); err != nil { return err } + } else { + for _, svcname := range svcnames { + extension := ".json" + if generateYaml { + extension = ".yaml" + } + if createD { + if err = cpToChart(manifestDir, svcname, "deployment", extension); err != nil { + return err + } + } + if createDS { + if err = cpToChart(manifestDir, svcname, "daemonset", extension); err != nil { + return err + } + } + if createRC { + if err = cpToChart(manifestDir, svcname, "rc", extension); err != nil { + return err + } + } + if createRS { + if err = cpToChart(manifestDir, svcname, "replicaset", extension); err != nil { + return err + } + } + + /* The svc file is optional */ + infile, err := ioutil.ReadFile(svcname + "-svc" + extension) + if err != nil { + continue + } + err = ioutil.WriteFile(manifestDir+string(os.PathSeparator)+svcname+"-svc"+extension, infile, 0644) + if err != nil { + return err + } + } } fmt.Fprintf(os.Stdout, "chart created in %q\n", "."+string(os.PathSeparator)+dirName+string(os.PathSeparator)) @@ -133,11 +138,15 @@ home: } func cpToChart(manifestDir, svcname, trailing, extension string) error { - infile, err := ioutil.ReadFile(svcname + "-" + trailing + extension) + return cpFileToChart(manifestDir, svcname+"-"+trailing+extension) +} + +func cpFileToChart(manifestDir, filename string) error { + infile, err := ioutil.ReadFile(filename) if err != nil { - logrus.Infof("Error reading %s: %s\n", svcname+"-"+trailing+extension, err) + logrus.Infof("Error reading %s: %s\n", filename, err) return err } - return ioutil.WriteFile(manifestDir+string(os.PathSeparator)+svcname+"-"+trailing+extension, infile, 0644) + return ioutil.WriteFile(manifestDir+string(os.PathSeparator)+filename, infile, 0644) }