From 749d57db3e1c7a20e1e1b3b50f6749361beb60b9 Mon Sep 17 00:00:00 2001 From: Lyndon-Li Date: Mon, 16 Jun 2025 13:47:55 +0800 Subject: [PATCH] windows support for vgdp ms for pvb Signed-off-by: Lyndon-Li --- Dockerfile-Windows | 2 ++ changelogs/unreleased/9021-Lyndon-Li | 1 + pkg/podvolume/backupper.go | 8 ++------ pkg/podvolume/backupper_test.go | 20 -------------------- pkg/podvolume/restorer.go | 6 ------ pkg/podvolume/restorer_test.go | 24 ------------------------ 6 files changed, 5 insertions(+), 56 deletions(-) create mode 100644 changelogs/unreleased/9021-Lyndon-Li diff --git a/Dockerfile-Windows b/Dockerfile-Windows index 4042ed403..34ccc3b62 100644 --- a/Dockerfile-Windows +++ b/Dockerfile-Windows @@ -44,6 +44,8 @@ RUN mkdir -p /output/usr/bin && \ export GOARM=$( echo "${GOARM}" | cut -c2-) && \ go build -o /output/${BIN}.exe \ -ldflags "${LDFLAGS}" ${PKG}/cmd/${BIN} && \ + go build -o /output/velero-restore-helper.exe \ + -ldflags "${LDFLAGS}" ${PKG}/cmd/velero-restore-helper && \ go build -o /output/velero-helper.exe \ -ldflags "${LDFLAGS}" ${PKG}/cmd/velero-helper && \ go clean -modcache -cache diff --git a/changelogs/unreleased/9021-Lyndon-Li b/changelogs/unreleased/9021-Lyndon-Li new file mode 100644 index 000000000..ea433c6bc --- /dev/null +++ b/changelogs/unreleased/9021-Lyndon-Li @@ -0,0 +1 @@ +Fix issue #8964, add Windows support for VGDP MS for fs-backup \ No newline at end of file diff --git a/pkg/podvolume/backupper.go b/pkg/podvolume/backupper.go index 6a96617f9..1c71c668b 100644 --- a/pkg/podvolume/backupper.go +++ b/pkg/podvolume/backupper.go @@ -268,12 +268,6 @@ func (b *backupper) BackupPodVolumes(backup *velerov1api.Backup, pod *corev1api. return nil, pvcSummary, nil } - if err := kube.IsLinuxNode(b.ctx, pod.Spec.NodeName, b.crClient); err != nil { - err := errors.Wrapf(err, "Pod %s/%s is not running in linux node(%s), skip", pod.Namespace, pod.Name, pod.Spec.NodeName) - skipAllPodVolumes(pod, volumesToBackup, err, pvcSummary, log) - return nil, pvcSummary, []error{err} - } - err := nodeagent.IsRunningInNode(b.ctx, backup.Namespace, pod.Spec.NodeName, b.crClient) if err != nil { skipAllPodVolumes(pod, volumesToBackup, err, pvcSummary, log) @@ -406,6 +400,8 @@ func (b *backupper) WaitAllPodVolumesProcessed(log logrus.FieldLogger) []*velero } }() + log.Info("Waiting for completion of PVB") + var podVolumeBackups []*velerov1api.PodVolumeBackup // if no pod volume backups are tracked, return directly to avoid issue mentioned in // https://github.com/vmware-tanzu/velero/issues/8723 diff --git a/pkg/podvolume/backupper_test.go b/pkg/podvolume/backupper_test.go index ac0386bd1..065f7e720 100644 --- a/pkg/podvolume/backupper_test.go +++ b/pkg/podvolume/backupper_test.go @@ -307,10 +307,6 @@ func createNodeObj() *corev1api.Node { return builder.ForNode("fake-node-name").Labels(map[string]string{"kubernetes.io/os": "linux"}).Result() } -func createWindowsNodeObj() *corev1api.Node { - return builder.ForNode("fake-node-name").Labels(map[string]string{"kubernetes.io/os": "windows"}).Result() -} - func TestBackupPodVolumes(t *testing.T) { scheme := runtime.NewScheme() velerov1api.AddToScheme(scheme) @@ -367,22 +363,6 @@ func TestBackupPodVolumes(t *testing.T) { uploaderType: "kopia", bsl: "fake-bsl", }, - { - name: "pod is not running on Linux node", - volumes: []string{ - "fake-volume-1", - "fake-volume-2", - }, - kubeClientObj: []runtime.Object{ - createNodeAgentPodObj(true), - createWindowsNodeObj(), - }, - sourcePod: createPodObj(false, false, false, 2), - uploaderType: "kopia", - errs: []string{ - "Pod fake-ns/fake-pod is not running in linux node(fake-node-name), skip", - }, - }, { name: "node-agent pod is not running in node", volumes: []string{ diff --git a/pkg/podvolume/restorer.go b/pkg/podvolume/restorer.go index bebbeee3e..c23ca417c 100644 --- a/pkg/podvolume/restorer.go +++ b/pkg/podvolume/restorer.go @@ -213,12 +213,6 @@ func (r *restorer) RestorePodVolumes(data RestoreData, tracker *volume.RestoreVo } else if err != nil { r.log.WithError(err).Error("Failed to check node-agent pod status, disengage") } else { - if err := kube.IsLinuxNode(checkCtx, nodeName, r.crClient); err != nil { - r.log.WithField("node", nodeName).WithError(err).Error("Restored pod is not running in linux node") - r.nodeAgentCheck <- errors.Wrapf(err, "restored pod %s/%s is not running in linux node(%s)", data.Pod.Namespace, data.Pod.Name, nodeName) - return - } - err = nodeagent.IsRunningInNode(checkCtx, data.Restore.Namespace, nodeName, r.crClient) if err != nil { r.log.WithField("node", nodeName).WithError(err).Error("node-agent pod is not running in node, abort the restore") diff --git a/pkg/podvolume/restorer_test.go b/pkg/podvolume/restorer_test.go index 9f4673a3c..914a6e9be 100644 --- a/pkg/podvolume/restorer_test.go +++ b/pkg/podvolume/restorer_test.go @@ -313,30 +313,6 @@ func TestRestorePodVolumes(t *testing.T) { }, }, }, - { - name: "pod is not running on linux nodes", - pvbs: []*velerov1api.PodVolumeBackup{ - createPVBObj(true, true, 1, "kopia"), - }, - kubeClientObj: []runtime.Object{ - createNodeAgentDaemonset(), - createWindowsNodeObj(), - createPVCObj(1), - createPodObj(true, true, true, 1), - }, - ctlClientObj: []runtime.Object{ - createBackupRepoObj(), - }, - restoredPod: createPodObj(true, true, true, 1), - sourceNamespace: "fake-ns", - bsl: "fake-bsl", - runtimeScheme: scheme, - errs: []expectError{ - { - err: "restored pod fake-ns/fake-pod is not running in linux node(fake-node-name): os type windows for node fake-node-name is not linux", - }, - }, - }, { name: "node-agent pod is not running", pvbs: []*velerov1api.PodVolumeBackup{