diff --git a/pkg/restore/restore.go b/pkg/restore/restore.go index 63c26538b..471f38119 100644 --- a/pkg/restore/restore.go +++ b/pkg/restore/restore.go @@ -1950,6 +1950,10 @@ func hasCSIVolumeSnapshot(ctx *restoreContext, unstructuredPV *unstructured.Unst ctx.log.WithError(err).Warnf("Unable to convert PV from unstructured to structured") return false } + // ignoring static PV cases where there is no claimRef + if pv.Spec.ClaimRef == nil { + return false + } for _, vs := range ctx.csiVolumeSnapshots { // In some error cases, the VSs' source PVC could be nil. Skip them. diff --git a/pkg/restore/restore_test.go b/pkg/restore/restore_test.go index 4aa0d6d6a..e7aa4fddb 100644 --- a/pkg/restore/restore_test.go +++ b/pkg/restore/restore_test.go @@ -3963,11 +3963,33 @@ func TestHasCSIVolumeSnapshot(t *testing.T) { "namespace": "default", "name": "test", }, + "spec": map[string]interface{}{ + "claimRef": map[string]interface{}{ + "namespace": "velero", + "name": "test", + }, + }, }, }, vs: builder.ForVolumeSnapshot("velero", "test").Result(), expectedResult: false, }, + { + name: "PVs claimref is nil, expect false.", + obj: &unstructured.Unstructured{ + Object: map[string]interface{}{ + "kind": "PersistentVolume", + "apiVersion": "v1", + "metadata": map[string]interface{}{ + "namespace": "velero", + "name": "test", + }, + }, + }, + vs: builder.ForVolumeSnapshot("velero", "test").SourcePVC("test").Result(), + expectedResult: false, + }, + { name: "Find VS, expect true.", obj: &unstructured.Unstructured{