Skip to content

Commit 026c55e

Browse files
authored
Merge pull request kubernetes#126685 from enj/enj/i/kms_resouce_logs
Ensure transformers have access to the resource via request info
2 parents 7df2b05 + 49d7b4c commit 026c55e

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

staging/src/k8s.io/apiserver/pkg/server/options/encryptionconfig/config.go

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import (
4040
"k8s.io/apiserver/pkg/apis/apiserver"
4141
apiserverv1 "k8s.io/apiserver/pkg/apis/apiserver/v1"
4242
"k8s.io/apiserver/pkg/apis/apiserver/validation"
43+
"k8s.io/apiserver/pkg/endpoints/request"
4344
"k8s.io/apiserver/pkg/features"
4445
"k8s.io/apiserver/pkg/server/healthz"
4546
"k8s.io/apiserver/pkg/server/options/encryptionconfig/metrics"
@@ -1009,7 +1010,9 @@ var anyGroupAnyResource = schema.GroupResource{
10091010
Resource: "*",
10101011
}
10111012

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+
10131016
if transformer := transformerOverrides[resource]; transformer != nil {
10141017
return transformer
10151018
}
@@ -1035,3 +1038,41 @@ func grYAMLString(gr schema.GroupResource) string {
10351038

10361039
return gr.String()
10371040
}
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+
}

staging/src/k8s.io/apiserver/pkg/server/options/encryptionconfig/config_test.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1424,7 +1424,15 @@ func TestWildcardStructure(t *testing.T) {
14241424
for resource, expectedTransformerName := range tc.expectedResourceTransformers {
14251425
transformer := transformerFromOverrides(transformers, schema.ParseGroupResource(resource))
14261426
transformerName := string(
1427-
reflect.ValueOf(transformer).Elem().FieldByName("transformers").Index(0).FieldByName("Prefix").Bytes(),
1427+
reflect.ValueOf(transformer).
1428+
Elem().
1429+
FieldByName("delegate").
1430+
Elem().
1431+
Elem().
1432+
FieldByName("transformers").
1433+
Index(0).
1434+
FieldByName("Prefix").
1435+
Bytes(),
14281436
)
14291437

14301438
if transformerName != expectedTransformerName {

0 commit comments

Comments
 (0)