Skip to content

Commit 978550f

Browse files
authored
Adding ability for a BSL with credentials to pass validation. (#524)
1 parent 30fb446 commit 978550f

File tree

2 files changed

+105
-1
lines changed

2 files changed

+105
-1
lines changed

controllers/validator_test.go

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,28 @@ func TestDPAReconciler_ValidateDataProtectionCR(t *testing.T) {
5050
wantErr: false,
5151
want: true,
5252
},
53+
{
54+
name: "given valid DPA CR, error case",
55+
dpa: &oadpv1alpha1.DataProtectionApplication{
56+
ObjectMeta: metav1.ObjectMeta{
57+
Name: "test-DPA-CR",
58+
Namespace: "test-ns",
59+
},
60+
Spec: oadpv1alpha1.DataProtectionApplicationSpec{
61+
Configuration: &oadpv1alpha1.ApplicationConfig{
62+
Velero: &oadpv1alpha1.VeleroConfig{
63+
DefaultPlugins: []oadpv1alpha1.DefaultPlugin{
64+
oadpv1alpha1.DefaultPluginAWS,
65+
},
66+
NoDefaultBackupLocation: true,
67+
},
68+
},
69+
},
70+
},
71+
objects: []client.Object{},
72+
wantErr: true,
73+
want: false,
74+
},
5375
{
5476
name: "given invalid DPA CR, velero configuration is nil, error case",
5577
dpa: &oadpv1alpha1.DataProtectionApplication{
@@ -344,6 +366,81 @@ func TestDPAReconciler_ValidateDataProtectionCR(t *testing.T) {
344366
wantErr: true,
345367
want: false,
346368
},
369+
{
370+
name: "given valid DPA CR AWS Default Plugin with credentials",
371+
dpa: &oadpv1alpha1.DataProtectionApplication{
372+
ObjectMeta: metav1.ObjectMeta{
373+
Name: "test-DPA-CR",
374+
Namespace: "test-ns",
375+
},
376+
Spec: oadpv1alpha1.DataProtectionApplicationSpec{
377+
BackupLocations: []oadpv1alpha1.BackupLocation{
378+
{
379+
Velero: &v1.BackupStorageLocationSpec{
380+
Provider: "velero.io/aws",
381+
Credential: &corev1.SecretKeySelector{
382+
LocalObjectReference: corev1.LocalObjectReference{
383+
Name: "Test",
384+
},
385+
Key: "Creds",
386+
Optional: new(bool),
387+
},
388+
},
389+
},
390+
},
391+
Configuration: &oadpv1alpha1.ApplicationConfig{
392+
Velero: &oadpv1alpha1.VeleroConfig{
393+
DefaultPlugins: []oadpv1alpha1.DefaultPlugin{
394+
oadpv1alpha1.DefaultPluginAWS,
395+
},
396+
},
397+
},
398+
},
399+
},
400+
objects: []client.Object{},
401+
wantErr: false,
402+
want: true,
403+
},
404+
{
405+
name: "given valid DPA CR AWS Default Plugin with credentials and one without",
406+
dpa: &oadpv1alpha1.DataProtectionApplication{
407+
ObjectMeta: metav1.ObjectMeta{
408+
Name: "test-DPA-CR",
409+
Namespace: "test-ns",
410+
},
411+
Spec: oadpv1alpha1.DataProtectionApplicationSpec{
412+
BackupLocations: []oadpv1alpha1.BackupLocation{
413+
{
414+
Velero: &v1.BackupStorageLocationSpec{
415+
Provider: "velero.io/aws",
416+
Credential: &corev1.SecretKeySelector{
417+
LocalObjectReference: corev1.LocalObjectReference{
418+
Name: "Test",
419+
},
420+
Key: "Creds",
421+
Optional: new(bool),
422+
},
423+
},
424+
},
425+
{
426+
Velero: &v1.BackupStorageLocationSpec{
427+
Provider: "velero.io/aws",
428+
},
429+
},
430+
},
431+
Configuration: &oadpv1alpha1.ApplicationConfig{
432+
Velero: &oadpv1alpha1.VeleroConfig{
433+
DefaultPlugins: []oadpv1alpha1.DefaultPlugin{
434+
oadpv1alpha1.DefaultPluginAWS,
435+
},
436+
},
437+
},
438+
},
439+
},
440+
objects: []client.Object{},
441+
wantErr: true,
442+
want: false,
443+
},
347444
}
348445
for _, tt := range tests {
349446
tt.objects = append(tt.objects, tt.dpa)

controllers/velero.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -651,7 +651,14 @@ func (r DPAReconciler) noDefaultCredentials(dpa oadpv1alpha1.DataProtectionAppli
651651

652652
for _, bsl := range dpa.Spec.BackupLocations {
653653
if bsl.Velero != nil && bsl.Velero.Credential == nil {
654-
providerNeedsDefaultCreds[strings.TrimPrefix(bsl.Velero.Provider, "velero.io/")] = true
654+
bslProvider := strings.TrimPrefix(bsl.Velero.Provider, "velero.io/")
655+
providerNeedsDefaultCreds[bslProvider] = true
656+
}
657+
if bsl.Velero != nil && bsl.Velero.Credential != nil {
658+
bslProvider := strings.TrimPrefix(bsl.Velero.Provider, "velero.io/")
659+
if found := providerNeedsDefaultCreds[bslProvider]; !found {
660+
providerNeedsDefaultCreds[bslProvider] = false
661+
}
655662
}
656663
if bsl.CloudStorage != nil {
657664
hasCloudStorage = true

0 commit comments

Comments
 (0)