Skip to content

Commit 1cfccdd

Browse files
authored
remove default secret volumes when using cloud storage provider (#491)
Adding back removed tests refactoring so the logic is shared between validation and customization.
1 parent f2603f1 commit 1cfccdd

File tree

5 files changed

+951
-969
lines changed

5 files changed

+951
-969
lines changed

controllers/validator.go

Lines changed: 3 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@ package controllers
33
import (
44
"errors"
55
"fmt"
6-
"strings"
76

87
"github.com/go-logr/logr"
98
oadpv1alpha1 "github.com/openshift/oadp-operator/api/v1alpha1"
109
"github.com/openshift/oadp-operator/pkg/credentials"
11-
"k8s.io/apimachinery/pkg/types"
1210
)
1311

1412
func (r *DPAReconciler) ValidateDataProtectionCR(log logr.Logger) (bool, error) {
@@ -57,35 +55,9 @@ func (r *DPAReconciler) ValidateVeleroPlugins(log logr.Logger) (bool, error) {
5755
return false, err
5856
}
5957

60-
providerNeedsDefaultCreds := map[string]bool{}
61-
hasCloudStorage := false
62-
63-
for _, bsl := range dpa.Spec.BackupLocations {
64-
if bsl.Velero != nil && bsl.Velero.Credential == nil {
65-
providerNeedsDefaultCreds[strings.TrimPrefix(bsl.Velero.Provider, "velero.io/")] = true
66-
}
67-
if bsl.CloudStorage != nil {
68-
hasCloudStorage = true
69-
if bsl.CloudStorage.Credential == nil {
70-
cloudStroage := oadpv1alpha1.CloudStorage{}
71-
err := r.Get(r.Context, types.NamespacedName{Name: bsl.CloudStorage.CloudStorageRef.Name, Namespace: dpa.Namespace}, &cloudStroage)
72-
if err != nil {
73-
return false, err
74-
}
75-
providerNeedsDefaultCreds[string(cloudStroage.Spec.Provider)] = true
76-
}
77-
}
78-
}
79-
80-
for _, vsl := range dpa.Spec.SnapshotLocations {
81-
if vsl.Velero != nil {
82-
// To handle the case where we want to manually hand the credentials for a cloud storage created
83-
// Bucket credententials via configuration. Only AWS is supported
84-
provider := strings.TrimPrefix(vsl.Velero.Provider, "velero.io")
85-
if provider != string(oadpv1alpha1.AWSBucketProvider) {
86-
providerNeedsDefaultCreds[provider] = true
87-
}
88-
}
58+
providerNeedsDefaultCreds, hasCloudStorage, err := r.noDefaultCredentials(dpa)
59+
if err != nil {
60+
return false, err
8961
}
9062

9163
var defaultPlugin oadpv1alpha1.DefaultPlugin

controllers/velero.go

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"os"
66
"reflect"
7+
"strings"
78

89
"github.com/openshift/oadp-operator/pkg/credentials"
910
"github.com/operator-framework/operator-lib/proxy"
@@ -468,7 +469,12 @@ func (r *DPAReconciler) customizeVeleroDeployment(dpa *oadpv1alpha1.DataProtecti
468469
if err := r.customizeVeleroContainer(dpa, veleroDeployment, veleroContainer, isSTSNeeded); err != nil {
469470
return err
470471
}
471-
return credentials.AppendPluginSpecificSpecs(dpa, veleroDeployment, veleroContainer)
472+
473+
providerNeedsDefaultCreds, hasCloudStorage, err := r.noDefaultCredentials(*dpa)
474+
if err != nil {
475+
return err
476+
}
477+
return credentials.AppendPluginSpecificSpecs(dpa, veleroDeployment, veleroContainer, providerNeedsDefaultCreds, hasCloudStorage)
472478
}
473479

474480
func (r *DPAReconciler) customizeVeleroContainer(dpa *oadpv1alpha1.DataProtectionApplication, veleroDeployment *appsv1.Deployment, veleroContainer *corev1.Container, isSTSNeeded bool) error {
@@ -611,3 +617,39 @@ func (r *DPAReconciler) getResticResourceReqs(dpa *oadpv1alpha1.DataProtectionAp
611617

612618
return ResourcesReqs
613619
}
620+
621+
func (r DPAReconciler) noDefaultCredentials(dpa oadpv1alpha1.DataProtectionApplication) (map[string]bool, bool, error) {
622+
providerNeedsDefaultCreds := map[string]bool{}
623+
hasCloudStorage := false
624+
625+
for _, bsl := range dpa.Spec.BackupLocations {
626+
if bsl.Velero != nil && bsl.Velero.Credential == nil {
627+
providerNeedsDefaultCreds[strings.TrimPrefix(bsl.Velero.Provider, "velero.io/")] = true
628+
}
629+
if bsl.CloudStorage != nil {
630+
hasCloudStorage = true
631+
if bsl.CloudStorage.Credential == nil {
632+
cloudStroage := oadpv1alpha1.CloudStorage{}
633+
err := r.Get(r.Context, types.NamespacedName{Name: bsl.CloudStorage.CloudStorageRef.Name, Namespace: dpa.Namespace}, &cloudStroage)
634+
if err != nil {
635+
return nil, false, err
636+
}
637+
providerNeedsDefaultCreds[string(cloudStroage.Spec.Provider)] = true
638+
}
639+
}
640+
}
641+
642+
for _, vsl := range dpa.Spec.SnapshotLocations {
643+
if vsl.Velero != nil {
644+
// To handle the case where we want to manually hand the credentials for a cloud storage created
645+
// Bucket credententials via configuration. Only AWS is supported
646+
provider := strings.TrimPrefix(vsl.Velero.Provider, "velero.io")
647+
if provider != string(oadpv1alpha1.AWSBucketProvider) {
648+
providerNeedsDefaultCreds[provider] = true
649+
}
650+
}
651+
}
652+
653+
return providerNeedsDefaultCreds, hasCloudStorage, nil
654+
655+
}

0 commit comments

Comments
 (0)