When spec.RestoreStatus is empty, don't restore status

Signed-off-by: Scott Seago <sseago@redhat.com>
pull/5015/head
Scott Seago 2022-06-15 12:57:37 -04:00
parent 8c2a75eea5
commit 5dbc98e679
2 changed files with 6 additions and 6 deletions

View File

@ -0,0 +1 @@
When spec.RestoreStatus is empty, don't restore status

View File

@ -207,11 +207,8 @@ func (kr *kubernetesRestorer) RestoreWithResolvers(
) )
// Get resource status includes-excludes. Defaults to excluding all resources // Get resource status includes-excludes. Defaults to excluding all resources
restoreStatusIncludesExcludes := collections.GetResourceIncludesExcludes( var restoreStatusIncludesExcludes *collections.IncludesExcludes
kr.discoveryHelper,
[]string{},
[]string{"*"},
)
if req.Restore.Spec.RestoreStatus != nil { if req.Restore.Spec.RestoreStatus != nil {
restoreStatusIncludesExcludes = collections.GetResourceIncludesExcludes( restoreStatusIncludesExcludes = collections.GetResourceIncludesExcludes(
kr.discoveryHelper, kr.discoveryHelper,
@ -1362,13 +1359,14 @@ func (ctx *restoreContext) restoreItem(obj *unstructured.Unstructured, groupReso
return warnings, errs return warnings, errs
} }
shouldRestoreStatus := ctx.resourceStatusIncludesExcludes.ShouldInclude(groupResource.String()) shouldRestoreStatus := ctx.resourceStatusIncludesExcludes != nil && ctx.resourceStatusIncludesExcludes.ShouldInclude(groupResource.String())
if shouldRestoreStatus && statusFieldErr != nil { if shouldRestoreStatus && statusFieldErr != nil {
err := fmt.Errorf("could not get status to be restored %s: %v", kube.NamespaceAndName(obj), statusFieldErr) err := fmt.Errorf("could not get status to be restored %s: %v", kube.NamespaceAndName(obj), statusFieldErr)
ctx.log.Errorf(err.Error()) ctx.log.Errorf(err.Error())
errs.Add(namespace, err) errs.Add(namespace, err)
return warnings, errs return warnings, errs
} }
ctx.log.Debugf("status field for %s: exists: %v, should restore: %v", groupResource, statusFieldExists, shouldRestoreStatus)
// if it should restore status, run a UpdateStatus // if it should restore status, run a UpdateStatus
if statusFieldExists && shouldRestoreStatus { if statusFieldExists && shouldRestoreStatus {
if err := unstructured.SetNestedField(obj.Object, objStatus, "status"); err != nil { if err := unstructured.SetNestedField(obj.Object, objStatus, "status"); err != nil {
@ -1379,6 +1377,7 @@ func (ctx *restoreContext) restoreItem(obj *unstructured.Unstructured, groupReso
obj.SetResourceVersion(createdObj.GetResourceVersion()) obj.SetResourceVersion(createdObj.GetResourceVersion())
updated, err := resourceClient.UpdateStatus(obj, metav1.UpdateOptions{}) updated, err := resourceClient.UpdateStatus(obj, metav1.UpdateOptions{})
if err != nil { if err != nil {
ctx.log.Infof("status field update failed %s: %v", kube.NamespaceAndName(obj), err)
warnings.Add(namespace, err) warnings.Add(namespace, err)
} else { } else {
createdObj = updated createdObj = updated