files to validate should be passed without -file, for ease of use with xargs

This commit is contained in:
Yann Hamon 2020-06-06 01:01:48 +02:00
parent 8fed078b9e
commit dcaf1bc608
3 changed files with 26 additions and 15 deletions

View file

@ -19,8 +19,8 @@ $ ./bin/kubeconform -h
Usage of ./bin/kubeconform: Usage of ./bin/kubeconform:
-dir value -dir value
directory to validate (can be specified multiple times) directory to validate (can be specified multiple times)
-file value -ignore-missing-schemas
file to validate (can be specified multiple times) skip files with missing schemas instead of failing
-k8sversion string -k8sversion string
version of Kubernetes to test against (default "1.18.0") version of Kubernetes to test against (default "1.18.0")
-n int -n int
@ -80,6 +80,13 @@ fixtures/invalid.yaml - ReplicationController is invalid: Invalid type. Expected
Run summary - Valid: 40, Invalid: 2, Errors: 0 Skipped: 6 Run summary - Valid: 40, Invalid: 2, Errors: 0 Skipped: 6
``` ```
* Validating a custom resources, using a local schema
```
$ bin/kubeconform -file fixtures/test_crd.yaml -schema fixtures/crd_schema.yaml -verbose
fixtures/test_crd.yaml - TrainingJob is valid
```
### Credits ### Credits
* @garethr for the [Kubeval](https://github.com/instrumenta/kubeval) and * @garethr for the [Kubeval](https://github.com/instrumenta/kubeval) and

View file

@ -1,61 +1,61 @@
#!/usr/bin/env bats #!/usr/bin/env bats
@test "Pass when parsing a valid Kubernetes config YAML file" { @test "Pass when parsing a valid Kubernetes config YAML file" {
run bin/kubeconform -file fixtures/valid.yaml -summary run bin/kubeconform -summary fixtures/valid.yaml
[ "$status" -eq 0 ] [ "$status" -eq 0 ]
[ "$output" = "Summary: 1 resource found in 1 file - Valid: 1, Invalid: 0, Errors: 0 Skipped: 0" ] [ "$output" = "Summary: 1 resource found in 1 file - Valid: 1, Invalid: 0, Errors: 0 Skipped: 0" ]
} }
@test "Pass when parsing a Kubernetes file with string and integer quantities" { @test "Pass when parsing a Kubernetes file with string and integer quantities" {
run bin/kubeconform -verbose -file fixtures/quantity.yaml run bin/kubeconform -verbose fixtures/quantity.yaml
[ "$status" -eq 0 ] [ "$status" -eq 0 ]
[ "$output" = "fixtures/quantity.yaml - LimitRange is valid" ] [ "$output" = "fixtures/quantity.yaml - LimitRange is valid" ]
} }
@test "Pass when parsing a valid Kubernetes config file with null arrays" { @test "Pass when parsing a valid Kubernetes config file with null arrays" {
run bin/kubeconform -verbose -file fixtures/null_string.yaml run bin/kubeconform -verbose fixtures/null_string.yaml
[ "$status" -eq 0 ] [ "$status" -eq 0 ]
[ "$output" = "fixtures/null_string.yaml - Service is valid" ] [ "$output" = "fixtures/null_string.yaml - Service is valid" ]
} }
@test "Pass when parsing a multi-document config file" { @test "Pass when parsing a multi-document config file" {
run bin/kubeconform -summary -file fixtures/multi_valid.yaml run bin/kubeconform -summary fixtures/multi_valid.yaml
[ "$status" -eq 0 ] [ "$status" -eq 0 ]
[ "$output" = "Summary: 6 resources found in 1 file - Valid: 6, Invalid: 0, Errors: 0 Skipped: 0" ] [ "$output" = "Summary: 6 resources found in 1 file - Valid: 6, Invalid: 0, Errors: 0 Skipped: 0" ]
} }
@test "Fail when parsing a multi-document config file with one invalid resource" { @test "Fail when parsing a multi-document config file with one invalid resource" {
run bin/kubeconform -file fixtures/multi_invalid.yaml run bin/kubeconform fixtures/multi_invalid.yaml
[ "$status" -eq 1 ] [ "$status" -eq 1 ]
} }
@test "Fail when parsing an invalid Kubernetes config file" { @test "Fail when parsing an invalid Kubernetes config file" {
run bin/kubeconform -file fixtures/invalid.yaml run bin/kubeconform fixtures/invalid.yaml
[ "$status" -eq 1 ] [ "$status" -eq 1 ]
} }
@test "Return relevant error for non-existent file" { @test "Return relevant error for non-existent file" {
run bin/kubeconform -file fixtures/not-here run bin/kubeconform fixtures/not-here
[ "$status" -eq 1 ] [ "$status" -eq 1 ]
[ $(expr "$output" : "^failed opening fixtures/not-here") -ne 0 ] [ $(expr "$output" : "^failed opening fixtures/not-here") -ne 0 ]
} }
@test "Fail when parsing a config with additional properties and strict set" { @test "Fail when parsing a config with additional properties and strict set" {
run bin/kubeconform -strict -k8sversion 1.16.0 -file fixtures/extra_property.yaml run bin/kubeconform -strict -k8sversion 1.16.0 fixtures/extra_property.yaml
[ "$status" -eq 1 ] [ "$status" -eq 1 ]
} }
@test "Fail when parsing a config with CRD" { @test "Fail when parsing a config with CRD" {
run bin/kubeconform -file fixtures/test_crd.yaml run bin/kubeconform fixtures/test_crd.yaml
[ "$status" -eq 1 ] [ "$status" -eq 1 ]
} }
@test "Pass when parsing a config with CRD and ignoring missing schemas" { @test "Pass when parsing a config with CRD and ignoring missing schemas" {
run bin/kubeconform -file fixtures/test_crd.yaml -ignore-missing-schemas run bin/kubeconform -ignore-missing-schemas fixtures/test_crd.yaml
[ "$status" -eq 0 ] [ "$status" -eq 0 ]
} }
@test "Succeed parsing a CRD when additional schema passed" { @test "Succeed parsing a CRD when additional schema passed" {
run bin/kubeconform -file fixtures/test_crd.yaml -schema fixtures/crd_schema.yaml run bin/kubeconform -schema fixtures/crd_schema.yaml fixtures/test_crd.yaml
[ "$status" -eq 0 ] [ "$status" -eq 0 ]
} }

View file

@ -178,14 +178,14 @@ func processResults(o output.Output, validationResults chan []validationResult,
} }
func realMain() int { func realMain() int {
var files, dirs, schemas arrayParam var dirs, schemas arrayParam
var skipKindsCSV, k8sVersion, outputFormat string var skipKindsCSV, k8sVersion, outputFormat string
var summary, strict, verbose, ignoreMissingSchemas bool var summary, strict, verbose, ignoreMissingSchemas bool
var nWorkers int var nWorkers int
var err error var err error
var files []string
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(&dirs, "dir", "directory to validate (can be specified multiple times)") flag.Var(&dirs, "dir", "directory to validate (can be specified multiple times)")
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(&ignoreMissingSchemas, "ignore-missing-schemas", false, "skip files with missing schemas instead of failing") flag.BoolVar(&ignoreMissingSchemas, "ignore-missing-schemas", false, "skip files with missing schemas instead of failing")
@ -199,6 +199,10 @@ func realMain() int {
skipKinds := skipKindsMap(skipKindsCSV) skipKinds := skipKindsMap(skipKindsCSV)
for _, file := range flag.Args() {
files = append(files, file)
}
filter := func(signature resource.Signature) bool { filter := func(signature resource.Signature) bool {
isSkipKind, ok := skipKinds[signature.Kind] isSkipKind, ok := skipKinds[signature.Kind]
return ok && isSkipKind return ok && isSkipKind