mirror of https://github.com/k3s-io/k3s
apiextensions: add structural x-kubernetes-* fields to validation schemas
parent
e9af72c6e9
commit
d8a9dfacbf
|
@ -30,6 +30,9 @@ API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiexten
|
||||||
API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSON,Raw
|
API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSON,Raw
|
||||||
API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaProps,Ref
|
API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaProps,Ref
|
||||||
API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaProps,Schema
|
API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaProps,Schema
|
||||||
|
API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaProps,XEmbeddedResource
|
||||||
|
API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaProps,XIntOrString
|
||||||
|
API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaProps,XPreserveUnknownFields
|
||||||
API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaPropsOrArray,JSONSchemas
|
API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaPropsOrArray,JSONSchemas
|
||||||
API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaPropsOrArray,Schema
|
API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaPropsOrArray,Schema
|
||||||
API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaPropsOrBool,Allows
|
API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaPropsOrBool,Allows
|
||||||
|
|
|
@ -55,6 +55,36 @@ type JSONSchemaProps struct {
|
||||||
Definitions JSONSchemaDefinitions
|
Definitions JSONSchemaDefinitions
|
||||||
ExternalDocs *ExternalDocumentation
|
ExternalDocs *ExternalDocumentation
|
||||||
Example *JSON
|
Example *JSON
|
||||||
|
|
||||||
|
// x-kubernetes-preserve-unknown-fields stops the API server
|
||||||
|
// decoding step from pruning fields which are not specified
|
||||||
|
// in the validation schema. This affects fields recursively,
|
||||||
|
// but switches back to normal pruning behaviour if nested
|
||||||
|
// properties or additionalProperties are specified in the schema.
|
||||||
|
XPreserveUnknownFields bool
|
||||||
|
|
||||||
|
// x-kubernetes-embedded-resource defines that the value is an
|
||||||
|
// embedded Kubernetes runtime.Object, with TypeMeta and
|
||||||
|
// ObjectMeta. The type must be object. It is allowed to further
|
||||||
|
// restrict the embedded object. Both ObjectMeta and TypeMeta
|
||||||
|
// are validated automatically. x-kubernetes-preserve-unknown-fields
|
||||||
|
// must be true.
|
||||||
|
XEmbeddedResource bool
|
||||||
|
|
||||||
|
// x-kubernetes-int-or-string specifies that this value is
|
||||||
|
// either an integer or a string. If this is true, an empty
|
||||||
|
// type is allowed and type as child of anyOf is permitted
|
||||||
|
// if following one of the following patterns:
|
||||||
|
//
|
||||||
|
// 1) anyOf:
|
||||||
|
// - type: integer
|
||||||
|
// - type: string
|
||||||
|
// 2) allOf:
|
||||||
|
// - anyOf:
|
||||||
|
// - type: integer
|
||||||
|
// - type: string
|
||||||
|
// - ... zero or more
|
||||||
|
XIntOrString bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// JSON represents any valid JSON value.
|
// JSON represents any valid JSON value.
|
||||||
|
|
|
@ -55,6 +55,37 @@ type JSONSchemaProps struct {
|
||||||
ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty" protobuf:"bytes,35,opt,name=externalDocs"`
|
ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty" protobuf:"bytes,35,opt,name=externalDocs"`
|
||||||
Example *JSON `json:"example,omitempty" protobuf:"bytes,36,opt,name=example"`
|
Example *JSON `json:"example,omitempty" protobuf:"bytes,36,opt,name=example"`
|
||||||
Nullable bool `json:"nullable,omitempty" protobuf:"bytes,37,opt,name=nullable"`
|
Nullable bool `json:"nullable,omitempty" protobuf:"bytes,37,opt,name=nullable"`
|
||||||
|
|
||||||
|
// x-kubernetes-preserve-unknown-fields stops the API server
|
||||||
|
// decoding step from pruning fields which are not specified
|
||||||
|
// in the validation schema. This affects fields recursively,
|
||||||
|
// but switches back to normal pruning behaviour if nested
|
||||||
|
// properties or additionalProperties are specified in the schema.
|
||||||
|
XPreserveUnknownFields bool `json:"x-kubernetes-preserve-unknown-fields,omitempty" protobuf:"bytes,38,opt,name=xKubernetesPreserveUnknownFields"`
|
||||||
|
|
||||||
|
// x-kubernetes-embedded-resource defines that the value is an
|
||||||
|
// embedded Kubernetes runtime.Object, with TypeMeta and
|
||||||
|
// ObjectMeta. The type must be object. It is allowed to further
|
||||||
|
// restrict the embedded object. kind, apiVersion and metadata
|
||||||
|
// are validated automatically. x-kubernetes-preserve-unknown-fields
|
||||||
|
// is allowed to be true, but does not have to be if the object
|
||||||
|
// is fully specified (up to kind, apiVersion, metadata).
|
||||||
|
XEmbeddedResource bool `json:"x-kubernetes-embedded-resource,omitempty" protobuf:"bytes,39,opt,name=xKubernetesEmbeddedResource"`
|
||||||
|
|
||||||
|
// x-kubernetes-int-or-string specifies that this value is
|
||||||
|
// either an integer or a string. If this is true, an empty
|
||||||
|
// type is allowed and type as child of anyOf is permitted
|
||||||
|
// if following one of the following patterns:
|
||||||
|
//
|
||||||
|
// 1) anyOf:
|
||||||
|
// - type: integer
|
||||||
|
// - type: string
|
||||||
|
// 2) allOf:
|
||||||
|
// - anyOf:
|
||||||
|
// - type: integer
|
||||||
|
// - type: string
|
||||||
|
// - ... zero or more
|
||||||
|
XIntOrString bool `json:"x-kubernetes-int-or-string,omitempty" protobuf:"bytes,40,opt,name=xKubernetesIntOrString"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// JSON represents any valid JSON value.
|
// JSON represents any valid JSON value.
|
||||||
|
|
|
@ -786,7 +786,7 @@ func validateSimpleJSONPath(s string, fldPath *field.Path) field.ErrorList {
|
||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
|
||||||
var allowedFieldsAtRootSchema = []string{"Description", "Type", "Format", "Title", "Maximum", "ExclusiveMaximum", "Minimum", "ExclusiveMinimum", "MaxLength", "MinLength", "Pattern", "MaxItems", "MinItems", "UniqueItems", "MultipleOf", "Required", "Items", "Properties", "ExternalDocs", "Example"}
|
var allowedFieldsAtRootSchema = []string{"Description", "Type", "Format", "Title", "Maximum", "ExclusiveMaximum", "Minimum", "ExclusiveMinimum", "MaxLength", "MinLength", "Pattern", "MaxItems", "MinItems", "UniqueItems", "MultipleOf", "Required", "Items", "Properties", "ExternalDocs", "Example", "XPreserveUnknownFields"}
|
||||||
|
|
||||||
func allowedAtRootSchema(field string) bool {
|
func allowedAtRootSchema(field string) bool {
|
||||||
for _, v := range allowedFieldsAtRootSchema {
|
for _, v := range allowedFieldsAtRootSchema {
|
||||||
|
|
|
@ -194,6 +194,16 @@ func ConvertJSONSchemaPropsWithPostProcess(in *apiextensions.JSONSchemaProps, ou
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if in.XPreserveUnknownFields {
|
||||||
|
out.VendorExtensible.AddExtension("x-kubernetes-preserve-unknown-fields", true)
|
||||||
|
}
|
||||||
|
if in.XEmbeddedResource {
|
||||||
|
out.VendorExtensible.AddExtension("x-kubernetes-embedded-resource", true)
|
||||||
|
}
|
||||||
|
if in.XIntOrString {
|
||||||
|
out.VendorExtensible.AddExtension("x-kubernetes-int-or-string", true)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue