diff --git a/mockkubeapiserver/postresource.go b/mockkubeapiserver/postresource.go index 9e16d162..ba37fa57 100644 --- a/mockkubeapiserver/postresource.go +++ b/mockkubeapiserver/postresource.go @@ -18,6 +18,7 @@ package mockkubeapiserver import ( "context" + "encoding/base64" "fmt" "io" "net/http" @@ -69,8 +70,44 @@ func (req *postResource) Run(ctx context.Context, s *MockKubeAPIServer) error { return fmt.Errorf("name must be provided in payload") } + if err := preCreateHook(ctx, obj); err != nil { + return err + } + + obj.SetGeneration(1) + if err := resource.CreateObject(ctx, id, obj); err != nil { return err } return req.writeResponse(obj) } + +func preCreateHook(ctx context.Context, obj *unstructured.Unstructured) error { + gvk := obj.GroupVersionKind() + if gvk.Group == "" && gvk.Version == "v1" && gvk.Kind == "Secret" { + stringDataAny, found := obj.Object["stringData"] + if found { + stringDataMap, ok := stringDataAny.(map[string]any) + if !ok { + return fmt.Errorf("unexpected type for v1.Secret stringData, got %T", stringDataAny) + } + dataAny, dataFound := obj.Object["data"] + if !dataFound { + dataAny = make(map[string]any) + obj.Object["data"] = dataAny + } + dataMap, ok := dataAny.(map[string]any) + if !ok { + return fmt.Errorf("unexpected type for v1.Secret data, got %T", dataAny) + } + for k, vAny := range stringDataMap { + v, ok := vAny.(string) + if !ok { + return fmt.Errorf("unexpected type for v1.Secret stringData entry, got %T", vAny) + } + dataMap[k] = base64.StdEncoding.EncodeToString([]byte(v)) + } + } + } + return nil +}