@@ -13,16 +13,30 @@ type SecretResource struct {
1313 once sync.Once
1414}
1515
16+ type WaitableSecretResource struct {
17+ * SecretResource
18+ wg sync.WaitGroup
19+ }
20+
1621// Creates a Secret that clears it's data when recCtx is canceled
1722func NewSecret (recCtx context.Context , name , namespace string ) * corev1.Secret {
1823 secretResource := NewSecretResource (name , namespace )
1924 go func () {
2025 <- recCtx .Done ()
21- secretResource .Clear ()
26+ secretResource .Clear (nil )
2227 }()
2328 return secretResource .GetSecret ()
2429}
2530
31+ func NewWaitableSecret (recCtx context.Context , name , namespace string ) (* corev1.Secret , * sync.WaitGroup ) {
32+ waitableSecretResource := NewWaitableSecretResource (name , namespace )
33+ go func () {
34+ <- recCtx .Done ()
35+ waitableSecretResource .Clear (waitableSecretResource .GetWaitGroup ())
36+ }()
37+ return waitableSecretResource .GetSecret (), waitableSecretResource .GetWaitGroup ()
38+ }
39+
2640func NewSecretResource (name , namespace string ) * SecretResource {
2741 resource := & SecretResource {
2842 secret : & corev1.Secret {
@@ -35,16 +49,31 @@ func NewSecretResource(name, namespace string) *SecretResource {
3549 return resource
3650}
3751
52+ func NewWaitableSecretResource (name , namespace string ) * WaitableSecretResource {
53+ resource := & WaitableSecretResource {
54+ SecretResource : NewSecretResource (name , namespace ),
55+ wg : sync.WaitGroup {},
56+ }
57+ return resource
58+ }
59+
60+ func (wsr * WaitableSecretResource ) GetWaitGroup () * sync.WaitGroup {
61+ return & wsr .wg
62+ }
63+
3864func (r * SecretResource ) GetSecret () * corev1.Secret {
3965 return r .secret
4066}
4167
42- func (r * SecretResource ) Clear () {
68+ func (r * SecretResource ) Clear (wg * sync. WaitGroup ) {
4369 if r .secret == nil {
4470 return
4571 }
4672
4773 r .once .Do (func () {
74+ if wg != nil {
75+ wg .Wait ()
76+ }
4877 for secretKey , secretValue := range r .secret .Data {
4978 clear (secretValue )
5079 delete (r .secret .Data , secretKey )
0 commit comments