Merge pull request #65 from janetkuo/chart-out

Allow --chart and --out to be specified together
This commit is contained in:
Janet Kuo 2016-07-26 09:38:57 -07:00 committed by GitHub
commit 3e1ae61376
2 changed files with 61 additions and 56 deletions

View File

@ -735,7 +735,7 @@ func loadBundlesFile(file string) KomposeObject {
} }
// Load compose file into KomposeObject // Load compose file into KomposeObject
func loadComposeFile(file string, c *cli.Context) KomposeObject { func loadComposeFile(file string) KomposeObject {
komposeObject := KomposeObject{ komposeObject := KomposeObject{
ServiceConfigs: make(map[string]ServiceConfig), ServiceConfigs: make(map[string]ServiceConfig),
} }
@ -813,7 +813,6 @@ type convertOptions struct {
replicas int replicas int
inputFile string inputFile string
outFile string outFile string
f *os.File
} }
// Convert komposeObject to K8S controllers // Convert komposeObject to K8S controllers
@ -825,6 +824,10 @@ func komposeConvert(komposeObject KomposeObject, opt convertOptions) {
mReplicaSets := make(map[string][]byte) mReplicaSets := make(map[string][]byte)
// OpenShift DeploymentConfigs // OpenShift DeploymentConfigs
mDeploymentConfigs := make(map[string][]byte) mDeploymentConfigs := make(map[string][]byte)
f := createOutFile(opt.outFile)
defer f.Close()
var svcnames []string var svcnames []string
for name, service := range komposeObject.ServiceConfigs { for name, service := range komposeObject.ServiceConfigs {
@ -951,41 +954,41 @@ func komposeConvert(komposeObject KomposeObject, opt convertOptions) {
for k, v := range mServices { for k, v := range mServices {
if v != nil { 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 --out or --stdout is set, the validation should already prevent multiple controllers being generated
if opt.createD { if opt.createD {
for k, v := range mDeployments { 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 { if opt.createDS {
for k, v := range mDaemonSets { 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 { if opt.createRS {
for k, v := range mReplicaSets { 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 { if opt.createRC {
for k, v := range mReplicationControllers { 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) fmt.Fprintf(os.Stdout, "file %q created\n", opt.outFile)
} }
if opt.createChart { 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 { if err != nil {
logrus.Fatalf("Failed to create Chart data: %s\n", err) logrus.Fatalf("Failed to create Chart data: %s\n", err)
} }
@ -993,7 +996,7 @@ func komposeConvert(komposeObject KomposeObject, opt convertOptions) {
if opt.createDeploymentConfig { if opt.createDeploymentConfig {
for k, v := range mDeploymentConfigs { 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") 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{} komposeObject := KomposeObject{}
file := inputFile file := inputFile
@ -1067,7 +1064,7 @@ func Convert(c *cli.Context) {
komposeObject = loadBundlesFile(dabFile) komposeObject = loadBundlesFile(dabFile)
file = dabFile file = dabFile
} else { } else {
komposeObject = loadComposeFile(inputFile, c) komposeObject = loadComposeFile(inputFile)
} }
// Convert komposeObject to K8S controllers // Convert komposeObject to K8S controllers
@ -1083,7 +1080,6 @@ func Convert(c *cli.Context) {
replicas: replicas, replicas: replicas,
inputFile: file, inputFile: file,
outFile: outFile, outFile: outFile,
f: f,
} }
komposeConvert(komposeObject, opt) komposeConvert(komposeObject, opt)
} }

View File

@ -32,7 +32,7 @@ import (
/** /**
* Generate Helm Chart configuration * 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 { type ChartDetails struct {
Name string Name string
} }
@ -90,42 +90,47 @@ home:
} }
/* Copy all related json/yaml files into the newly created manifests directory */ /* Copy all related json/yaml files into the newly created manifests directory */
// TODO: support copying the file specified by --out? if len(outFile) > 0 {
for _, svcname := range svcnames { if err = cpFileToChart(manifestDir, outFile); err != nil {
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 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)) 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 { 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 { 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 err
} }
return ioutil.WriteFile(manifestDir+string(os.PathSeparator)+svcname+"-"+trailing+extension, infile, 0644) return ioutil.WriteFile(manifestDir+string(os.PathSeparator)+filename, infile, 0644)
} }