@@ -14,6 +14,7 @@ import (
14
14
batchv1 "k8s.io/api/batch/v1"
15
15
corev1 "k8s.io/api/core/v1"
16
16
k8sErrors "k8s.io/apimachinery/pkg/api/errors"
17
+ k8serrors "k8s.io/apimachinery/pkg/api/errors"
17
18
"k8s.io/apimachinery/pkg/labels"
18
19
"k8s.io/apimachinery/pkg/types"
19
20
"k8s.io/client-go/util/retry"
@@ -368,17 +369,39 @@ func (r *ReconcilePerconaServerMongoDB) updatePITR(ctx context.Context, cr *api.
368
369
return errors .Wrap (err , "get pitr.enabled" )
369
370
}
370
371
371
- // if PiTR is enabled we know there is only one storage
372
- var storage api.BackupStorageSpec
373
- for name , stg := range cr .Spec .Backup .Storages {
374
- storage = stg
375
- log .Info ("Configuring PBM with storage" , "storage" , name )
376
- break
377
- }
372
+ if len (cr .Spec .Backup .Storages ) == 1 {
373
+ // if PiTR is enabled user can configure only one storage
374
+ var storage api.BackupStorageSpec
375
+ for name , stg := range cr .Spec .Backup .Storages {
376
+ storage = stg
377
+ log .Info ("Configuring PBM with storage" , "storage" , name )
378
+ break
379
+ }
378
380
379
- err = pbm .SetConfig (ctx , r .client , cr , storage )
380
- if err != nil {
381
- return errors .Wrap (err , "set PBM config" )
381
+ var secretName string
382
+ switch storage .Type {
383
+ case api .BackupStorageS3 :
384
+ secretName = storage .S3 .CredentialsSecret
385
+ case api .BackupStorageAzure :
386
+ secretName = storage .Azure .CredentialsSecret
387
+ }
388
+
389
+ exists , err := secretExists (ctx , r .client , types.NamespacedName {Name : secretName , Namespace : cr .Namespace })
390
+ if err != nil {
391
+ return errors .Wrap (err , "check storage credentials secret" )
392
+ }
393
+
394
+ if ! exists {
395
+ log .Error (nil , "Storage credentials secret does not exist" , "secret" , secretName )
396
+ return nil
397
+ }
398
+
399
+ err = pbm .SetConfig (ctx , r .client , cr , storage )
400
+ if err != nil {
401
+ return errors .Wrap (err , "set PBM config" )
402
+ }
403
+
404
+ log .Info ("Configured PBM storage" )
382
405
}
383
406
384
407
return nil
@@ -567,3 +590,16 @@ func (r *ReconcilePerconaServerMongoDB) resyncPBMIfNeeded(ctx context.Context, c
567
590
568
591
return nil
569
592
}
593
+
594
+ func secretExists (ctx context.Context , cl client.Client , nn types.NamespacedName ) (bool , error ) {
595
+ var secret corev1.Secret
596
+ err := cl .Get (ctx , nn , & secret )
597
+ if err != nil {
598
+ if k8serrors .IsNotFound (err ) {
599
+ return false , nil
600
+ }
601
+ return false , err
602
+ }
603
+
604
+ return true , nil
605
+ }
0 commit comments