1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-15 12:17:56 +00:00

fix resource schema not found error

This commit is contained in:
Shuting Zhao 2020-06-01 19:36:01 -07:00
parent 07e93e0638
commit 52d45ec3c5
4 changed files with 17 additions and 17 deletions

View file

@ -110,7 +110,7 @@ func (vc StatusControl) IncrementAnnotation() error {
var err error var err error
deploy, err := vc.client.GetResource("Deployment", deployNamespace, deployName) deploy, err := vc.client.GetResource("Deployment", deployNamespace, deployName)
if err != nil { if err != nil {
logger.Error(err, "failed to find deployment %s in namespace %s", deployName, deployNamespace) logger.Error(err, "failed to find Kyverno", "deploymeny", deployName, "namespace", deployNamespace)
return err return err
} }

View file

@ -141,7 +141,7 @@ func patchedResourceHasPodControllerAnnotation(resource unstructured.Unstructure
val, ok := podController.Spec.Template.Metadata.Annotations[PodTemplateAnnotation] val, ok := podController.Spec.Template.Metadata.Annotations[PodTemplateAnnotation]
log.Log.Info("patchedResourceHasPodControllerAnnotation", "resourceRaw", string(resourceRaw), "val", val, "ok", ok) log.Log.V(4).Info("patchedResourceHasPodControllerAnnotation", "resourceRaw", string(resourceRaw), "val", val, "ok", ok)
return ok return ok
} }

View file

@ -107,17 +107,12 @@ func (c *crdSync) sync() {
} }
func (o *Controller) deleteCRDFromPreviousSync() { func (o *Controller) deleteCRDFromPreviousSync() {
for k := range o.kindToDefinitionName { for _, crd := range o.crdList {
delete(o.kindToDefinitionName, k) delete(o.kindToDefinitionName, crd)
delete(o.definitions, crd)
} }
o.kindToDefinitionName = make(map[string]string, 0) o.crdList = make([]string, 0)
for k := range o.definitions {
delete(o.definitions, k)
}
o.definitions = make(map[string]*openapi_v2.Schema, 0)
} }
func (o *Controller) parseCRD(crd unstructured.Unstructured) { func (o *Controller) parseCRD(crd unstructured.Unstructured) {
@ -166,6 +161,7 @@ func (o *Controller) parseCRD(crd unstructured.Unstructured) {
return return
} }
o.crdList = append(o.crdList, crdName)
o.kindToDefinitionName[crdName] = crdName o.kindToDefinitionName[crdName] = crdName
o.definitions[crdName] = parsedSchema o.definitions[crdName] = parsedSchema
} }

View file

@ -28,12 +28,18 @@ import (
type Controller struct { type Controller struct {
mutex sync.RWMutex mutex sync.RWMutex
definitions map[string]*openapi_v2.Schema definitions map[string]*openapi_v2.Schema
// kindToDefinitionName holds the kind - definition map
// i.e. - Namespace: io.k8s.api.core.v1.Namespace
kindToDefinitionName map[string]string kindToDefinitionName map[string]string
crdList []string
models proto.Models models proto.Models
} }
func NewOpenAPIController() (*Controller, error) { func NewOpenAPIController() (*Controller, error) {
controller := &Controller{} controller := &Controller{
definitions: make(map[string]*openapi_v2.Schema),
kindToDefinitionName: make(map[string]string),
}
defaultDoc, err := getSchemaDocument() defaultDoc, err := getSchemaDocument()
if err != nil { if err != nil {
@ -82,7 +88,7 @@ func (o *Controller) ValidateResource(patchedResource unstructured.Unstructured,
// Check if kind is a CRD // Check if kind is a CRD
schema, err = o.getCRDSchema(kind) schema, err = o.getCRDSchema(kind)
if err != nil || schema == nil { if err != nil || schema == nil {
return fmt.Errorf("pre-validation: couldn't find model %s", kind) return fmt.Errorf("pre-validation: couldn't find model %s, err: %v", kind, err)
} }
delete(patchedResource.Object, "kind") delete(patchedResource.Object, "kind")
} }
@ -146,8 +152,6 @@ func (o *Controller) useOpenApiDocument(doc *openapi_v2.Document) error {
o.mutex.Lock() o.mutex.Lock()
defer o.mutex.Unlock() defer o.mutex.Unlock()
o.definitions = make(map[string]*openapi_v2.Schema)
o.kindToDefinitionName = make(map[string]string)
for _, definition := range doc.GetDefinitions().AdditionalProperties { for _, definition := range doc.GetDefinitions().AdditionalProperties {
o.definitions[definition.GetName()] = definition.GetValue() o.definitions[definition.GetName()] = definition.GetValue()
path := strings.Split(definition.GetName(), ".") path := strings.Split(definition.GetName(), ".")