diff --git a/changelogs/unreleased/9368-shubham-pampattiwar b/changelogs/unreleased/9368-shubham-pampattiwar new file mode 100644 index 000000000..f8262126a --- /dev/null +++ b/changelogs/unreleased/9368-shubham-pampattiwar @@ -0,0 +1 @@ +Track actual resource names for GenerateName in restore status diff --git a/pkg/restore/request.go b/pkg/restore/request.go index 452be4264..239d65df9 100644 --- a/pkg/restore/request.go +++ b/pkg/restore/request.go @@ -69,8 +69,9 @@ type Request struct { } type restoredItemStatus struct { - action string - itemExists bool + action string + itemExists bool + createdName string // Actual name assigned by K8s for GenerateName resources } // GetItemOperationsList returns ItemOperationsList, initializing it if necessary @@ -87,9 +88,15 @@ func (r *Request) GetItemOperationsList() *[]*itemoperation.RestoreOperation { func (r *Request) RestoredResourceList() map[string][]string { resources := map[string][]string{} for i, item := range r.RestoredItems { - entry := i.name + // Use createdName if available (GenerateName case), otherwise itemKey.name + name := i.name + if item.createdName != "" { + name = item.createdName + } + + entry := name if i.namespace != "" { - entry = fmt.Sprintf("%s/%s", i.namespace, i.name) + entry = fmt.Sprintf("%s/%s", i.namespace, name) } entry = fmt.Sprintf("%s(%s)", entry, item.action) resources[i.resource] = append(resources[i.resource], entry) diff --git a/pkg/restore/restore.go b/pkg/restore/restore.go index 7e0fe7f9a..8f0a75eb3 100644 --- a/pkg/restore/restore.go +++ b/pkg/restore/restore.go @@ -741,7 +741,7 @@ func (ctx *restoreContext) processSelectedResource( namespace: ns.Namespace, name: ns.Name, } - ctx.restoredItems[itemKey] = restoredItemStatus{action: ItemRestoreResultCreated, itemExists: true} + ctx.restoredItems[itemKey] = restoredItemStatus{action: ItemRestoreResultCreated, itemExists: true, createdName: ns.Name} } // Keep track of namespaces that we know exist so we don't @@ -1142,7 +1142,7 @@ func (ctx *restoreContext) restoreItem(obj *unstructured.Unstructured, groupReso namespace: nsToEnsure.Namespace, name: nsToEnsure.Name, } - ctx.restoredItems[itemKey] = restoredItemStatus{action: ItemRestoreResultCreated, itemExists: true} + ctx.restoredItems[itemKey] = restoredItemStatus{action: ItemRestoreResultCreated, itemExists: true, createdName: nsToEnsure.Name} } } else { if boolptr.IsSetToFalse(ctx.restore.Spec.IncludeClusterResources) { @@ -1514,7 +1514,11 @@ func (ctx *restoreContext) restoreItem(obj *unstructured.Unstructured, groupReso createdObj, restoreErr = resourceClient.Create(obj) if restoreErr == nil { itemExists = true - ctx.restoredItems[itemKey] = restoredItemStatus{action: ItemRestoreResultCreated, itemExists: itemExists} + ctx.restoredItems[itemKey] = restoredItemStatus{ + action: ItemRestoreResultCreated, + itemExists: itemExists, + createdName: createdObj.GetName(), + } } } diff --git a/pkg/restore/restore_test.go b/pkg/restore/restore_test.go index 54523731f..95b283cbe 100644 --- a/pkg/restore/restore_test.go +++ b/pkg/restore/restore_test.go @@ -1091,8 +1091,8 @@ func TestRestoreItems(t *testing.T) { ), }, expectedRestoreItems: map[itemKey]restoredItemStatus{ - {resource: "v1/Namespace", namespace: "", name: "ns-1"}: {action: "created", itemExists: true}, - {resource: "v1/Pod", namespace: "ns-1", name: "pod-1"}: {action: "created", itemExists: true}, + {resource: "v1/Namespace", namespace: "", name: "ns-1"}: {action: "created", itemExists: true, createdName: "ns-1"}, + {resource: "v1/Pod", namespace: "ns-1", name: "pod-1"}: {action: "created", itemExists: true, createdName: "pod-1"}, }, }, { @@ -1201,7 +1201,7 @@ func TestRestoreItems(t *testing.T) { test.ServiceAccounts(builder.ForServiceAccount("ns-1", "sa-1").Result()), }, expectedRestoreItems: map[itemKey]restoredItemStatus{ - {resource: "v1/Namespace", namespace: "", name: "ns-1"}: {action: "created", itemExists: true}, + {resource: "v1/Namespace", namespace: "", name: "ns-1"}: {action: "created", itemExists: true, createdName: "ns-1"}, {resource: "v1/ServiceAccount", namespace: "ns-1", name: "sa-1"}: {action: "skipped", itemExists: true}, }, }, @@ -1220,7 +1220,7 @@ func TestRestoreItems(t *testing.T) { test.Secrets(builder.ForSecret("ns-1", "sa-1").ObjectMeta(builder.WithLabels("velero.io/backup-name", "backup-1", "velero.io/restore-name", "restore-1")).Data(map[string][]byte{"key-1": []byte("value-1")}).Result()), }, expectedRestoreItems: map[itemKey]restoredItemStatus{ - {resource: "v1/Namespace", namespace: "", name: "ns-1"}: {action: "created", itemExists: true}, + {resource: "v1/Namespace", namespace: "", name: "ns-1"}: {action: "created", itemExists: true, createdName: "ns-1"}, {resource: "v1/Secret", namespace: "ns-1", name: "sa-1"}: {action: "updated", itemExists: true}, }, }, @@ -1239,7 +1239,7 @@ func TestRestoreItems(t *testing.T) { test.Secrets(builder.ForSecret("ns-1", "sa-1").ObjectMeta(builder.WithLabels("velero.io/backup-name", "backup-1", "velero.io/restore-name", "restore-1")).Data(map[string][]byte{"key-1": []byte("value-1")}).Result()), }, expectedRestoreItems: map[itemKey]restoredItemStatus{ - {resource: "v1/Namespace", namespace: "", name: "ns-1"}: {action: "created", itemExists: true}, + {resource: "v1/Namespace", namespace: "", name: "ns-1"}: {action: "created", itemExists: true, createdName: "ns-1"}, {resource: "v1/Secret", namespace: "ns-1", name: "sa-1"}: {action: "updated", itemExists: true}, }, },