Skip to content

Commit b23a69e

Browse files
Joeavaikathclaude
andauthored
Add kubevirt-datamover plugin support to DPA (#2074)
Adds support for the kubevirt-datamover plugin as a new default plugin option in the DataProtectionApplication CRD. This plugin enables data movement capabilities for KubeVirt virtual machines during backup and restore operations. Changes include: - Add DefaultPluginKubeVirtDataMover constant to DefaultPlugin enum - Add KubeVirtDatamoverImageKey to unsupportedOverrides configuration - Add plugin image constant and name mapping in pkg/common - Add credentials and image retrieval logic in pkg/credentials - Update CRD validation to accept 'kubevirt-datamover' plugin value - Update bundle manifests with new plugin enum value Users can now specify 'kubevirt-datamover' in the DPA spec: spec: configuration: velero: defaultPlugins: - kubevirt-datamover Signed-off-by: Joseph <jvaikath@redhat.com> Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent 71dffdb commit b23a69e

5 files changed

Lines changed: 36 additions & 10 deletions

File tree

api/v1alpha1/dataprotectionapplication_types.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ const (
5454

5555
const OadpOperatorLabel = "openshift.io/oadp"
5656

57-
// +kubebuilder:validation:Enum=aws;legacy-aws;gcp;azure;csi;vsm;openshift;kubevirt;hypershift
57+
// +kubebuilder:validation:Enum=aws;legacy-aws;gcp;azure;csi;vsm;openshift;kubevirt;kubevirt-datamover;hypershift
5858
type DefaultPlugin string
5959

6060
const DefaultPluginAWS DefaultPlugin = "aws"
@@ -65,6 +65,7 @@ const DefaultPluginCSI DefaultPlugin = "csi"
6565
const DefaultPluginVSM DefaultPlugin = "vsm"
6666
const DefaultPluginOpenShift DefaultPlugin = "openshift"
6767
const DefaultPluginKubeVirt DefaultPlugin = "kubevirt"
68+
const DefaultPluginKubeVirtDataMover DefaultPlugin = "kubevirt-datamover"
6869
const DefaultPluginHypershift DefaultPlugin = "hypershift"
6970

7071
type CustomPlugin struct {
@@ -89,6 +90,7 @@ const OpenShiftPluginImageKey UnsupportedImageKey = "openshiftPluginImageFqin"
8990
const AzurePluginImageKey UnsupportedImageKey = "azurePluginImageFqin"
9091
const GCPPluginImageKey UnsupportedImageKey = "gcpPluginImageFqin"
9192
const KubeVirtPluginImageKey UnsupportedImageKey = "kubevirtPluginImageFqin"
93+
const KubeVirtDatamoverImageKey UnsupportedImageKey = "kubevirtDatamoverPluginImageFqin"
9294
const HypershiftPluginImageKey UnsupportedImageKey = "hypershiftPluginImageFqin"
9395
const NonAdminControllerImageKey UnsupportedImageKey = "nonAdminControllerImageFqin"
9496
const VMFileRestoreControllerImageKey UnsupportedImageKey = "vmFileRestoreControllerImageFqin"
@@ -879,6 +881,7 @@ type DataProtectionApplicationSpec struct {
879881
// - azurePluginImageFqin
880882
// - gcpPluginImageFqin
881883
// - kubevirtPluginImageFqin
884+
// - kubevirtDatamoverPluginImageFqin
882885
// - hypershiftPluginImageFqin
883886
// - nonAdminControllerImageFqin
884887
// - vmFileRestoreControllerImageFqin

bundle/manifests/oadp.openshift.io_dataprotectionapplications.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,6 +1146,7 @@ spec:
11461146
- vsm
11471147
- openshift
11481148
- kubevirt
1149+
- kubevirt-datamover
11491150
- hypershift
11501151
type: string
11511152
type: array
@@ -2690,6 +2691,7 @@ spec:
26902691
- azurePluginImageFqin
26912692
- gcpPluginImageFqin
26922693
- kubevirtPluginImageFqin
2694+
- kubevirtDatamoverPluginImageFqin
26932695
- hypershiftPluginImageFqin
26942696
- nonAdminControllerImageFqin
26952697
- vmFileRestoreControllerImageFqin

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,6 +1146,7 @@ spec:
11461146
- vsm
11471147
- openshift
11481148
- kubevirt
1149+
- kubevirt-datamover
11491150
- hypershift
11501151
type: string
11511152
type: array
@@ -2690,6 +2691,7 @@ spec:
26902691
- azurePluginImageFqin
26912692
- gcpPluginImageFqin
26922693
- kubevirtPluginImageFqin
2694+
- kubevirtDatamoverPluginImageFqin
26932695
- hypershiftPluginImageFqin
26942696
- nonAdminControllerImageFqin
26952697
- vmFileRestoreControllerImageFqin

pkg/common/common.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,16 @@ var DefaultRestoreResourcePriorities = types.Priorities{
6666

6767
// Images
6868
const (
69-
VeleroImage = "quay.io/konveyor/velero:latest"
70-
OpenshiftPluginImage = "quay.io/konveyor/openshift-velero-plugin:latest"
71-
AWSPluginImage = "quay.io/konveyor/velero-plugin-for-aws:latest"
72-
LegacyAWSPluginImage = "quay.io/konveyor/velero-plugin-for-legacy-aws:latest"
73-
AzurePluginImage = "quay.io/konveyor/velero-plugin-for-microsoft-azure:latest"
74-
GCPPluginImage = "quay.io/konveyor/velero-plugin-for-gcp:latest"
75-
RegistryImage = "quay.io/konveyor/registry:latest"
76-
KubeVirtPluginImage = "quay.io/konveyor/kubevirt-velero-plugin:latest"
77-
HypershiftPluginImage = "quay.io/redhat-user-workloads/ocp-art-tenant/oadp-hypershift-oadp-plugin-main:main"
69+
VeleroImage = "quay.io/konveyor/velero:latest"
70+
OpenshiftPluginImage = "quay.io/konveyor/openshift-velero-plugin:latest"
71+
AWSPluginImage = "quay.io/konveyor/velero-plugin-for-aws:latest"
72+
LegacyAWSPluginImage = "quay.io/konveyor/velero-plugin-for-legacy-aws:latest"
73+
AzurePluginImage = "quay.io/konveyor/velero-plugin-for-microsoft-azure:latest"
74+
GCPPluginImage = "quay.io/konveyor/velero-plugin-for-gcp:latest"
75+
RegistryImage = "quay.io/konveyor/registry:latest"
76+
KubeVirtPluginImage = "quay.io/konveyor/kubevirt-velero-plugin:latest"
77+
KubeVirtDatamoverPluginImage = "quay.io/konveyor/kubevirt-datamover-plugin:latest"
78+
HypershiftPluginImage = "quay.io/redhat-user-workloads/ocp-art-tenant/oadp-hypershift-oadp-plugin-main:main"
7879
)
7980

8081
// Plugin names
@@ -85,6 +86,7 @@ const (
8586
VeleroPluginForGCP = "velero-plugin-for-gcp"
8687
VeleroPluginForOpenshift = "openshift-velero-plugin"
8788
KubeVirtPlugin = "kubevirt-velero-plugin"
89+
KubeVirtDatamoverPlugin = "kubevirt-datamover-plugin"
8890
HypershiftPlugin = "hypershift-oadp-plugin"
8991
)
9092

pkg/credentials/credentials.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ var (
7878
IsCloudProvider: false,
7979
PluginName: common.KubeVirtPlugin,
8080
},
81+
oadpv1alpha1.DefaultPluginKubeVirtDataMover: {
82+
IsCloudProvider: false,
83+
PluginName: common.KubeVirtDatamoverPlugin,
84+
},
8185
oadpv1alpha1.DefaultPluginHypershift: {
8286
IsCloudProvider: false,
8387
PluginName: common.HypershiftPlugin,
@@ -163,6 +167,16 @@ func getKubeVirtPluginImage(dpa *oadpv1alpha1.DataProtectionApplication) string
163167
return os.Getenv("RELATED_IMAGE_KUBEVIRT_VELERO_PLUGIN")
164168
}
165169

170+
func getKubeVirtDatamoverPluginImage(dpa *oadpv1alpha1.DataProtectionApplication) string {
171+
if dpa.Spec.UnsupportedOverrides[oadpv1alpha1.KubeVirtDatamoverImageKey] != "" {
172+
return dpa.Spec.UnsupportedOverrides[oadpv1alpha1.KubeVirtDatamoverImageKey]
173+
}
174+
if os.Getenv("RELATED_IMAGE_KUBEVIRT_DATAMOVER_PLUGIN") == "" {
175+
return common.KubeVirtDatamoverPluginImage
176+
}
177+
return os.Getenv("RELATED_IMAGE_KUBEVIRT_DATAMOVER_PLUGIN")
178+
}
179+
166180
func getHypershiftPluginImage(dpa *oadpv1alpha1.DataProtectionApplication) string {
167181
if dpa.Spec.UnsupportedOverrides[oadpv1alpha1.HypershiftPluginImageKey] != "" {
168182
return dpa.Spec.UnsupportedOverrides[oadpv1alpha1.HypershiftPluginImageKey]
@@ -194,6 +208,9 @@ func GetPluginImage(defaultPlugin oadpv1alpha1.DefaultPlugin, dpa *oadpv1alpha1.
194208
case oadpv1alpha1.DefaultPluginKubeVirt:
195209
return getKubeVirtPluginImage(dpa)
196210

211+
case oadpv1alpha1.DefaultPluginKubeVirtDataMover:
212+
return getKubeVirtDatamoverPluginImage(dpa)
213+
197214
case oadpv1alpha1.DefaultPluginHypershift:
198215
return getHypershiftPluginImage(dpa)
199216
}

0 commit comments

Comments
 (0)