diff --git a/pkg/backup/request.go b/pkg/backup/request.go index 5ec9bc778..a44c8f00e 100644 --- a/pkg/backup/request.go +++ b/pkg/backup/request.go @@ -18,6 +18,7 @@ package backup import ( "fmt" + "sort" velerov1api "github.com/heptio/velero/pkg/apis/velero/v1" "github.com/heptio/velero/pkg/util/collections" @@ -58,5 +59,11 @@ func (r *Request) BackupResourceList() map[string][]string { } resources[i.resource] = append(resources[i.resource], entry) } + + // sort namespace/name entries for each GVK + for _, v := range resources { + sort.Strings(v) + } + return resources } diff --git a/pkg/backup/request_test.go b/pkg/backup/request_test.go index f37434059..9b04f0b53 100644 --- a/pkg/backup/request_test.go +++ b/pkg/backup/request_test.go @@ -50,9 +50,33 @@ func TestRequest_BackupResourceList(t *testing.T) { } req := Request{BackedUpItems: backedUpItems} - assert.Equal(t, req.BackupResourceList(), map[string][]string{ + assert.Equal(t, map[string][]string{ "apps/v1/Deployment": {"default/my-deploy"}, "v1/Pod": {"ns1/pod1", "ns2/pod2"}, "v1/PersistentVolume": {"my-pv"}, - }) + }, req.BackupResourceList()) +} + +func TestRequest_BackupResourceListEntriesSorted(t *testing.T) { + items := []itemKey{ + { + resource: "v1/Pod", + name: "pod2", + namespace: "ns2", + }, + { + resource: "v1/Pod", + name: "pod1", + namespace: "ns1", + }, + } + backedUpItems := map[itemKey]struct{}{} + for _, it := range items { + backedUpItems[it] = struct{}{} + } + + req := Request{BackedUpItems: backedUpItems} + assert.Equal(t, map[string][]string{ + "v1/Pod": {"ns1/pod1", "ns2/pod2"}, + }, req.BackupResourceList()) }