forked from LaconicNetwork/kompose
Fix cli custom output and charts conflict error
This commit is contained in:
parent
f857afad1c
commit
0f3d368215
@ -51,14 +51,11 @@ import (
|
|||||||
/**
|
/**
|
||||||
* Generate Helm Chart configuration
|
* Generate Helm Chart configuration
|
||||||
*/
|
*/
|
||||||
func generateHelm(filenames []string, outFiles []string) error {
|
func generateHelm(dirName string) error {
|
||||||
type ChartDetails struct {
|
type ChartDetails struct {
|
||||||
Name string
|
Name string
|
||||||
}
|
}
|
||||||
// Let assume all the docker-compose files are in the same directory
|
|
||||||
filename := filenames[0]
|
|
||||||
extension := filepath.Ext(filename)
|
|
||||||
dirName := filename[0 : len(filename)-len(extension)]
|
|
||||||
details := ChartDetails{dirName}
|
details := ChartDetails{dirName}
|
||||||
manifestDir := dirName + string(os.PathSeparator) + "templates"
|
manifestDir := dirName + string(os.PathSeparator) + "templates"
|
||||||
dir, err := os.Open(dirName)
|
dir, err := os.Open(dirName)
|
||||||
@ -78,6 +75,7 @@ func generateHelm(filenames []string, outFiles []string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Create the readme file */
|
/* Create the readme file */
|
||||||
readme := "This chart was created by Kompose\n"
|
readme := "This chart was created by Kompose\n"
|
||||||
@ -107,31 +105,11 @@ home:
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Copy all related json/yaml files into the newly created manifests directory */
|
log.Infof("chart created in %q\n", dirName+string(os.PathSeparator))
|
||||||
for _, filename := range outFiles {
|
|
||||||
if err = cpFileToChart(manifestDir, filename); err != nil {
|
|
||||||
log.Warningln(err)
|
|
||||||
}
|
|
||||||
if err = os.Remove(filename); err != nil {
|
|
||||||
log.Warningln(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
log.Infof("chart created in %q\n", "."+string(os.PathSeparator)+dirName+string(os.PathSeparator))
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func cpFileToChart(manifestDir, filename string) error {
|
|
||||||
infile, err := ioutil.ReadFile(filename)
|
|
||||||
if err != nil {
|
|
||||||
log.Warningf("Error reading %s: %s\n", filename, err)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return ioutil.WriteFile(manifestDir+string(os.PathSeparator)+filename, infile, 0644)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if given path is a directory
|
// Check if given path is a directory
|
||||||
func isDir(name string) (bool, error) {
|
func isDir(name string) (bool, error) {
|
||||||
|
|
||||||
@ -155,20 +133,37 @@ func isDir(name string) (bool, error) {
|
|||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getDirName(opt kobject.ConvertOptions) string {
|
||||||
|
dirName := opt.OutFile
|
||||||
|
if dirName == "" {
|
||||||
|
// Let assume all the docker-compose files are in the same directory
|
||||||
|
if opt.CreateChart {
|
||||||
|
filename := opt.InputFiles[0]
|
||||||
|
extension := filepath.Ext(filename)
|
||||||
|
dirName = filename[0 : len(filename)-len(extension)]
|
||||||
|
} else {
|
||||||
|
dirName = "."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dirName
|
||||||
|
}
|
||||||
|
|
||||||
// PrintList will take the data converted and decide on the commandline attributes given
|
// PrintList will take the data converted and decide on the commandline attributes given
|
||||||
func PrintList(objects []runtime.Object, opt kobject.ConvertOptions) error {
|
func PrintList(objects []runtime.Object, opt kobject.ConvertOptions) error {
|
||||||
|
|
||||||
var f *os.File
|
var f *os.File
|
||||||
var dirName string
|
dirName := getDirName(opt)
|
||||||
|
log.Debugf("Target Dir: %s", dirName)
|
||||||
|
|
||||||
// Check if output file is a directory
|
// Check if output file is a directory
|
||||||
isDirVal, err := isDir(opt.OutFile)
|
isDirVal, err := isDir(opt.OutFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "isDir failed")
|
return errors.Wrap(err, "isDir failed")
|
||||||
}
|
}
|
||||||
if isDirVal {
|
if opt.CreateChart {
|
||||||
dirName = opt.OutFile
|
isDirVal = true
|
||||||
} else {
|
}
|
||||||
|
if !isDirVal {
|
||||||
f, err = transformer.CreateOutFile(opt.OutFile)
|
f, err = transformer.CreateOutFile(opt.OutFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "transformer.CreateOutFile failed")
|
return errors.Wrap(err, "transformer.CreateOutFile failed")
|
||||||
@ -200,7 +195,7 @@ func PrintList(objects []runtime.Object, opt kobject.ConvertOptions) error {
|
|||||||
}
|
}
|
||||||
data, err := marshal(convertedList, opt.GenerateJSON)
|
data, err := marshal(convertedList, opt.GenerateJSON)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error in marshalling the List: %v", err)
|
return fmt.Errorf("error in marshalling the List: %v", err)
|
||||||
}
|
}
|
||||||
printVal, err := transformer.Print("", dirName, "", data, opt.ToStdout, opt.GenerateJSON, f, opt.Provider)
|
printVal, err := transformer.Print("", dirName, "", data, opt.ToStdout, opt.GenerateJSON, f, opt.Provider)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -208,6 +203,15 @@ func PrintList(objects []runtime.Object, opt kobject.ConvertOptions) error {
|
|||||||
}
|
}
|
||||||
files = append(files, printVal)
|
files = append(files, printVal)
|
||||||
} else {
|
} else {
|
||||||
|
finalDirName := dirName
|
||||||
|
if opt.CreateChart {
|
||||||
|
finalDirName = dirName + string(os.PathSeparator) + "templates"
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := os.MkdirAll(finalDirName, 0755); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
var file string
|
var file string
|
||||||
// create a separate file for each provider
|
// create a separate file for each provider
|
||||||
for _, v := range objects {
|
for _, v := range objects {
|
||||||
@ -229,7 +233,7 @@ func PrintList(objects []runtime.Object, opt kobject.ConvertOptions) error {
|
|||||||
// cast it to correct type - api.ObjectMeta
|
// cast it to correct type - api.ObjectMeta
|
||||||
objectMeta := val.FieldByName("ObjectMeta").Interface().(api.ObjectMeta)
|
objectMeta := val.FieldByName("ObjectMeta").Interface().(api.ObjectMeta)
|
||||||
|
|
||||||
file, err = transformer.Print(objectMeta.Name, dirName, strings.ToLower(typeMeta.Kind), data, opt.ToStdout, opt.GenerateJSON, f, opt.Provider)
|
file, err = transformer.Print(objectMeta.Name, finalDirName, strings.ToLower(typeMeta.Kind), data, opt.ToStdout, opt.GenerateJSON, f, opt.Provider)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "transformer.Print failed")
|
return errors.Wrap(err, "transformer.Print failed")
|
||||||
}
|
}
|
||||||
@ -238,7 +242,7 @@ func PrintList(objects []runtime.Object, opt kobject.ConvertOptions) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if opt.CreateChart {
|
if opt.CreateChart {
|
||||||
err = generateHelm(opt.InputFiles, files)
|
err = generateHelm(dirName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "generateHelm failed")
|
return errors.Wrap(err, "generateHelm failed")
|
||||||
}
|
}
|
||||||
|
|||||||
@ -362,6 +362,10 @@ convert::check_artifacts_generated "kompose -f $KOMPOSE_ROOT/script/test/fixture
|
|||||||
# Behavior with -o <dirname>/<filename>
|
# Behavior with -o <dirname>/<filename>
|
||||||
convert::check_artifacts_generated "kompose -f $KOMPOSE_ROOT/script/test/fixtures/redis-example/docker-compose.yml convert -o $TEMP_DIR/output_file -j" "$TEMP_DIR/output_file"
|
convert::check_artifacts_generated "kompose -f $KOMPOSE_ROOT/script/test/fixtures/redis-example/docker-compose.yml convert -o $TEMP_DIR/output_file -j" "$TEMP_DIR/output_file"
|
||||||
|
|
||||||
|
######
|
||||||
|
# Test charts generate with custom dir
|
||||||
|
convert::check_artifacts_generated "kompose -f $KOMPOSE_ROOT/script/test/fixtures/redis-example/docker-compose.yml convert -o $TEMP_DIR -j -c" "$TEMP_DIR/Chart.yaml" "$TEMP_DIR/README.md" "$TEMP_DIR/templates/redis-deployment.json" "$TEMP_DIR/templates/redis-service.json" "$TEMP_DIR/templates/web-deployment.json" "$TEMP_DIR/templates/web-service.json"
|
||||||
|
|
||||||
####
|
####
|
||||||
# Test regarding build context (running kompose from various directories)
|
# Test regarding build context (running kompose from various directories)
|
||||||
# Replacing variables with current branch and uri
|
# Replacing variables with current branch and uri
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user