diff --git a/pkg/backup/backup.go b/pkg/backup/backup.go index b9fa5dc319..f70d415306 100644 --- a/pkg/backup/backup.go +++ b/pkg/backup/backup.go @@ -235,15 +235,34 @@ type tarWriter interface { // backupGroup backs up a single API group. func (kb *kubernetesBackupper) backupGroup(ctx *backupContext, group *metav1.APIResourceList) error { - var errs []error + var ( + errs []error + pv *metav1.APIResource + ) - for _, resource := range group.APIResources { + processResource := func(resource metav1.APIResource) { ctx.infof("Processing resource %s/%s", group.GroupVersion, resource.Name) if err := kb.backupResource(ctx, group, resource); err != nil { errs = append(errs, err) } } + for _, resource := range group.APIResources { + // do PVs last because if we're also backing up PVCs, we want to backup + // PVs within the scope of the PVCs (within the PVC action) to allow + // for hooks to run + if strings.ToLower(resource.Name) == "persistentvolumes" && strings.ToLower(group.GroupVersion) == "v1" { + pvResource := resource + pv = &pvResource + continue + } + processResource(resource) + } + + if pv != nil { + processResource(*pv) + } + return kuberrs.NewAggregate(errs) }