Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

remove default secret volumes when using cloud storage provider #491

Merged
merged 1 commit into from
Dec 6, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 3 additions & 31 deletions controllers/validator.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,10 @@ package controllers
import (
"errors"
"fmt"
"strings"

"github.com/go-logr/logr"
oadpv1alpha1 "github.com/openshift/oadp-operator/api/v1alpha1"
"github.com/openshift/oadp-operator/pkg/credentials"
"k8s.io/apimachinery/pkg/types"
)

func (r *DPAReconciler) ValidateDataProtectionCR(log logr.Logger) (bool, error) {
Expand Down Expand Up @@ -57,35 +55,9 @@ func (r *DPAReconciler) ValidateVeleroPlugins(log logr.Logger) (bool, error) {
return false, err
}

providerNeedsDefaultCreds := map[string]bool{}
hasCloudStorage := false

for _, bsl := range dpa.Spec.BackupLocations {
if bsl.Velero != nil && bsl.Velero.Credential == nil {
providerNeedsDefaultCreds[strings.TrimPrefix(bsl.Velero.Provider, "velero.io/")] = true
}
if bsl.CloudStorage != nil {
hasCloudStorage = true
if bsl.CloudStorage.Credential == nil {
cloudStroage := oadpv1alpha1.CloudStorage{}
err := r.Get(r.Context, types.NamespacedName{Name: bsl.CloudStorage.CloudStorageRef.Name, Namespace: dpa.Namespace}, &cloudStroage)
if err != nil {
return false, err
}
providerNeedsDefaultCreds[string(cloudStroage.Spec.Provider)] = true
}
}
}

for _, vsl := range dpa.Spec.SnapshotLocations {
if vsl.Velero != nil {
// To handle the case where we want to manually hand the credentials for a cloud storage created
// Bucket credententials via configuration. Only AWS is supported
provider := strings.TrimPrefix(vsl.Velero.Provider, "velero.io")
if provider != string(oadpv1alpha1.AWSBucketProvider) {
providerNeedsDefaultCreds[provider] = true
}
}
providerNeedsDefaultCreds, hasCloudStorage, err := r.noDefaultCredentials(dpa)
if err != nil {
return false, err
}

var defaultPlugin oadpv1alpha1.DefaultPlugin
Expand Down
44 changes: 43 additions & 1 deletion controllers/velero.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"fmt"
"os"
"reflect"
"strings"

"github.com/openshift/oadp-operator/pkg/credentials"
"github.com/operator-framework/operator-lib/proxy"
Expand Down Expand Up @@ -468,7 +469,12 @@ func (r *DPAReconciler) customizeVeleroDeployment(dpa *oadpv1alpha1.DataProtecti
if err := r.customizeVeleroContainer(dpa, veleroDeployment, veleroContainer, isSTSNeeded); err != nil {
return err
}
return credentials.AppendPluginSpecificSpecs(dpa, veleroDeployment, veleroContainer)

providerNeedsDefaultCreds, hasCloudStorage, err := r.noDefaultCredentials(*dpa)
if err != nil {
return err
}
return credentials.AppendPluginSpecificSpecs(dpa, veleroDeployment, veleroContainer, providerNeedsDefaultCreds, hasCloudStorage)
}

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

return ResourcesReqs
}

func (r DPAReconciler) noDefaultCredentials(dpa oadpv1alpha1.DataProtectionApplication) (map[string]bool, bool, error) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A function comment on return vals would be nice so you don't have to inspect the function for what is returned.

providerNeedsDefaultCreds := map[string]bool{}
hasCloudStorage := false

for _, bsl := range dpa.Spec.BackupLocations {
if bsl.Velero != nil && bsl.Velero.Credential == nil {
providerNeedsDefaultCreds[strings.TrimPrefix(bsl.Velero.Provider, "velero.io/")] = true
}
if bsl.CloudStorage != nil {
hasCloudStorage = true
if bsl.CloudStorage.Credential == nil {
cloudStroage := oadpv1alpha1.CloudStorage{}
err := r.Get(r.Context, types.NamespacedName{Name: bsl.CloudStorage.CloudStorageRef.Name, Namespace: dpa.Namespace}, &cloudStroage)
if err != nil {
return nil, false, err
}
providerNeedsDefaultCreds[string(cloudStroage.Spec.Provider)] = true
}
}
}

for _, vsl := range dpa.Spec.SnapshotLocations {
if vsl.Velero != nil {
// To handle the case where we want to manually hand the credentials for a cloud storage created
// Bucket credententials via configuration. Only AWS is supported
provider := strings.TrimPrefix(vsl.Velero.Provider, "velero.io")
if provider != string(oadpv1alpha1.AWSBucketProvider) {
providerNeedsDefaultCreds[provider] = true
}
}
}

return providerNeedsDefaultCreds, hasCloudStorage, nil

}
Loading