Skip to content

Commit df05057

Browse files
Fix managed fields patch for resources using GenerateName (#9408)
* Fix managed fields patch for resources using GenerateName When restoring resources with GenerateName (where name is empty and K8s assigns the actual name), the managed fields patch was failing with error "name is required" because it was using obj.GetName() which returns empty for GenerateName resources. The fix uses createdObj.GetName() instead, which contains the actual name assigned by Kubernetes after resource creation. This affects any resource using GenerateName for restore, including: - PersistentVolumeClaims restored by kubevirt-velero-plugin - Secrets and ConfigMaps created with generateName - Any custom resources using generateName Changes: - Line 1707: Use createdObj.GetName() instead of obj.GetName() in Patch call - Lines 1702, 1709, 1713, 1716: Use createdObj in error/info messages for accuracy This is a backwards-compatible fix since: - For resources WITHOUT generateName: obj.GetName() == createdObj.GetName() - For resources WITH generateName: createdObj.GetName() has the actual name The managed fields patch was already correctly using createdObj (lines 1698-1700), only the Patch() call was incorrectly using obj. Fixes restore status showing FinalizingPartiallyFailed with "name is required" error when restoring resources with GenerateName. Signed-off-by: Shubham Pampattiwar <spampatt@redhat.com> (cherry picked from commit 898fa13) * Add changelog file Signed-off-by: Shubham Pampattiwar <spampatt@redhat.com> --------- Signed-off-by: Shubham Pampattiwar <spampatt@redhat.com>
1 parent cad0169 commit df05057

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix managed fields patch for resources using GenerateName

pkg/restore/restore.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1703,21 +1703,21 @@ func (ctx *restoreContext) restoreItem(obj *unstructured.Unstructured, groupReso
17031703
createdObj.SetManagedFields(obj.GetManagedFields())
17041704
patchBytes, err := generatePatch(withoutManagedFields, createdObj)
17051705
if err != nil {
1706-
restoreLogger.Errorf("error generating patch for managed fields %s: %s", kube.NamespaceAndName(obj), err.Error())
1706+
restoreLogger.Errorf("error generating patch for managed fields %s: %s", kube.NamespaceAndName(createdObj), err.Error())
17071707
errs.Add(namespace, err)
17081708
return warnings, errs, itemExists
17091709
}
17101710
if patchBytes != nil {
1711-
if _, err = resourceClient.Patch(obj.GetName(), patchBytes); err != nil {
1711+
if _, err = resourceClient.Patch(createdObj.GetName(), patchBytes); err != nil {
17121712
if !apierrors.IsNotFound(err) {
1713-
restoreLogger.Errorf("error patch for managed fields %s: %s", kube.NamespaceAndName(obj), err.Error())
1713+
restoreLogger.Errorf("error patch for managed fields %s: %s", kube.NamespaceAndName(createdObj), err.Error())
17141714
errs.Add(namespace, err)
17151715
return warnings, errs, itemExists
17161716
}
1717-
restoreLogger.Warnf("item not found when patching managed fields %s: %s", kube.NamespaceAndName(obj), err.Error())
1717+
restoreLogger.Warnf("item not found when patching managed fields %s: %s", kube.NamespaceAndName(createdObj), err.Error())
17181718
warnings.Add(namespace, err)
17191719
} else {
1720-
restoreLogger.Infof("the managed fields for %s is patched", kube.NamespaceAndName(obj))
1720+
restoreLogger.Infof("the managed fields for %s is patched", kube.NamespaceAndName(createdObj))
17211721
}
17221722
}
17231723

0 commit comments

Comments
 (0)