99 "sigs.k8s.io/controller-runtime/pkg/client"
1010)
1111
12+ const noCache = 0
13+
1214type cachedSecret struct {
1315 secret * corev1.Secret
1416 fetchUnixTime int64
@@ -18,18 +20,28 @@ type cachedSecret struct {
1820type ExtendedClient struct {
1921 client.Client
2022 cachedSecrets []* cachedSecret
21- // add a mux to lock the operations on the cache
22- mux * sync. Mutex
23+ mux * sync. Mutex
24+ ttl int64
2325}
2426
2527// NewExtendedClient returns an extended client capable of caching secrets on the 'Get' operation
26- func NewExtendedClient (baseClient client.Client ) client.Client {
28+ func NewExtendedClient (baseClient client.Client , ttl int64 ) client.Client {
2729 return & ExtendedClient {
2830 Client : baseClient ,
31+ ttl : ttl ,
2932 }
3033}
3134
32- func (e * ExtendedClient ) Get (ctx context.Context , key client.ObjectKey , obj client.Object , opts ... client.GetOption ) error {
35+ func (e * ExtendedClient ) Get (
36+ ctx context.Context ,
37+ key client.ObjectKey ,
38+ obj client.Object ,
39+ opts ... client.GetOption ,
40+ ) error {
41+ if e .isCacheDisabled () {
42+ return e .Client .Get (ctx , key , obj , opts ... )
43+ }
44+
3345 if _ , ok := obj .(* corev1.Secret ); ! ok {
3446 return e .Client .Get (ctx , key , obj , opts ... )
3547 }
@@ -40,7 +52,7 @@ func (e *ExtendedClient) Get(ctx context.Context, key client.ObjectKey, obj clie
4052 // check if in cache
4153 for _ , cache := range e .cachedSecrets {
4254 if cache .secret .Namespace == key .Namespace && cache .secret .Name == key .Name {
43- if time . Now (). Unix () - cache .fetchUnixTime < 180 {
55+ if ! e . isExpired ( cache .fetchUnixTime ) {
4456 cache .secret .DeepCopyInto (obj .(* corev1.Secret ))
4557 return nil
4658 }
@@ -71,8 +83,20 @@ func (e *ExtendedClient) Get(ctx context.Context, key client.ObjectKey, obj clie
7183 return nil
7284}
7385
86+ func (e * ExtendedClient ) isExpired (unixTime int64 ) bool {
87+ return time .Now ().Unix ()- unixTime > e .ttl
88+ }
89+
90+ func (e * ExtendedClient ) isCacheDisabled () bool {
91+ return e .ttl == noCache
92+ }
93+
7494// RemoveSecret ensures that a secret is not present in the cache
7595func (e * ExtendedClient ) RemoveSecret (key client.ObjectKey ) {
96+ if e .isCacheDisabled () {
97+ return
98+ }
99+
76100 e .mux .Lock ()
77101 defer e .mux .Unlock ()
78102
0 commit comments