mirror of
https://github.com/yannh/kubeconform.git
synced 2026-02-22 19:27:01 +00:00
add -ignore-filename-pattern option
This commit is contained in:
parent
44710f9053
commit
f78b65b025
5 changed files with 50 additions and 17 deletions
|
|
@ -51,6 +51,8 @@ Usage: ./bin/kubeconform [OPTION]... [FILE OR FOLDER]...
|
||||||
-exit-on-error
|
-exit-on-error
|
||||||
immediately stop execution when the first error is encountered
|
immediately stop execution when the first error is encountered
|
||||||
-h show help information
|
-h show help information
|
||||||
|
-ignore-filename-pattern value
|
||||||
|
regular expression specifying paths to ignore (can be specified multiple times)
|
||||||
-ignore-missing-schemas
|
-ignore-missing-schemas
|
||||||
skip files with missing schemas instead of failing
|
skip files with missing schemas instead of failing
|
||||||
-insecure-skip-tls-verify
|
-insecure-skip-tls-verify
|
||||||
|
|
|
||||||
|
|
@ -166,3 +166,9 @@
|
||||||
[ "$status" -eq 1 ]
|
[ "$status" -eq 1 ]
|
||||||
[ "$output" = "fixtures/valid.yaml - ReplicationController bob failed validation: prohibited resource kind ReplicationController" ]
|
[ "$output" = "fixtures/valid.yaml - ReplicationController bob failed validation: prohibited resource kind ReplicationController" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@test "Ignores file that match the --ignore-filename-pattern given" {
|
||||||
|
run bin/kubeconform -summary --ignore-filename-pattern 'crd' --ignore-filename-pattern '.*invalid.*' fixtures/multi_invalid.yaml fixtures/list_invalid.yaml fixtures/quantity.yaml fixtures/crd_schema.yaml
|
||||||
|
[ "$status" -eq 0 ]
|
||||||
|
[ "$output" = "Summary: 1 resource found in 1 file - Valid: 1, Invalid: 0, Errors: 0 Skipped: 0" ]
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -169,7 +169,7 @@ func realMain() int {
|
||||||
if isStdin {
|
if isStdin {
|
||||||
resourcesChan, errors = resource.FromStream(ctx, "stdin", os.Stdin)
|
resourcesChan, errors = resource.FromStream(ctx, "stdin", os.Stdin)
|
||||||
} else {
|
} else {
|
||||||
resourcesChan, errors = resource.FromFiles(ctx, cfg.Files...)
|
resourcesChan, errors = resource.FromFiles(ctx, cfg.IgnoreFilenamePatterns, cfg.Files...)
|
||||||
}
|
}
|
||||||
|
|
||||||
c := cache.New()
|
c := cache.New()
|
||||||
|
|
|
||||||
|
|
@ -9,20 +9,21 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
ExitOnError bool
|
ExitOnError bool
|
||||||
Files []string
|
Files []string
|
||||||
SchemaLocations []string
|
SchemaLocations []string
|
||||||
SkipTLS bool
|
SkipTLS bool
|
||||||
SkipKinds map[string]bool
|
SkipKinds map[string]bool
|
||||||
RejectKinds map[string]bool
|
RejectKinds map[string]bool
|
||||||
OutputFormat string
|
OutputFormat string
|
||||||
KubernetesVersion string
|
KubernetesVersion string
|
||||||
NumberOfWorkers int
|
NumberOfWorkers int
|
||||||
Summary bool
|
Summary bool
|
||||||
Strict bool
|
Strict bool
|
||||||
Verbose bool
|
Verbose bool
|
||||||
IgnoreMissingSchemas bool
|
IgnoreMissingSchemas bool
|
||||||
Help bool
|
IgnoreFilenamePatterns []string
|
||||||
|
Help bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type arrayParam []string
|
type arrayParam []string
|
||||||
|
|
@ -50,7 +51,7 @@ func splitCSV(csvStr string) map[string]bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func FromFlags(progName string, args []string) (Config, string, error) {
|
func FromFlags(progName string, args []string) (Config, string, error) {
|
||||||
var schemaLocationsParam arrayParam
|
var schemaLocationsParam, ignoreFilenamePatterns arrayParam
|
||||||
var skipKindsCSV, rejectKindsCSV string
|
var skipKindsCSV, rejectKindsCSV string
|
||||||
flags := flag.NewFlagSet(progName, flag.ExitOnError)
|
flags := flag.NewFlagSet(progName, flag.ExitOnError)
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
|
|
@ -65,6 +66,7 @@ func FromFlags(progName string, args []string) (Config, string, error) {
|
||||||
flags.StringVar(&rejectKindsCSV, "reject", "", "comma-separated list of kinds to reject")
|
flags.StringVar(&rejectKindsCSV, "reject", "", "comma-separated list of kinds to reject")
|
||||||
flags.BoolVar(&c.ExitOnError, "exit-on-error", false, "immediately stop execution when the first error is encountered")
|
flags.BoolVar(&c.ExitOnError, "exit-on-error", false, "immediately stop execution when the first error is encountered")
|
||||||
flags.BoolVar(&c.IgnoreMissingSchemas, "ignore-missing-schemas", false, "skip files with missing schemas instead of failing")
|
flags.BoolVar(&c.IgnoreMissingSchemas, "ignore-missing-schemas", false, "skip files with missing schemas instead of failing")
|
||||||
|
flags.Var(&ignoreFilenamePatterns, "ignore-filename-pattern", "regular expression specifying paths to ignore (can be specified multiple times)")
|
||||||
flags.BoolVar(&c.Summary, "summary", false, "print a summary at the end")
|
flags.BoolVar(&c.Summary, "summary", false, "print a summary at the end")
|
||||||
flags.IntVar(&c.NumberOfWorkers, "n", 4, "number of goroutines to run concurrently")
|
flags.IntVar(&c.NumberOfWorkers, "n", 4, "number of goroutines to run concurrently")
|
||||||
flags.BoolVar(&c.Strict, "strict", false, "disallow additional properties not in schema")
|
flags.BoolVar(&c.Strict, "strict", false, "disallow additional properties not in schema")
|
||||||
|
|
@ -83,6 +85,7 @@ func FromFlags(progName string, args []string) (Config, string, error) {
|
||||||
|
|
||||||
c.SkipKinds = splitCSV(skipKindsCSV)
|
c.SkipKinds = splitCSV(skipKindsCSV)
|
||||||
c.RejectKinds = splitCSV(rejectKindsCSV)
|
c.RejectKinds = splitCSV(rejectKindsCSV)
|
||||||
|
c.IgnoreFilenamePatterns = ignoreFilenamePatterns
|
||||||
c.SchemaLocations = schemaLocationsParam
|
c.SchemaLocations = schemaLocationsParam
|
||||||
if len(c.SchemaLocations) == 0 {
|
if len(c.SchemaLocations) == 0 {
|
||||||
c.SchemaLocations = append(c.SchemaLocations, "https://kubernetesjsonschema.dev") // if not specified, default behaviour is to use kubernetesjson-schema.dev as registry
|
c.SchemaLocations = append(c.SchemaLocations, "https://kubernetesjsonschema.dev") // if not specified, default behaviour is to use kubernetesjson-schema.dev as registry
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -27,7 +28,20 @@ func (de DiscoveryError) Error() string {
|
||||||
return de.Err.Error()
|
return de.Err.Error()
|
||||||
}
|
}
|
||||||
|
|
||||||
func FromFiles(ctx context.Context, paths ...string) (<-chan Resource, <-chan error) {
|
func isIgnored(path string, ignoreFilePatterns []string) (bool, error) {
|
||||||
|
for _, p := range ignoreFilePatterns {
|
||||||
|
m, err := regexp.MatchString(p, path)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
if m {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func FromFiles(ctx context.Context, ignoreFilePatterns []string, paths ...string) (<-chan Resource, <-chan error) {
|
||||||
resources := make(chan Resource)
|
resources := make(chan Resource)
|
||||||
errors := make(chan error)
|
errors := make(chan error)
|
||||||
stop := false
|
stop := false
|
||||||
|
|
@ -53,6 +67,14 @@ func FromFiles(ctx context.Context, paths ...string) (<-chan Resource, <-chan er
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ignored, err := isIgnored(path, ignoreFilePatterns)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if ignored {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
f, err := os.Open(p)
|
f, err := os.Open(p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue