@@ -40,6 +40,7 @@ import (
40
40
"k8s.io/apiserver/pkg/apis/apiserver"
41
41
apiserverv1 "k8s.io/apiserver/pkg/apis/apiserver/v1"
42
42
"k8s.io/apiserver/pkg/apis/apiserver/validation"
43
+ "k8s.io/apiserver/pkg/endpoints/request"
43
44
"k8s.io/apiserver/pkg/features"
44
45
"k8s.io/apiserver/pkg/server/healthz"
45
46
"k8s.io/apiserver/pkg/server/options/encryptionconfig/metrics"
@@ -1009,7 +1010,9 @@ var anyGroupAnyResource = schema.GroupResource{
1009
1010
Resource : "*" ,
1010
1011
}
1011
1012
1012
- func transformerFromOverrides (transformerOverrides map [schema.GroupResource ]storagevalue.Transformer , resource schema.GroupResource ) storagevalue.Transformer {
1013
+ func transformerFromOverrides (transformerOverrides map [schema.GroupResource ]storagevalue.Transformer , resource schema.GroupResource ) (out storagevalue.Transformer ) {
1014
+ defer func () { out = newRequestInfoTransformer (resource , out ) }()
1015
+
1013
1016
if transformer := transformerOverrides [resource ]; transformer != nil {
1014
1017
return transformer
1015
1018
}
@@ -1035,3 +1038,41 @@ func grYAMLString(gr schema.GroupResource) string {
1035
1038
1036
1039
return gr .String ()
1037
1040
}
1041
+
1042
+ var _ storagevalue.Transformer = & requestInfoTransformer {}
1043
+
1044
+ type requestInfoTransformer struct {
1045
+ baseValueCtx context.Context
1046
+ delegate storagevalue.Transformer
1047
+ }
1048
+
1049
+ func newRequestInfoTransformer (resource schema.GroupResource , delegate storagevalue.Transformer ) * requestInfoTransformer {
1050
+ return & requestInfoTransformer {
1051
+ baseValueCtx : request .WithRequestInfo (context .Background (), & request.RequestInfo {IsResourceRequest : true , APIGroup : resource .Group , Resource : resource .Resource }),
1052
+ delegate : delegate ,
1053
+ }
1054
+ }
1055
+
1056
+ func (l * requestInfoTransformer ) TransformFromStorage (ctx context.Context , data []byte , dataCtx storagevalue.Context ) ([]byte , bool , error ) {
1057
+ return l .delegate .TransformFromStorage (l .withBaseValueCtx (ctx ), data , dataCtx )
1058
+ }
1059
+
1060
+ func (l * requestInfoTransformer ) TransformToStorage (ctx context.Context , data []byte , dataCtx storagevalue.Context ) ([]byte , error ) {
1061
+ return l .delegate .TransformToStorage (l .withBaseValueCtx (ctx ), data , dataCtx )
1062
+ }
1063
+
1064
+ func (l * requestInfoTransformer ) withBaseValueCtx (ctx context.Context ) context.Context {
1065
+ return & joinValueContext {Context : ctx , baseValueCtx : l .baseValueCtx }
1066
+ }
1067
+
1068
+ type joinValueContext struct {
1069
+ context.Context
1070
+ baseValueCtx context.Context
1071
+ }
1072
+
1073
+ func (j * joinValueContext ) Value (key any ) any {
1074
+ if val := j .Context .Value (key ); val != nil {
1075
+ return val
1076
+ }
1077
+ return j .baseValueCtx .Value (key )
1078
+ }
0 commit comments