further breakdown of main function

This commit is contained in:
Yann Hamon 2020-05-31 20:16:03 +02:00
parent 795cc54679
commit 0cb1f40f24

69
main.go
View file

@ -114,23 +114,52 @@ func validateFile(r io.Reader, regs []registry.Registry, k8sVersion string, c *c
return validationResults return validationResults
} }
type arrayFiles []string type arrayParam []string
func (i *arrayFiles) String() string { func (ap *arrayParam) String() string {
return "my string representation" s := ""
for _, param := range *ap {
if s == "" {
s += param
} else {
s += " - " + param
}
}
return s
} }
func (i *arrayFiles) Set(value string) error { func (ap *arrayParam) Set(value string) error {
*i = append(*i, value) *ap = append(*ap, value)
return nil return nil
} }
func getLogger(outputFormat string, printSummary, quiet bool) (output.Output, error) {
switch {
case outputFormat == "text":
return output.NewTextOutput(printSummary, quiet)
case outputFormat == "json":
return output.NewJSONOutput(printSummary, quiet)
default:
return nil, fmt.Errorf("-output must be text or json")
}
}
func skipKindsMap(skipKindsCSV string) map[string]bool {
splitKinds := strings.Split(skipKindsCSV, ",")
skipKinds := map[string]bool{}
for _, kind := range splitKinds {
skipKinds[kind] = true
}
return skipKinds
}
func realMain() int { func realMain() int {
var files, dirs, schemas arrayFiles var files, dirs, schemas arrayParam
var skipKinds, k8sVersion, outputFormat string var skipKindsCSV, k8sVersion, outputFormat string
var printSummary, strict bool var printSummary, strict, quiet bool
var nWorkers int var nWorkers int
var quiet bool var err error
flag.StringVar(&k8sVersion, "k8sversion", "1.18.0", "version of Kubernetes to test against") flag.StringVar(&k8sVersion, "k8sversion", "1.18.0", "version of Kubernetes to test against")
flag.Var(&files, "file", "file to validate (can be specified multiple times)") flag.Var(&files, "file", "file to validate (can be specified multiple times)")
@ -138,29 +167,22 @@ func realMain() int {
flag.Var(&schemas, "schema", "file containing an additional Schema (can be specified multiple times)") flag.Var(&schemas, "schema", "file containing an additional Schema (can be specified multiple times)")
flag.BoolVar(&printSummary, "printsummary", false, "print a summary at the end") flag.BoolVar(&printSummary, "printsummary", false, "print a summary at the end")
flag.IntVar(&nWorkers, "workers", 4, "number of routines to run in parallel") flag.IntVar(&nWorkers, "workers", 4, "number of routines to run in parallel")
flag.StringVar(&skipKinds, "skipKinds", "", "comma-separated list of kinds to ignore") flag.StringVar(&skipKindsCSV, "skipKinds", "", "comma-separated list of kinds to ignore")
flag.BoolVar(&strict, "strict", false, "disallow additional properties not in schema") flag.BoolVar(&strict, "strict", false, "disallow additional properties not in schema")
flag.StringVar(&outputFormat, "output", "text", "output format - text, json") flag.StringVar(&outputFormat, "output", "text", "output format - text, json")
flag.BoolVar(&quiet, "quiet", false, "quiet output - only print invalid files, and errors") flag.BoolVar(&quiet, "quiet", false, "quiet output - only print invalid files, and errors")
flag.Parse() flag.Parse()
var o output.Output var o output.Output
switch { if o, err = getLogger(outputFormat, printSummary, quiet); err != nil {
case outputFormat == "text": fmt.Println(err)
o = output.NewTextOutput(printSummary, quiet) return 1
case outputFormat == "json":
o = output.NewJSONOutput(printSummary, quiet)
default:
log.Fatalf("-output must be text or json")
} }
splitKinds := strings.Split(skipKinds, ",") skipKinds := skipKindsMap(skipKindsCSV)
kinds := map[string]bool{}
for _, kind := range splitKinds {
kinds[kind] = true
}
filter := func(signature resource.Signature) bool { filter := func(signature resource.Signature) bool {
isSkipKind, ok := kinds[signature.Kind] isSkipKind, ok := skipKinds[signature.Kind]
return ok && isSkipKind return ok && isSkipKind
} }
@ -175,7 +197,6 @@ func realMain() int {
} }
fileBatches := make(chan []string) fileBatches := make(chan []string)
go func() { go func() {
for _, dir := range dirs { for _, dir := range dirs {
if err := fsutils.FindYamlInDir(dir, fileBatches, 10); err != nil { if err := fsutils.FindYamlInDir(dir, fileBatches, 10); err != nil {