diff --git a/pkg/restore/restore.go b/pkg/restore/restore.go index 63c26538b..742ffb592 100644 --- a/pkg/restore/restore.go +++ b/pkg/restore/restore.go @@ -1952,8 +1952,8 @@ func hasCSIVolumeSnapshot(ctx *restoreContext, unstructuredPV *unstructured.Unst } for _, vs := range ctx.csiVolumeSnapshots { - // In some error cases, the VSs' source PVC could be nil. Skip them. - if vs.Spec.Source.PersistentVolumeClaimName == nil { + // In some error cases, the VSs' source PVC could be nil or PVs ClaimRef could be nil. Skip them. + if vs.Spec.Source.PersistentVolumeClaimName == nil || pv.Spec.ClaimRef == nil { continue } diff --git a/pkg/restore/restore_test.go b/pkg/restore/restore_test.go index 8bf24d845..4b25d295d 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{