From ad4e733ef2bbd400a765a482f93edf90af2efe7b Mon Sep 17 00:00:00 2001 From: divolgin Date: Thu, 25 Aug 2022 01:06:59 +0000 Subject: [PATCH] Don't panic when storageClassName is not set in stateful sets Signed-off-by: divolgin --- changelogs/unreleased/5247-divolgin | 1 + pkg/restore/change_storageclass_action.go | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 changelogs/unreleased/5247-divolgin diff --git a/changelogs/unreleased/5247-divolgin b/changelogs/unreleased/5247-divolgin new file mode 100644 index 000000000..7a6e24cfe --- /dev/null +++ b/changelogs/unreleased/5247-divolgin @@ -0,0 +1 @@ +Fix nil pointer panic when restoring StatefulSets \ No newline at end of file diff --git a/pkg/restore/change_storageclass_action.go b/pkg/restore/change_storageclass_action.go index 5714a1a7f..577ab28ec 100644 --- a/pkg/restore/change_storageclass_action.go +++ b/pkg/restore/change_storageclass_action.go @@ -99,7 +99,7 @@ func (a *ChangeStorageClassAction) Execute(input *velero.RestoreItemActionExecut if len(sts.Spec.VolumeClaimTemplates) > 0 { for index, pvc := range sts.Spec.VolumeClaimTemplates { - exists, newStorageClass, err := a.isStorageClassExist(log, *pvc.Spec.StorageClassName, config) + exists, newStorageClass, err := a.isStorageClassExist(log, pvc.Spec.StorageClassName, config) if err != nil { return nil, err } else if !exists { @@ -124,7 +124,7 @@ func (a *ChangeStorageClassAction) Execute(input *velero.RestoreItemActionExecut return nil, errors.Wrap(err, "error getting item's spec.storageClassName") } - exists, newStorageClass, err := a.isStorageClassExist(log, storageClass, config) + exists, newStorageClass, err := a.isStorageClassExist(log, &storageClass, config) if err != nil { return nil, err } else if !exists { @@ -140,15 +140,15 @@ func (a *ChangeStorageClassAction) Execute(input *velero.RestoreItemActionExecut return velero.NewRestoreItemActionExecuteOutput(obj), nil } -func (a *ChangeStorageClassAction) isStorageClassExist(log *logrus.Entry, storageClass string, cm *corev1.ConfigMap) (exists bool, newStorageClass string, err error) { - if storageClass == "" { +func (a *ChangeStorageClassAction) isStorageClassExist(log *logrus.Entry, storageClass *string, cm *corev1.ConfigMap) (exists bool, newStorageClass string, err error) { + if storageClass == nil || *storageClass == "" { log.Debug("Item has no storage class specified") return false, "", nil } - newStorageClass, ok := cm.Data[storageClass] + newStorageClass, ok := cm.Data[*storageClass] if !ok { - log.Debugf("No mapping found for storage class %s", storageClass) + log.Debugf("No mapping found for storage class %s", *storageClass) return false, "", nil }