You've already forked dcmerge
Initial Commit
This commit is contained in:
101
cmd/root.go
Normal file
101
cmd/root.go
Normal file
@ -0,0 +1,101 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"git.cryptic.systems/volker.raschek/dcmerge/pkg/domain/dockerCompose"
|
||||
"git.cryptic.systems/volker.raschek/dcmerge/pkg/fetcher"
|
||||
"github.com/spf13/cobra"
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
func Execute(version string) error {
|
||||
completionCmd := &cobra.Command{
|
||||
Use: "completion [bash|zsh|fish|powershell]",
|
||||
Short: "Generate completion script",
|
||||
Long: "To load completions",
|
||||
DisableFlagsInUseLine: true,
|
||||
ValidArgs: []string{"bash", "zsh", "fish", "powershell"},
|
||||
Args: cobra.ExactValidArgs(1),
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
switch args[0] {
|
||||
case "bash":
|
||||
cmd.Root().GenBashCompletion(os.Stdout)
|
||||
case "zsh":
|
||||
cmd.Root().GenZshCompletion(os.Stdout)
|
||||
case "fish":
|
||||
cmd.Root().GenFishCompletion(os.Stdout, true)
|
||||
case "powershell":
|
||||
cmd.Root().GenPowerShellCompletionWithDesc(os.Stdout)
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
rootCmd := &cobra.Command{
|
||||
Use: "dcmerge",
|
||||
Args: cobra.MinimumNArgs(2),
|
||||
Short: "Merge docker-compose files from multiple resources",
|
||||
Example: `dcmerge docker-compose.yml ./integration-test/docker-compose.yml
|
||||
dcmerge docker-compose.yml https://git.example.local/user/repo/docker-compose.yml`,
|
||||
RunE: run,
|
||||
Version: version,
|
||||
}
|
||||
rootCmd.Flags().BoolP("last-merge", "l", false, "Overwrite existing attributes")
|
||||
rootCmd.Flags().BoolP("output-file", "o", false, "Write instead on stdout into a file")
|
||||
rootCmd.AddCommand(completionCmd)
|
||||
|
||||
return rootCmd.Execute()
|
||||
}
|
||||
|
||||
func run(cmd *cobra.Command, args []string) error {
|
||||
mergeLastWin, err := cmd.Flags().GetBool("last-merge")
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to parse flag last-merge: %s", err)
|
||||
}
|
||||
|
||||
outputFile, err := cmd.Flags().GetString("output-file")
|
||||
if err != nil {
|
||||
return fmt.Errorf("Failed to parse flag output-file: %s", err)
|
||||
}
|
||||
|
||||
dockerComposeConfig := dockerCompose.NewConfig()
|
||||
|
||||
dockerComposeConfigs, err := fetcher.Fetch(args...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, config := range dockerComposeConfigs {
|
||||
switch {
|
||||
case mergeLastWin:
|
||||
dockerComposeConfig.MergeLastWin(config)
|
||||
default:
|
||||
dockerComposeConfig.Merge(config)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
switch {
|
||||
case len(outputFile) > 0:
|
||||
err = os.MkdirAll(filepath.Dir(outputFile), 0755)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
f, err := os.Create(outputFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
yamlEncoder := yaml.NewEncoder(f)
|
||||
return yamlEncoder.Encode(dockerComposeConfig)
|
||||
|
||||
default:
|
||||
yamlEncoder := yaml.NewEncoder(os.Stdout)
|
||||
return yamlEncoder.Encode(dockerComposeConfig)
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user