Skip to content

Commit 11ab518

Browse files
authored
Add support for legacy aws plugin (#1565) (#1570)
1 parent 8a5dba2 commit 11ab518

16 files changed

+249
-41
lines changed

api/v1alpha1/oadp_types.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,11 @@ const ReconcileCompleteMessage = "Reconcile complete"
3535
const OadpOperatorLabel = "openshift.io/oadp"
3636
const RegistryDeploymentLabel = "openshift.io/oadp-registry"
3737

38-
// +kubebuilder:validation:Enum=aws;gcp;azure;csi;vsm;openshift;kubevirt
38+
// +kubebuilder:validation:Enum=aws;legacy-aws;gcp;azure;csi;vsm;openshift;kubevirt
3939
type DefaultPlugin string
4040

4141
const DefaultPluginAWS DefaultPlugin = "aws"
42+
const DefaultPluginLegacyAWS DefaultPlugin = "legacy-aws"
4243
const DefaultPluginGCP DefaultPlugin = "gcp"
4344
const DefaultPluginMicrosoftAzure DefaultPlugin = "azure"
4445
const DefaultPluginCSI DefaultPlugin = "csi"
@@ -56,6 +57,7 @@ type UnsupportedImageKey string
5657

5758
const VeleroImageKey UnsupportedImageKey = "veleroImageFqin"
5859
const AWSPluginImageKey UnsupportedImageKey = "awsPluginImageFqin"
60+
const LegacyAWSPluginImageKey UnsupportedImageKey = "legacyAWSPluginImageFqin"
5961
const OpenShiftPluginImageKey UnsupportedImageKey = "openshiftPluginImageFqin"
6062
const AzurePluginImageKey UnsupportedImageKey = "azurePluginImageFqin"
6163
const GCPPluginImageKey UnsupportedImageKey = "gcpPluginImageFqin"
@@ -345,6 +347,7 @@ type DataProtectionApplicationSpec struct {
345347
// Available keys are:
346348
// - veleroImageFqin
347349
// - awsPluginImageFqin
350+
// - legacyAWSPluginImageFqin
348351
// - openshiftPluginImageFqin
349352
// - azurePluginImageFqin
350353
// - gcpPluginImageFqin

bundle/manifests/oadp-operator.clusterserviceversion.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ metadata:
153153
Cloud Provider,Developer Tools,Modernization & Migration,OpenShift Optional,Storage
154154
certified: "false"
155155
containerImage: quay.io/konveyor/oadp-operator:oadp-1.4
156-
createdAt: "2024-05-29T17:22:16Z"
156+
157157
description: OADP (OpenShift API for Data Protection) operator sets up and installs
158158
Data Protection Applications on the OpenShift platform.
159159
features.operators.openshift.io/cnf: "false"
@@ -856,6 +856,8 @@ spec:
856856
value: quay.io/konveyor/openshift-velero-plugin:oadp-1.4
857857
- name: RELATED_IMAGE_VELERO_PLUGIN_FOR_AWS
858858
value: quay.io/konveyor/velero-plugin-for-aws:oadp-1.4
859+
- name: RELATED_IMAGE_VELERO_PLUGIN_FOR_LEGACY_AWS
860+
value: quay.io/konveyor/velero-plugin-for-legacy-aws:oadp-1.4
859861
- name: RELATED_IMAGE_VELERO_PLUGIN_FOR_MICROSOFT_AZURE
860862
value: quay.io/konveyor/velero-plugin-for-microsoft-azure:oadp-1.4
861863
- name: RELATED_IMAGE_VELERO_PLUGIN_FOR_GCP
@@ -1005,6 +1007,8 @@ spec:
10051007
name: openshift-velero-plugin
10061008
- image: quay.io/konveyor/velero-plugin-for-aws:oadp-1.4
10071009
name: velero-plugin-for-aws
1010+
- image: quay.io/konveyor/velero-plugin-for-legacy-aws:oadp-1.4
1011+
name: velero-plugin-for-legacy-aws
10081012
- image: quay.io/konveyor/velero-plugin-for-microsoft-azure:oadp-1.4
10091013
name: velero-plugin-for-microsoft-azure
10101014
- image: quay.io/konveyor/velero-plugin-for-gcp:oadp-1.4

bundle/manifests/oadp.openshift.io_dataprotectionapplications.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -824,6 +824,7 @@ spec:
824824
items:
825825
enum:
826826
- aws
827+
- legacy-aws
827828
- gcp
828829
- azure
829830
- csi
@@ -1318,6 +1319,7 @@ spec:
13181319
Available keys are:
13191320
- veleroImageFqin
13201321
- awsPluginImageFqin
1322+
- legacyAWSPluginImageFqin
13211323
- openshiftPluginImageFqin
13221324
- azurePluginImageFqin
13231325
- gcpPluginImageFqin

config/crd/bases/oadp.openshift.io_dataprotectionapplications.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -824,6 +824,7 @@ spec:
824824
items:
825825
enum:
826826
- aws
827+
- legacy-aws
827828
- gcp
828829
- azure
829830
- csi
@@ -1318,6 +1319,7 @@ spec:
13181319
Available keys are:
13191320
- veleroImageFqin
13201321
- awsPluginImageFqin
1322+
- legacyAWSPluginImageFqin
13211323
- openshiftPluginImageFqin
13221324
- azurePluginImageFqin
13231325
- gcpPluginImageFqin

config/manager/manager.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ spec:
5050
value: quay.io/konveyor/openshift-velero-plugin:oadp-1.4
5151
- name: RELATED_IMAGE_VELERO_PLUGIN_FOR_AWS
5252
value: quay.io/konveyor/velero-plugin-for-aws:oadp-1.4
53+
- name: RELATED_IMAGE_VELERO_PLUGIN_FOR_LEGACY_AWS
54+
value: quay.io/konveyor/velero-plugin-for-legacy-aws:oadp-1.4
5355
- name: RELATED_IMAGE_VELERO_PLUGIN_FOR_MICROSOFT_AZURE
5456
value: quay.io/konveyor/velero-plugin-for-microsoft-azure:oadp-1.4
5557
- name: RELATED_IMAGE_VELERO_PLUGIN_FOR_GCP

controllers/bsl.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/go-logr/logr"
99
oadpv1alpha1 "github.com/openshift/oadp-operator/api/v1alpha1"
1010
"github.com/openshift/oadp-operator/pkg/common"
11+
"github.com/openshift/oadp-operator/pkg/credentials"
1112
"github.com/openshift/oadp-operator/pkg/storage/aws"
1213
velerov1 "github.com/vmware-tanzu/velero/pkg/apis/velero/v1"
1314
corev1 "k8s.io/api/core/v1"
@@ -399,9 +400,9 @@ func (r *DPAReconciler) validateGCPBackupStorageLocation(bslSpec velerov1.Backup
399400
return nil
400401
}
401402

402-
func pluginExistsInVeleroCR(configuredPlugins []oadpv1alpha1.DefaultPlugin, expectedPlugin oadpv1alpha1.DefaultPlugin) bool {
403+
func pluginExistsInVeleroCR(configuredPlugins []oadpv1alpha1.DefaultPlugin, expectedProvider string) bool {
403404
for _, plugin := range configuredPlugins {
404-
if plugin == expectedPlugin {
405+
if credentials.PluginSpecificFields[plugin].ProviderName == expectedProvider {
405406
return true
406407
}
407408
}
@@ -413,7 +414,7 @@ func (r *DPAReconciler) validateProviderPluginAndSecret(bslSpec velerov1.BackupS
413414
return nil
414415
}
415416
// check for existence of provider plugin and warn if the plugin is absent
416-
if !pluginExistsInVeleroCR(dpa.Spec.Configuration.Velero.DefaultPlugins, oadpv1alpha1.DefaultPlugin(bslSpec.Provider)) {
417+
if !pluginExistsInVeleroCR(dpa.Spec.Configuration.Velero.DefaultPlugins, bslSpec.Provider) {
417418
r.Log.Info(fmt.Sprintf("%s backupstoragelocation is configured but velero plugin for %s is not present", bslSpec.Provider, bslSpec.Provider))
418419
//TODO: set warning condition on Velero CR
419420
}

controllers/validator.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,19 @@ func (r *DPAReconciler) ValidateVeleroPlugins(log logr.Logger) (bool, error) {
105105
}
106106
}
107107

108+
foundAWSPlugin := false
109+
foundLegacyAWSPlugin := false
108110
for _, plugin := range dpa.Spec.Configuration.Velero.DefaultPlugins {
109111
pluginSpecificMap, ok := credentials.PluginSpecificFields[plugin]
110-
pluginNeedsCheck, foundInBSLorVSL := providerNeedsDefaultCreds[string(plugin)]
112+
pluginNeedsCheck, foundInBSLorVSL := providerNeedsDefaultCreds[pluginSpecificMap.ProviderName]
113+
114+
// "aws" and "legacy-aws" cannot both be specified
115+
if plugin == oadpv1alpha1.DefaultPluginAWS {
116+
foundAWSPlugin = true
117+
}
118+
if plugin == oadpv1alpha1.DefaultPluginLegacyAWS {
119+
foundLegacyAWSPlugin = true
120+
}
111121

112122
if foundInVSL := snapshotLocationsProviders[string(plugin)]; foundInVSL {
113123
pluginNeedsCheck = true
@@ -152,5 +162,10 @@ func (r *DPAReconciler) ValidateVeleroPlugins(log logr.Logger) (bool, error) {
152162
}
153163
}
154164
}
165+
166+
if foundAWSPlugin && foundLegacyAWSPlugin {
167+
return false, fmt.Errorf("%s and %s can not be both specified in DPA spec.configuration.velero.defaultPlugins", oadpv1alpha1.DefaultPluginAWS, oadpv1alpha1.DefaultPluginLegacyAWS)
168+
}
169+
155170
return true, nil
156171
}

controllers/validator_test.go

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1363,6 +1363,30 @@ func TestDPAReconciler_ValidateDataProtectionCR(t *testing.T) {
13631363
wantErr: true,
13641364
messageErr: "Secret name specified in BackupLocation cannot be empty",
13651365
},
1366+
{
1367+
name: "given invalid DPA CR aws and legacy-aws plugins both specified",
1368+
dpa: &oadpv1alpha1.DataProtectionApplication{
1369+
ObjectMeta: metav1.ObjectMeta{
1370+
Name: "test-DPA-CR",
1371+
Namespace: "test-ns",
1372+
},
1373+
Spec: oadpv1alpha1.DataProtectionApplicationSpec{
1374+
Configuration: &oadpv1alpha1.ApplicationConfig{
1375+
Velero: &oadpv1alpha1.VeleroConfig{
1376+
DefaultPlugins: []oadpv1alpha1.DefaultPlugin{
1377+
oadpv1alpha1.DefaultPluginAWS,
1378+
oadpv1alpha1.DefaultPluginLegacyAWS,
1379+
},
1380+
NoDefaultBackupLocation: true,
1381+
},
1382+
},
1383+
BackupImages: pointer.Bool(false),
1384+
},
1385+
},
1386+
objects: []client.Object{},
1387+
wantErr: true,
1388+
messageErr: "aws and legacy-aws can not be both specified in DPA spec.configuration.velero.defaultPlugins",
1389+
},
13661390
}
13671391
for _, tt := range tests {
13681392
tt.objects = append(tt.objects, tt.dpa)
@@ -1387,7 +1411,7 @@ func TestDPAReconciler_ValidateDataProtectionCR(t *testing.T) {
13871411
t.Errorf("ValidateDataProtectionCR() error = %v, wantErr %v", err, tt.wantErr)
13881412
return
13891413
}
1390-
if tt.wantErr && err.Error() != tt.messageErr {
1414+
if tt.wantErr && err != nil && err.Error() != tt.messageErr {
13911415
t.Errorf("Error messages are not the same: got %v, expected %v", err.Error(), tt.messageErr)
13921416
return
13931417
}

controllers/velero.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -423,15 +423,15 @@ func (r *DPAReconciler) appendPluginSpecificSpecs(dpa *oadpv1alpha1.DataProtecti
423423

424424
for _, plugin := range dpa.Spec.Configuration.Velero.DefaultPlugins {
425425
if pluginSpecificMap, ok := credentials.PluginSpecificFields[plugin]; ok {
426-
imagePullPolicy, err := common.GetImagePullPolicy(dpa.Spec.ImagePullPolicy, credentials.GetPluginImage(pluginSpecificMap.PluginName, dpa))
426+
imagePullPolicy, err := common.GetImagePullPolicy(dpa.Spec.ImagePullPolicy, credentials.GetPluginImage(plugin, dpa))
427427
if err != nil {
428428
r.Log.Error(err, "imagePullPolicy regex failed")
429429
}
430430

431431
veleroDeployment.Spec.Template.Spec.InitContainers = append(
432432
veleroDeployment.Spec.Template.Spec.InitContainers,
433433
corev1.Container{
434-
Image: credentials.GetPluginImage(pluginSpecificMap.PluginName, dpa),
434+
Image: credentials.GetPluginImage(plugin, dpa),
435435
Name: pluginSpecificMap.PluginName,
436436
ImagePullPolicy: imagePullPolicy,
437437
Resources: init_container_resources,
@@ -445,7 +445,7 @@ func (r *DPAReconciler) appendPluginSpecificSpecs(dpa *oadpv1alpha1.DataProtecti
445445
},
446446
})
447447

448-
pluginNeedsCheck, foundInBSLorVSL := providerNeedsDefaultCreds[string(plugin)]
448+
pluginNeedsCheck, foundInBSLorVSL := providerNeedsDefaultCreds[pluginSpecificMap.ProviderName]
449449

450450
if !foundInBSLorVSL && !hasCloudStorage {
451451
pluginNeedsCheck = true
@@ -772,7 +772,7 @@ func (r DPAReconciler) noDefaultCredentials(dpa oadpv1alpha1.DataProtectionAppli
772772
}
773773
for _, provider := range dpa.Spec.Configuration.Velero.DefaultPlugins {
774774
if psf, ok := credentials.PluginSpecificFields[provider]; ok && psf.IsCloudProvider {
775-
providerNeedsDefaultCreds[psf.PluginName] = needDefaultCred
775+
providerNeedsDefaultCreds[psf.ProviderName] = needDefaultCred
776776
}
777777
}
778778
} else {

controllers/velero_test.go

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1364,6 +1364,37 @@ func TestDPAReconciler_buildVeleroDeployment(t *testing.T) {
13641364
},
13651365
}),
13661366
},
1367+
{
1368+
name: "valid DPA CR with legacy aws plugin, Velero Deployment is built with legacy aws plugin",
1369+
dpa: createTestDpaWith(
1370+
nil,
1371+
oadpv1alpha1.DataProtectionApplicationSpec{
1372+
Configuration: &oadpv1alpha1.ApplicationConfig{
1373+
Velero: &oadpv1alpha1.VeleroConfig{
1374+
DefaultPlugins: []oadpv1alpha1.DefaultPlugin{
1375+
oadpv1alpha1.DefaultPluginLegacyAWS,
1376+
},
1377+
},
1378+
},
1379+
},
1380+
),
1381+
veleroDeployment: testVeleroDeployment.DeepCopy(),
1382+
wantVeleroDeployment: createTestBuiltVeleroDeployment(TestBuiltVeleroDeploymentOptions{
1383+
initContainers: []corev1.Container{pluginContainer(common.VeleroPluginForLegacyAWS, common.LegacyAWSPluginImage)},
1384+
volumes: []corev1.Volume{deploymentVolumeSecret("cloud-credentials")},
1385+
volumeMounts: []corev1.VolumeMount{
1386+
{Name: "cloud-credentials", MountPath: "/credentials"},
1387+
},
1388+
env: append(baseEnvVars, []corev1.EnvVar{
1389+
{Name: common.AWSSharedCredentialsFileEnvKey, Value: "/credentials/cloud"},
1390+
}...),
1391+
args: []string{
1392+
defaultFileSystemBackupTimeout,
1393+
defaultRestoreResourcePriorities,
1394+
defaultDisableInformerCache,
1395+
},
1396+
}),
1397+
},
13671398
{
13681399
name: "valid DPA CR with aws and kubevirt plugin, Velero Deployment is built with aws and kubevirt plugin",
13691400
dpa: createTestDpaWith(
@@ -1982,7 +2013,7 @@ func TestDPAReconciler_noDefaultCredentials(t *testing.T) {
19822013
wantErr bool
19832014
}{
19842015
{
1985-
name: "dpa with all plugins but with noDefualtBackupLocation should not require default credentials",
2016+
name: "dpa with all plugins but with noDefaultBackupLocation should not require default credentials",
19862017
args: args{
19872018
dpa: oadpv1alpha1.DataProtectionApplication{
19882019
ObjectMeta: metav1.ObjectMeta{
@@ -2000,9 +2031,9 @@ func TestDPAReconciler_noDefaultCredentials(t *testing.T) {
20002031
},
20012032
},
20022033
want: map[string]bool{
2003-
"velero-plugin-for-aws": false,
2004-
"velero-plugin-for-gcp": false,
2005-
"velero-plugin-for-microsoft-azure": false,
2034+
"aws": false,
2035+
"gcp": false,
2036+
"azure": false,
20062037
},
20072038
wantHasCloudStorage: false,
20082039
wantErr: false,

controllers/vsl.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ func (r *DPAReconciler) ReconcileVolumeSnapshotLocations(log logr.Logger) (bool,
308308

309309
func containsPlugin(d []oadpv1alpha1.DefaultPlugin, value string) bool {
310310
for _, elem := range d {
311-
if string(elem) == value {
311+
if credentials.PluginSpecificFields[elem].ProviderName == value {
312312
return true
313313
}
314314
}

deploy/disconnected-prep.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ IMAGES=(
1717
"helper"
1818
"gcpplugin"
1919
"awsplugin"
20+
"legacyawsplugin"
2021
"azureplugin"
2122
"registry"
2223
)
@@ -28,6 +29,7 @@ IMG_MAP[velero_repo]="velero"
2829
IMG_MAP[helper_repo]="velero-restore-helper"
2930
IMG_MAP[gcpplugin_repo]="velero-plugin-for-gcp"
3031
IMG_MAP[awsplugin_repo]="velero-plugin-for-aws"
32+
IMG_MAP[legacyawsplugin_repo]="velero-plugin-for-legacy-aws"
3133
IMG_MAP[azureplugin_repo]="velero-plugin-for-microsoft-azure"
3234
IMG_MAP[registry_repo]="registry"
3335

@@ -71,12 +73,14 @@ for f in bundle/manifests/oadp-operator.clusterserviceversion.yaml
7173
sed -i "s,/velero-restore-helper:.*,/velero-restore-helper@sha256:${IMG_MAP[helper_sha]},g" ${f}
7274
sed -i "s,/openshift-velero-plugin:.*,/openshift-velero-plugin@sha256:${IMG_MAP[plugin_sha]},g" ${f}
7375
sed -i "s,/velero-plugin-for-aws:.*,/velero-plugin-for-aws@sha256:${IMG_MAP[awsplugin_sha]},g" ${f}
76+
sed -i "s,/velero-plugin-for-legacy-aws:.*,/velero-plugin-for-legacy-aws@sha256:${IMG_MAP[legacyawsplugin_sha]},g" ${f}
7477
sed -i "s,/velero-plugin-for-microsoft-azure:.*,/velero-plugin-for-microsoft-azure@sha256:${IMG_MAP[azureplugin_sha]},g" ${f}
7578
sed -i "s,/velero-plugin-for-gcp:.*,/velero-plugin-for-gcp@sha256:${IMG_MAP[gcpplugin_sha]},g" ${f}
7679
sed -i "s,/registry:.*,/registry@sha256:${IMG_MAP[registry_sha]},g" ${f}
7780
sed -i 's,value: velero-restore-helper,value: velero-restore-helper@sha256,g' ${f}
7881
sed -i 's,value: velero-plugin-for-gcp,value: velero-plugin-for-gcp@sha256,g' ${f}
7982
sed -i 's,value: velero-plugin-for-aws,value: velero-plugin-for-aws@sha256,g' ${f}
83+
sed -i 's,value: velero-plugin-for-legacy-aws,value: velero-plugin-for-legacy-aws@sha256,g' ${f}
8084
sed -i 's,value: velero-plugin-for-microsoft-azure,value: velero-plugin-for-microsoft-azure@sha256,g' ${f}
8185
sed -i 's,value: velero$,value: velero@sha256,g' ${f}
8286
sed -i 's,value: openshift-velero-plugin$,value: openshift-velero-plugin@sha256,g' ${f}
@@ -86,6 +90,7 @@ for f in bundle/manifests/oadp-operator.clusterserviceversion.yaml
8690
sed -i "/VELERO_RESTORE_HELPER_TAG/,/^ *[^:]*:/s/value: .*/value: ${IMG_MAP[helper_sha]}/" ${f}
8791
sed -i "/VELERO_GCP_PLUGIN_TAG/,/^ *[^:]*:/s/value: .*/value: ${IMG_MAP[gcpplugin_sha]}/" ${f}
8892
sed -i "/VELERO_AWS_PLUGIN_TAG/,/^ *[^:]*:/s/value: .*/value: ${IMG_MAP[awsplugin_sha]}/" ${f}
93+
sed -i "/VELERO_LEGACY_AWS_PLUGIN_TAG/,/^ *[^:]*:/s/value: .*/value: ${IMG_MAP[legacyawsplugin_sha]}/" ${f}
8994
sed -i "/VELERO_AZURE_PLUGIN_TAG/,/^ *[^:]*:/s/value: .*/value: ${IMG_MAP[azureplugin_sha]}/" ${f}
9095
sed -i "/VELERO_REGISTRY_TAG/,/^ *[^:]*:/s/value: .*/value: ${IMG_MAP[registry_sha]}/" ${f}
9196
if [[ "$f" =~ .*clusterserviceversion.* ]] && ! grep -q infrastructure-features ${f}; then

docs/config/plugins.md

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ There are mainly two categories of Velero plugins that can be specified while
88
installing Velero:
99

1010
1. `defaultPlugins`:<br>
11-
There are six types of default Velero plugins can be installed:
11+
There are several types of default Velero plugins can be installed:
1212
- `AWS` [Plugins for AWS
13+
](https://github.com/vmware-tanzu/velero-plugin-for-aws)
14+
- `Legacy AWS` [Plugins for Legacy AWS
1315
](https://github.com/vmware-tanzu/velero-plugin-for-aws)
1416
- `GCP` [Plugins for Google Cloud Platform](https://github.com/vmware-tanzu/velero-plugin-for-gcp)
1517
- `Azure` [Plugins for Microsoft Azure](https://github.com/vmware-tanzu/velero-plugin-for-microsoft-azure)
@@ -18,6 +20,8 @@ installing Velero:
1820
- `kubevirt` [Plugins for Kubevirt](https://github.com/kubevirt/kubevirt-velero-plugin)
1921
- `VSM (OADP 1.2 or below)` [Plugin for Volume-Snapshot-Mover](https://github.com/migtools/velero-plugin-for-vsm)
2022

23+
Note that only one of `AWS` and `Legacy AWS` may be installed at the same time. `Legacy AWS` is intended for use with certain S3 providers that do not support the V2 AWS SDK APIs used in the `AWS` plugin.
24+
2125
For installation,
2226
you need to specify them in the `oadp_v1alpha1_dpa.yaml` file
2327
during deployment.
@@ -37,7 +41,21 @@ installing Velero:
3741
- gcp
3842
```
3943
The above specification will install Velero with four of the default plugins.
40-
44+
45+
```
46+
apiVersion: oadp.openshift.io/v1alpha1
47+
kind: DataProtectionApplication
48+
metadata:
49+
name: dpa-sample
50+
spec:
51+
configuration:
52+
velero:
53+
defaultPlugins:
54+
- openshift
55+
- legacy-aws
56+
```
57+
The above specification will install Velero with two of the default plugins.
58+
4159
2. `customPlugins`:<br>
4260
For installation of custom Velero plugins, you need to specify the plugin
4361
`image` and plugin `name` in the `oadp_v1alpha1_dpa.yaml` file during

0 commit comments

Comments
 (0)