From fcdbc054c9ee594173df329311d891bde57da7c1 Mon Sep 17 00:00:00 2001 From: NoSkillGirl Date: Wed, 2 Sep 2020 16:33:55 +0530 Subject: [PATCH] added validation for openapi_v3 --- pkg/openapi/crdSync.go | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/pkg/openapi/crdSync.go b/pkg/openapi/crdSync.go index 22bbb361b9..b6e0182467 100644 --- a/pkg/openapi/crdSync.go +++ b/pkg/openapi/crdSync.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "fmt" + "strings" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -13,11 +14,11 @@ import ( "gopkg.in/yaml.v2" + "sigs.k8s.io/controller-runtime/pkg/log" + "github.com/googleapis/gnostic/compiler" openapi_v2 "github.com/googleapis/gnostic/OpenAPIv2" - "sigs.k8s.io/controller-runtime/pkg/log" - "github.com/nirmata/kyverno/pkg/constant" client "github.com/nirmata/kyverno/pkg/dclient" "k8s.io/apimachinery/pkg/util/wait" @@ -157,8 +158,7 @@ func (o *Controller) ParseCRD(crd unstructured.Unstructured) { parsedSchema, err := openapi_v2.NewSchema(schema, compiler.NewContext("schema", nil)) if err != nil { - log.Log.Error(err, "could not parse crd schema", "name", crdName) - return + isOpenV3Error(err, crdName) } o.crdList = append(o.crdList, crdName) @@ -166,6 +166,21 @@ func (o *Controller) ParseCRD(crd unstructured.Unstructured) { o.definitions[crdName] = parsedSchema } +func isOpenV3Error(err error, crdName string) { + unsupportedValues := []string{"anyOf", "allOf", "not"} + v3valueFound := false + for _, value := range unsupportedValues { + if !strings.Contains(err.Error(), fmt.Sprintf("has invalid property: %s", value)) { + v3valueFound = true + break + } + } + + if v3valueFound == false { + log.Log.Error(err, "could not parse crd schema", "name", crdName) + } +} + // addingDefaultFieldsToSchema will add any default missing fields like apiVersion, metadata func addingDefaultFieldsToSchema(schemaRaw []byte) ([]byte, error) { var schema struct {