From 0c88eefc0d22c9c63b0a462c0f5455cf995458fa Mon Sep 17 00:00:00 2001 From: Steve Kriss Date: Wed, 26 Sep 2018 13:00:48 -0600 Subject: [PATCH] bug: fix restic restores when using namespace mappings Signed-off-by: Steve Kriss --- pkg/restic/restorer.go | 6 +++--- pkg/restore/restore.go | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/pkg/restic/restorer.go b/pkg/restic/restorer.go index 6d538b735..a618390bd 100644 --- a/pkg/restic/restorer.go +++ b/pkg/restic/restorer.go @@ -34,7 +34,7 @@ import ( // Restorer can execute restic restores of volumes in a pod. type Restorer interface { // RestorePodVolumes restores all annotated volumes in a pod. - RestorePodVolumes(restore *arkv1api.Restore, pod *corev1api.Pod, log logrus.FieldLogger) []error + RestorePodVolumes(restore *arkv1api.Restore, pod *corev1api.Pod, sourceNamespace string, log logrus.FieldLogger) []error } type restorer struct { @@ -84,14 +84,14 @@ func newRestorer( return r } -func (r *restorer) RestorePodVolumes(restore *arkv1api.Restore, pod *corev1api.Pod, log logrus.FieldLogger) []error { +func (r *restorer) RestorePodVolumes(restore *arkv1api.Restore, pod *corev1api.Pod, sourceNamespace string, log logrus.FieldLogger) []error { // get volumes to restore from pod's annotations volumesToRestore := GetPodSnapshotAnnotations(pod) if len(volumesToRestore) == 0 { return nil } - repo, err := r.repoEnsurer.EnsureRepo(r.ctx, restore.Namespace, pod.Namespace) + repo, err := r.repoEnsurer.EnsureRepo(r.ctx, restore.Namespace, sourceNamespace) if err != nil { return []error{err} } diff --git a/pkg/restore/restore.go b/pkg/restore/restore.go index f8f7eaaa0..ad4b57052 100644 --- a/pkg/restore/restore.go +++ b/pkg/restore/restore.go @@ -743,6 +743,7 @@ func (ctx *context) restoreResource(resource, namespace, resourcePath string) (a // necessary because we may have remapped the namespace // if the namespace is blank, don't create the key + originalNamespace := obj.GetNamespace() if namespace != "" { obj.SetNamespace(namespace) } @@ -827,7 +828,7 @@ func (ctx *context) restoreResource(resource, namespace, resourcePath string) (a return []error{err} } - if errs := ctx.resticRestorer.RestorePodVolumes(ctx.restore, pod, ctx.log); errs != nil { + if errs := ctx.resticRestorer.RestorePodVolumes(ctx.restore, pod, originalNamespace, ctx.log); errs != nil { ctx.log.WithError(kubeerrs.NewAggregate(errs)).Error("unable to successfully complete restic restores of pod's volumes") return errs }