mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-30 03:15:05 +00:00
754 fixed apiVersion and metadata issue
This commit is contained in:
parent
7c5a2aa438
commit
2273033c6c
2 changed files with 34 additions and 1 deletions
|
@ -97,6 +97,7 @@ func parseCRD(crd unstructured.Unstructured) {
|
|||
|
||||
var schema yaml.MapSlice
|
||||
schemaRaw, _ := json.Marshal(crdDefinition.Spec.Versions[0].Schema.OpenAPIV3Schema)
|
||||
schemaRaw = addingDefaultFieldsToSchema(schemaRaw)
|
||||
_ = yaml.Unmarshal(schemaRaw, &schema)
|
||||
|
||||
parsedSchema, err := openapi_v2.NewSchema(schema, compiler.NewContext("schema", nil))
|
||||
|
@ -110,3 +111,29 @@ func parseCRD(crd unstructured.Unstructured) {
|
|||
openApiGlobalState.kindToDefinitionName[crdName] = crdName
|
||||
openApiGlobalState.definitions[crdName] = parsedSchema
|
||||
}
|
||||
|
||||
// addingDefaultFieldsToSchema will add any default missing fields like apiVersion, metadata
|
||||
func addingDefaultFieldsToSchema(schemaRaw []byte) []byte {
|
||||
var schema struct {
|
||||
Properties map[string]interface{} `json:"properties"`
|
||||
}
|
||||
_ = json.Unmarshal(schemaRaw, &schema)
|
||||
|
||||
if schema.Properties["apiVersion"] == nil {
|
||||
apiVersionDefRaw := `{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"}`
|
||||
apiVersionDef := make(map[string]interface{})
|
||||
_ = json.Unmarshal([]byte(apiVersionDefRaw), &apiVersionDef)
|
||||
schema.Properties["apiVersion"] = apiVersionDef
|
||||
}
|
||||
|
||||
if schema.Properties["metadata"] == nil {
|
||||
metadataDefRaw := `{"$ref":"#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta","description":"Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata"}`
|
||||
metadataDef := make(map[string]interface{})
|
||||
_ = json.Unmarshal([]byte(metadataDefRaw), &metadataDef)
|
||||
schema.Properties["metadata"] = metadataDef
|
||||
}
|
||||
|
||||
schemaWithDefaultFields, _ := json.Marshal(schema)
|
||||
|
||||
return schemaWithDefaultFields
|
||||
}
|
||||
|
|
|
@ -189,7 +189,13 @@ func getSchemaFromDefinitions(kind string) (proto.Schema, error) {
|
|||
return nil, errors.New("could not find definition")
|
||||
}
|
||||
|
||||
return (&proto.Definitions{}).ParseSchema(definition, &path)
|
||||
// This was added so crd's can access
|
||||
// normal definitions from existing schema such as
|
||||
// `metadata` - this maybe a breaking change.
|
||||
// Removing this may cause policy validate to stop working
|
||||
existingDefinitions, _ := openApiGlobalState.models.(*proto.Definitions)
|
||||
|
||||
return (existingDefinitions).ParseSchema(definition, &path)
|
||||
}
|
||||
|
||||
func generateEmptyResource(kindSchema *openapi_v2.Schema) interface{} {
|
||||
|
|
Loading…
Add table
Reference in a new issue