From 37aacf30b5c13e03fc843dbc1ee1e8056145c20e Mon Sep 17 00:00:00 2001 From: Antoine Pelisse Date: Thu, 17 Aug 2017 14:53:31 -0700 Subject: [PATCH] openapi validation: Ignore unknown types This follows the exact same logic as swagger. --- pkg/kubectl/cmd/util/openapi/validation/BUILD | 2 ++ pkg/kubectl/cmd/util/openapi/validation/validation.go | 7 +++++++ pkg/kubectl/cmd/util/openapi/validation/validation_test.go | 2 ++ 3 files changed, 11 insertions(+) diff --git a/pkg/kubectl/cmd/util/openapi/validation/BUILD b/pkg/kubectl/cmd/util/openapi/validation/BUILD index 74eb5e97218..77b98f39bb3 100644 --- a/pkg/kubectl/cmd/util/openapi/validation/BUILD +++ b/pkg/kubectl/cmd/util/openapi/validation/BUILD @@ -17,6 +17,7 @@ go_library( ], tags = ["automanaged"], deps = [ + "//pkg/api:go_default_library", "//pkg/api/util:go_default_library", "//pkg/kubectl/cmd/util/openapi:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", @@ -36,6 +37,7 @@ go_test( tags = ["automanaged"], deps = [ ":go_default_library", + "//pkg/api/testapi:go_default_library", "//pkg/kubectl/cmd/util/openapi:go_default_library", "//pkg/kubectl/cmd/util/openapi/testing:go_default_library", "//vendor/github.com/onsi/ginkgo:go_default_library", diff --git a/pkg/kubectl/cmd/util/openapi/validation/validation.go b/pkg/kubectl/cmd/util/openapi/validation/validation.go index afb51fd9af3..08bc6a573bd 100644 --- a/pkg/kubectl/cmd/util/openapi/validation/validation.go +++ b/pkg/kubectl/cmd/util/openapi/validation/validation.go @@ -25,6 +25,7 @@ import ( utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/json" "k8s.io/apimachinery/pkg/util/yaml" + "k8s.io/kubernetes/pkg/api" apiutil "k8s.io/kubernetes/pkg/api/util" "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi" ) @@ -75,6 +76,12 @@ func (v *SchemaValidation) validateList(object interface{}) []error { } func (v *SchemaValidation) validateResource(obj interface{}, gvk schema.GroupVersionKind) []error { + if !api.Registry.IsEnabledVersion(gvk.GroupVersion()) { + // if we don't have this in our scheme, just skip + // validation because its an object we don't recognize + return nil + } + resource := v.resources.LookupResource(gvk) if resource == nil { return []error{fmt.Errorf("unknown object type %#v", gvk)} diff --git a/pkg/kubectl/cmd/util/openapi/validation/validation_test.go b/pkg/kubectl/cmd/util/openapi/validation/validation_test.go index 3eb3975dc9d..8454db46880 100644 --- a/pkg/kubectl/cmd/util/openapi/validation/validation_test.go +++ b/pkg/kubectl/cmd/util/openapi/validation/validation_test.go @@ -23,6 +23,8 @@ import ( . "github.com/onsi/gomega" utilerrors "k8s.io/apimachinery/pkg/util/errors" + // This dependency is needed to register API types. + _ "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi" tst "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi/testing" "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi/validation"