mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 06:27:05 +00:00
apiextensions: wire defaulter
This commit is contained in:
parent
e41e7249a4
commit
e54dea7a9c
@ -31,6 +31,7 @@ import (
|
|||||||
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
|
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
|
||||||
"k8s.io/apiextensions-apiserver/pkg/apiserver/conversion"
|
"k8s.io/apiextensions-apiserver/pkg/apiserver/conversion"
|
||||||
structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema"
|
structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema"
|
||||||
|
structuraldefaulting "k8s.io/apiextensions-apiserver/pkg/apiserver/schema/defaulting"
|
||||||
structuralpruning "k8s.io/apiextensions-apiserver/pkg/apiserver/schema/pruning"
|
structuralpruning "k8s.io/apiextensions-apiserver/pkg/apiserver/schema/pruning"
|
||||||
apiservervalidation "k8s.io/apiextensions-apiserver/pkg/apiserver/validation"
|
apiservervalidation "k8s.io/apiextensions-apiserver/pkg/apiserver/validation"
|
||||||
informers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion"
|
informers "k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion/apiextensions/internalversion"
|
||||||
@ -645,7 +646,7 @@ func (r *crdHandler) getOrCreateServingInfoFor(crd *apiextensions.CustomResource
|
|||||||
|
|
||||||
Creater: creator,
|
Creater: creator,
|
||||||
Convertor: safeConverter,
|
Convertor: safeConverter,
|
||||||
Defaulter: unstructuredDefaulter{parameterScheme},
|
Defaulter: unstructuredDefaulter{parameterScheme, structuralSchemas, kind.GroupKind()},
|
||||||
Typer: typer,
|
Typer: typer,
|
||||||
UnsafeConvertor: unsafeConverter,
|
UnsafeConvertor: unsafeConverter,
|
||||||
|
|
||||||
@ -771,7 +772,11 @@ func (s unstructuredNegotiatedSerializer) EncoderForVersion(encoder runtime.Enco
|
|||||||
|
|
||||||
func (s unstructuredNegotiatedSerializer) DecoderToVersion(decoder runtime.Decoder, gv runtime.GroupVersioner) runtime.Decoder {
|
func (s unstructuredNegotiatedSerializer) DecoderToVersion(decoder runtime.Decoder, gv runtime.GroupVersioner) runtime.Decoder {
|
||||||
d := schemaCoercingDecoder{delegate: decoder, validator: unstructuredSchemaCoercer{structuralSchemas: s.structuralSchemas, structuralSchemaGK: s.structuralSchemaGK, preserveUnknownFields: s.preserveUnknownFields}}
|
d := schemaCoercingDecoder{delegate: decoder, validator: unstructuredSchemaCoercer{structuralSchemas: s.structuralSchemas, structuralSchemaGK: s.structuralSchemaGK, preserveUnknownFields: s.preserveUnknownFields}}
|
||||||
return versioning.NewDefaultingCodecForScheme(Scheme, nil, d, nil, gv)
|
return versioning.NewCodec(nil, d, runtime.UnsafeObjectConvertor(Scheme), Scheme, Scheme, unstructuredDefaulter{
|
||||||
|
delegate: Scheme,
|
||||||
|
structuralSchemas: s.structuralSchemas,
|
||||||
|
structuralSchemaGK: s.structuralSchemaGK,
|
||||||
|
}, nil, gv, "unstructuredNegotiatedSerializer")
|
||||||
}
|
}
|
||||||
|
|
||||||
type UnstructuredObjectTyper struct {
|
type UnstructuredObjectTyper struct {
|
||||||
@ -807,14 +812,20 @@ func (c unstructuredCreator) New(kind schema.GroupVersionKind) (runtime.Object,
|
|||||||
}
|
}
|
||||||
|
|
||||||
type unstructuredDefaulter struct {
|
type unstructuredDefaulter struct {
|
||||||
delegate runtime.ObjectDefaulter
|
delegate runtime.ObjectDefaulter
|
||||||
|
structuralSchemas map[string]*structuralschema.Structural // by version
|
||||||
|
structuralSchemaGK schema.GroupKind
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d unstructuredDefaulter) Default(in runtime.Object) {
|
func (d unstructuredDefaulter) Default(in runtime.Object) {
|
||||||
// Delegate for things other than Unstructured.
|
// Delegate for things other than Unstructured, and other GKs
|
||||||
if _, ok := in.(runtime.Unstructured); !ok {
|
u, ok := in.(runtime.Unstructured)
|
||||||
|
if !ok || u.GetObjectKind().GroupVersionKind().GroupKind() != d.structuralSchemaGK {
|
||||||
d.delegate.Default(in)
|
d.delegate.Default(in)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
structuraldefaulting.Default(u.UnstructuredContent(), d.structuralSchemas[u.GetObjectKind().GroupVersionKind().Version])
|
||||||
}
|
}
|
||||||
|
|
||||||
type CRDRESTOptionsGetter struct {
|
type CRDRESTOptionsGetter struct {
|
||||||
@ -888,7 +899,11 @@ func (t crdConversionRESTOptionsGetter) GetRESTOptions(resource schema.GroupReso
|
|||||||
c,
|
c,
|
||||||
&unstructuredCreator{},
|
&unstructuredCreator{},
|
||||||
crdserverscheme.NewUnstructuredObjectTyper(),
|
crdserverscheme.NewUnstructuredObjectTyper(),
|
||||||
&unstructuredDefaulter{delegate: Scheme},
|
&unstructuredDefaulter{
|
||||||
|
delegate: Scheme,
|
||||||
|
structuralSchemaGK: t.structuralSchemaGK,
|
||||||
|
structuralSchemas: t.structuralSchemas,
|
||||||
|
},
|
||||||
t.encoderVersion,
|
t.encoderVersion,
|
||||||
t.decoderVersion,
|
t.decoderVersion,
|
||||||
"crdRESTOptions",
|
"crdRESTOptions",
|
||||||
|
Loading…
Reference in New Issue
Block a user