From 38f50aabfea4545ab01c948dba6c2446894597a4 Mon Sep 17 00:00:00 2001 From: Armando Ruocco Date: Tue, 5 Nov 2024 16:38:39 +0100 Subject: [PATCH] chore: remove secret Signed-off-by: Armando Ruocco --- internal/client/client.go | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/internal/client/client.go b/internal/client/client.go index 56cb469..56053aa 100644 --- a/internal/client/client.go +++ b/internal/client/client.go @@ -14,7 +14,8 @@ type cachedSecret struct { fetchUnixTime int64 } -type extendedClient struct { +// ExtendedClient is an extended client that is capable of caching multiple secrets without relying on 'list and watch' +type ExtendedClient struct { client.Client cachedSecrets []*cachedSecret // add a mux to lock the operations on the cache @@ -23,12 +24,12 @@ type extendedClient struct { // NewExtendedClient returns an extended client capable of caching secrets on the 'Get' operation func NewExtendedClient(baseClient client.Client) client.Client { - return &extendedClient{ + return &ExtendedClient{ Client: baseClient, } } -func (e *extendedClient) Get(ctx context.Context, key client.ObjectKey, obj client.Object, opts ...client.GetOption) error { +func (e *ExtendedClient) Get(ctx context.Context, key client.ObjectKey, obj client.Object, opts ...client.GetOption) error { if _, ok := obj.(*corev1.Secret); !ok { return e.Client.Get(ctx, key, obj, opts...) } @@ -69,3 +70,16 @@ func (e *extendedClient) Get(ctx context.Context, key client.ObjectKey, obj clie return nil } + +// RemoveSecret ensures that a secret is not present in the cache +func (e *ExtendedClient) RemoveSecret(key client.ObjectKey) { + e.mux.Lock() + defer e.mux.Unlock() + + for i, cache := range e.cachedSecrets { + if cache.secret.Namespace == key.Namespace && cache.secret.Name == key.Name { + e.cachedSecrets = append(e.cachedSecrets[:i], e.cachedSecrets[i+1:]...) + return + } + } +}