Skip to content

Commit d3613d5

Browse files
committed
chore: support multi-doc yaml files
1 parent a2f1991 commit d3613d5

1 file changed

Lines changed: 35 additions & 15 deletions

File tree

main.go

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package main
33
import (
44
"fmt"
55
"os"
6+
"regexp"
7+
"strings"
68
"sync"
79

810
"github.com/flanksource/batch-runner/pkg"
@@ -29,6 +31,32 @@ var rootCmd = &cobra.Command{
2931
Run: run,
3032
}
3133

34+
func parseConfigFile(configFiles []string) ([]batchv1alpha1.Config, error) {
35+
36+
var configs []batchv1alpha1.Config
37+
38+
for _, configFile := range configFiles {
39+
configData, err := os.ReadFile(configFile)
40+
if err != nil {
41+
return nil, fmt.Errorf("error reading config file %s: %v", configFile, err)
42+
}
43+
44+
re := regexp.MustCompile(`(?m)^---\n`)
45+
for _, chunk := range re.Split(string(configData), -1) {
46+
if strings.TrimSpace(chunk) == "" {
47+
continue
48+
}
49+
50+
var config batchv1alpha1.Config
51+
if err := yaml.Unmarshal([]byte(chunk), &config); err != nil {
52+
return nil, fmt.Errorf("error parsing config file: %w", err)
53+
}
54+
configs = append(configs, config)
55+
}
56+
}
57+
return configs, nil
58+
}
59+
3260
func run(cmd *cobra.Command, args []string) {
3361
ctx, cancel, err := duty.Start("batch-runner", duty.ClientOnly)
3462
defer cancel()
@@ -45,20 +73,12 @@ func run(cmd *cobra.Command, args []string) {
4573

4674
wg := sync.WaitGroup{}
4775

48-
for _, configFile := range configFiles {
49-
if configFile == "" {
50-
continue
51-
}
52-
configData, err := os.ReadFile(configFile)
53-
if err != nil {
54-
logger.Fatalf("Error reading config file: %v", err)
55-
}
56-
57-
var config batchv1alpha1.Config
58-
if err := yaml.Unmarshal(configData, &config); err != nil {
59-
logger.Fatalf("Error parsing config file: %v", err)
60-
os.Exit(1)
61-
}
76+
configs, err := parseConfigFile(configFiles)
77+
if err != nil {
78+
logger.Fatalf(err.Error())
79+
os.Exit(1)
80+
}
81+
for _, config := range configs {
6282

6383
wg.Add(1)
6484

@@ -77,7 +97,7 @@ var configFiles []string
7797

7898
func main() {
7999
rootCmd.Flags().StringArrayVarP(&configFiles, "config", "c", []string{}, "Path to config file")
80-
rootCmd.Flags().MarkDeprecated("config", "Pass the config files as arguments instead")
100+
_ = rootCmd.Flags().MarkDeprecated("config", "Pass the config files as arguments instead")
81101
logger.BindFlags(rootCmd.Flags())
82102

83103
if err := rootCmd.Execute(); err != nil {

0 commit comments

Comments
 (0)