@@ -32,27 +32,9 @@ func CreateSelfSignedCertificate(ctx context.Context, c client.Client, secretNam
32
32
if err := ApplyMetaOptions (certSecret , metaOptions ... ); err != nil {
33
33
return err
34
34
}
35
- existingSecret := & corev1.Secret {}
36
- err = c .Get (ctx , client.ObjectKey {Name : secretName , Namespace : namespace }, existingSecret )
37
- if err != nil {
38
- if k8serr .IsNotFound (err ) {
39
- // Secret does not exist, create it
40
- if createErr := c .Create (ctx , certSecret ); createErr != nil {
41
- return fmt .Errorf ("failed creating certificate secret: %w" , createErr )
42
- }
43
- } else {
44
- return fmt .Errorf ("failed getting certificate secret: %w" , err )
45
- }
46
- } else if existingSecret .Type != certSecret .Type {
47
- // Secret exists but with a different type, delete and recreate it
48
- if err := c .Delete (ctx , existingSecret ); err != nil {
49
- return fmt .Errorf ("failed deleting existing secret: %w" , err )
50
- }
51
- if createErr := c .Create (ctx , certSecret ); client .IgnoreAlreadyExists (createErr ) != nil {
52
- return fmt .Errorf ("failed creating certificate secret: %w" , createErr )
53
- }
35
+ if err = generateCertSecret (ctx , c , certSecret , secretName , namespace ); err != nil {
36
+ return fmt .Errorf ("failed update self-signed certificate secret: %w" , err )
54
37
}
55
-
56
38
return nil
57
39
}
58
40
@@ -194,43 +176,51 @@ func copySecretToNamespace(ctx context.Context, c client.Client, secret *corev1.
194
176
Data : secret .Data ,
195
177
Type : secret .Type ,
196
178
}
197
-
198
- existingSecret := & corev1.Secret {}
199
- err := c .Get (ctx , client.ObjectKey {Name : newSecretName , Namespace : namespace }, existingSecret )
200
- if k8serr .IsNotFound (err ) { // create if not found
201
- if err = c .Create (ctx , newSecret ); err != nil {
202
- return fmt .Errorf ("failed to create new secret: %w" , err )
203
- }
204
- } else if err != nil {
205
- return fmt .Errorf ("failed to get existing secret: %w" , err )
179
+ if err := generateCertSecret (ctx , c , newSecret , newSecretName , namespace ); err != nil {
180
+ return fmt .Errorf ("failed to deploy default cert secret to namespace %s: %w" , namespace , err )
206
181
}
207
-
208
- if existingSecret .Type != newSecret .Type { // recreate if found with mismatched type
209
- if recreateSecret (ctx , c , existingSecret , newSecret ) != nil {
210
- return errors .New ("failed to recreate secret with type corrected" )
211
- }
212
- }
213
-
214
- if isSecretOutdated (existingSecret .Data , newSecret .Data ) {
215
- if err = c .Update (ctx , newSecret ); err != nil { // update data if found with same type but outdated content
216
- return fmt .Errorf ("failed to update secret: %w" , err )
217
- }
218
- }
219
-
220
182
return nil
221
183
}
222
184
223
185
// recreateSecret deletes the existing secret and creates a new one.
224
186
func recreateSecret (ctx context.Context , c client.Client , existingSecret , newSecret * corev1.Secret ) error {
225
187
if err := c .Delete (ctx , existingSecret ); err != nil {
226
- return fmt .Errorf ("failed to delete existing secret: %w" , err )
188
+ return fmt .Errorf ("failed to delete existing secret before recreating new one : %w" , err )
227
189
}
228
190
if err := c .Create (ctx , newSecret ); err != nil {
229
- return fmt .Errorf ("failed to create new secret: %w" , err )
191
+ return fmt .Errorf ("failed to create new secret after existing one has been deleted : %w" , err )
230
192
}
231
193
return nil
232
194
}
233
195
196
+ // generateCertSecret creates a secret if it does not exist; recreate this secret if type not match; update data if outdated.
197
+ func generateCertSecret (ctx context.Context , c client.Client , certSecret * corev1.Secret , secretName , namespace string ) error {
198
+ existingSecret := & corev1.Secret {}
199
+ err := c .Get (ctx , client.ObjectKey {Name : secretName , Namespace : namespace }, existingSecret )
200
+ switch {
201
+ case err == nil :
202
+ // Secret exists but with a different type, delete and create it again
203
+ if existingSecret .Type != certSecret .Type {
204
+ return recreateSecret (ctx , c , existingSecret , certSecret )
205
+ }
206
+ // update data if found with same type but outdated content
207
+ if isSecretOutdated (existingSecret .Data , certSecret .Data ) {
208
+ if err = c .Update (ctx , certSecret ); err != nil {
209
+ return fmt .Errorf ("failed to update existing secret: %w" , err )
210
+ }
211
+ }
212
+ case k8serr .IsNotFound (err ):
213
+ // Secret does not exist, create it
214
+ if err := c .Create (ctx , certSecret ); err != nil {
215
+ return fmt .Errorf ("failed creating new certificate secret: %w" , err )
216
+ }
217
+ default :
218
+ return fmt .Errorf ("failed getting certificate secret: %w" , err )
219
+ }
220
+
221
+ return nil
222
+ }
223
+
234
224
// isSecretOutdated compares two secret data of type map[string][]byte and returns true if they are not equal.
235
225
func isSecretOutdated (existingSecretData , newSecretData map [string ][]byte ) bool {
236
226
if len (existingSecretData ) != len (newSecretData ) {
0 commit comments