From 1615cfd7f30f7bc1ade9ba4ed167a8430f6d9a84 Mon Sep 17 00:00:00 2001 From: lyndon <98304688+Lyndon-Li@users.noreply.github.com> Date: Fri, 1 Sep 2023 16:52:24 +0800 Subject: [PATCH] fix issue 6709 (#6741) Signed-off-by: Lyndon-Li --- pkg/restore/restore.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pkg/restore/restore.go b/pkg/restore/restore.go index 2cc9c56224..bf7c5a6bbb 100644 --- a/pkg/restore/restore.go +++ b/pkg/restore/restore.go @@ -71,6 +71,10 @@ import ( "github.com/vmware-tanzu/velero/pkg/volume" ) +var resourceMustHave = []string{ + "datauploads.velero.io", +} + type VolumeSnapshotterGetter interface { GetVolumeSnapshotter(name string) (vsv1.VolumeSnapshotter, error) } @@ -276,6 +280,7 @@ func (kr *kubernetesRestorer) RestoreWithResolvers( resourceIncludesExcludes: resourceIncludesExcludes, resourceStatusIncludesExcludes: restoreStatusIncludesExcludes, namespaceIncludesExcludes: namespaceIncludesExcludes, + resourceMustHave: sets.NewString(resourceMustHave...), chosenGrpVersToRestore: make(map[string]ChosenGroupVersion), selector: selector, OrSelectors: OrSelectors, @@ -320,6 +325,7 @@ type restoreContext struct { resourceIncludesExcludes *collections.IncludesExcludes resourceStatusIncludesExcludes *collections.IncludesExcludes namespaceIncludesExcludes *collections.IncludesExcludes + resourceMustHave sets.String chosenGrpVersToRestore map[string]ChosenGroupVersion selector labels.Selector OrSelectors []labels.Selector @@ -989,7 +995,7 @@ func (ctx *restoreContext) restoreItem(obj *unstructured.Unstructured, groupReso // via obj.GetNamespace()) instead of the namespace parameter, because we want // to check the *original* namespace, not the remapped one if it's been remapped. if namespace != "" { - if !ctx.namespaceIncludesExcludes.ShouldInclude(obj.GetNamespace()) { + if !ctx.namespaceIncludesExcludes.ShouldInclude(obj.GetNamespace()) && !ctx.resourceMustHave.Has(groupResource.String()) { ctx.log.WithFields(logrus.Fields{ "namespace": obj.GetNamespace(), "name": obj.GetName(), @@ -2016,7 +2022,7 @@ func (ctx *restoreContext) getOrderedResourceCollection( // Iterate through each namespace that contains instances of the // resource and append to the list of to-be restored resources. for namespace, items := range resourceList.ItemsByNamespace { - if namespace != "" && !ctx.namespaceIncludesExcludes.ShouldInclude(namespace) { + if namespace != "" && !ctx.namespaceIncludesExcludes.ShouldInclude(namespace) && !ctx.resourceMustHave.Has(groupResource.String()) { ctx.log.Infof("Skipping namespace %s", namespace) continue }