@@ -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"
@@ -1013,7 +1014,9 @@ var anyGroupAnyResource = schema.GroupResource{
1013
1014
Resource : "*" ,
1014
1015
}
1015
1016
1016
- func transformerFromOverrides (transformerOverrides map [schema.GroupResource ]storagevalue.Transformer , resource schema.GroupResource ) storagevalue.Transformer {
1017
+ func transformerFromOverrides (transformerOverrides map [schema.GroupResource ]storagevalue.Transformer , resource schema.GroupResource ) (out storagevalue.Transformer ) {
1018
+ defer func () { out = newRequestInfoTransformer (resource , out ) }()
1019
+
1017
1020
if transformer := transformerOverrides [resource ]; transformer != nil {
1018
1021
return transformer
1019
1022
}
@@ -1039,3 +1042,41 @@ func grYAMLString(gr schema.GroupResource) string {
1039
1042
1040
1043
return gr .String ()
1041
1044
}
1045
+
1046
+ var _ storagevalue.Transformer = & requestInfoTransformer {}
1047
+
1048
+ type requestInfoTransformer struct {
1049
+ baseValueCtx context.Context
1050
+ delegate storagevalue.Transformer
1051
+ }
1052
+
1053
+ func newRequestInfoTransformer (resource schema.GroupResource , delegate storagevalue.Transformer ) * requestInfoTransformer {
1054
+ return & requestInfoTransformer {
1055
+ baseValueCtx : request .WithRequestInfo (context .Background (), & request.RequestInfo {IsResourceRequest : true , APIGroup : resource .Group , Resource : resource .Resource }),
1056
+ delegate : delegate ,
1057
+ }
1058
+ }
1059
+
1060
+ func (l * requestInfoTransformer ) TransformFromStorage (ctx context.Context , data []byte , dataCtx storagevalue.Context ) ([]byte , bool , error ) {
1061
+ return l .delegate .TransformFromStorage (l .withBaseValueCtx (ctx ), data , dataCtx )
1062
+ }
1063
+
1064
+ func (l * requestInfoTransformer ) TransformToStorage (ctx context.Context , data []byte , dataCtx storagevalue.Context ) ([]byte , error ) {
1065
+ return l .delegate .TransformToStorage (l .withBaseValueCtx (ctx ), data , dataCtx )
1066
+ }
1067
+
1068
+ func (l * requestInfoTransformer ) withBaseValueCtx (ctx context.Context ) context.Context {
1069
+ return & joinValueContext {Context : ctx , baseValueCtx : l .baseValueCtx }
1070
+ }
1071
+
1072
+ type joinValueContext struct {
1073
+ context.Context
1074
+ baseValueCtx context.Context
1075
+ }
1076
+
1077
+ func (j * joinValueContext ) Value (key any ) any {
1078
+ if val := j .Context .Value (key ); val != nil {
1079
+ return val
1080
+ }
1081
+ return j .baseValueCtx .Value (key )
1082
+ }
0 commit comments