diff --git a/cmd/katenary/main.go b/cmd/katenary/main.go index 712f057..ceaea8e 100644 --- a/cmd/katenary/main.go +++ b/cmd/katenary/main.go @@ -50,6 +50,7 @@ func main() { } // convert command, need some flags + var composeFiles *[]string convertCmd := &cobra.Command{ Use: "convert", Short: "Convert docker-compose to helm chart", @@ -61,9 +62,7 @@ func main() { "- if it's not defined, so the 0.0.1 version is used", Run: func(c *cobra.Command, args []string) { force := c.Flag("force").Changed - // TODO: is there a way to get typed values from cobra? appversion := c.Flag("app-version").Value.String() - composeFile := c.Flag("compose-file").Value.String() appName := c.Flag("app-name").Value.String() chartVersion := c.Flag("chart-version").Value.String() chartDir := c.Flag("output-dir").Value.String() @@ -71,17 +70,17 @@ func main() { if err != nil { writers.IndentSize = indentation } - Convert(composeFile, appversion, appName, chartDir, chartVersion, force) + Convert(*composeFiles, appversion, appName, chartDir, chartVersion, force) }, } + composeFiles = convertCmd.Flags().StringArrayP( + "compose-file", "c", []string{ComposeFile}, "compose file to convert, can be use several times to override previous file. Order is important!") convertCmd.Flags().BoolP( "force", "f", false, "force overwrite of existing output files") convertCmd.Flags().StringP( "app-version", "a", AppVersion, "app version") convertCmd.Flags().StringP( "chart-version", "v", ChartVersion, "chart version") - convertCmd.Flags().StringP( - "compose-file", "c", ComposeFile, "docker compose file") convertCmd.Flags().StringP( "app-name", "n", AppName, "application name") convertCmd.Flags().StringP( diff --git a/cmd/katenary/utils.go b/cmd/katenary/utils.go index bc0d8b4..118932e 100644 --- a/cmd/katenary/utils.go +++ b/cmd/katenary/utils.go @@ -93,19 +93,24 @@ func detectGitVersion() (string, error) { return defaulVersion, errors.New("git log failed") } -func Convert(composeFile, appVersion, appName, chartDir, chartVersion string, force bool) { +func Convert(composeFile []string, appVersion, appName, chartDir, chartVersion string, force bool) { if len(composeFile) == 0 { fmt.Println("No compose file given") return } - _, err := os.Stat(composeFile) - if err != nil { - fmt.Println("No compose file found") - os.Exit(1) + + composeFiles := composeFile + ComposeFile = composeFiles[0] + + for _, cf := range composeFiles { + if _, err := os.Stat(cf); err != nil { + fmt.Printf("Compose file %s not found\n", cf) + return + } } // Parse the compose file now - p := compose.NewParser(composeFile) + p := compose.NewParser(composeFiles) p.Parse(appName) dirname := filepath.Join(chartDir, appName) diff --git a/compose/parser.go b/compose/parser.go index 86b0cb5..2653b5b 100644 --- a/compose/parser.go +++ b/compose/parser.go @@ -26,32 +26,37 @@ var ( ) // NewParser create a Parser and parse the file given in filename. If filename is empty, we try to parse the content[0] argument that should be a valid YAML content. -func NewParser(filename string, content ...string) *Parser { +func NewParser(filename []string, content ...string) *Parser { p := &Parser{} if len(content) > 0 { // mainly for the tests... - dir := filepath.Dir(filename) + dir := filepath.Dir(filename[0]) err := os.MkdirAll(dir, 0755) if err != nil { log.Fatal(err) } p.temporary = &dir - ioutil.WriteFile(filename, []byte(content[0]), 0644) - cli.DefaultFileNames = []string{filename} + ioutil.WriteFile(filename[0], []byte(content[0]), 0644) + cli.DefaultFileNames = filename } // if filename is not in cli Default files, add it if len(filename) > 0 { found := false - for _, f := range cli.DefaultFileNames { - if f == filename { - found = true - break + for _, defaultFileName := range cli.DefaultFileNames { + for _, givenFileName := range filename { + if defaultFileName == givenFileName { + found = true + break + } } } // add the file at first position if !found { - cli.DefaultFileNames = append([]string{filename}, cli.DefaultFileNames...) + cli.DefaultFileNames = append([]string{filename[0]}, cli.DefaultFileNames...) + } + if len(filename) > 1 { + cli.DefaultOverrideFileNames = append(filename[1:], cli.DefaultOverrideFileNames...) } } diff --git a/generator/main_test.go b/generator/main_test.go index 7a57006..c90ca39 100644 --- a/generator/main_test.go +++ b/generator/main_test.go @@ -127,7 +127,7 @@ func setUp(t *testing.T) (string, *compose.Parser) { } composefile := filepath.Join(tmpwork, "docker-compose.yaml") - p := compose.NewParser(composefile, DOCKER_COMPOSE_YML) + p := compose.NewParser([]string{composefile}, DOCKER_COMPOSE_YML) // create envfile for "useenvfile" service err = os.Mkdir(filepath.Join(tmpwork, "config"), 0777)