diff --git a/changelogs/unreleased/4550-dbrekau b/changelogs/unreleased/4550-dbrekau new file mode 100644 index 000000000..dea16b567 --- /dev/null +++ b/changelogs/unreleased/4550-dbrekau @@ -0,0 +1 @@ +Fix: OrderedResources in Schedules diff --git a/pkg/cmd/cli/backup/create.go b/pkg/cmd/cli/backup/create.go index e0eb06b5c..f2d165df5 100644 --- a/pkg/cmd/cli/backup/create.go +++ b/pkg/cmd/cli/backup/create.go @@ -291,11 +291,11 @@ func (o *CreateOptions) Run(c *cobra.Command, f client.Factory) error { return nil } -// parseOrderedResources converts to map of Kinds to an ordered list of specific resources of that Kind. +// ParseOrderedResources converts to map of Kinds to an ordered list of specific resources of that Kind. // Resource names in the list are in format 'namespace/resourcename' and separated by commas. // Key-value pairs in the mapping are separated by semi-colon. // Ex: 'pods=ns1/pod1,ns1/pod2;persistentvolumeclaims=ns1/pvc4,ns1/pvc8'. -func parseOrderedResources(orderMapStr string) (map[string]string, error) { +func ParseOrderedResources(orderMapStr string) (map[string]string, error) { entries := strings.Split(orderMapStr, ";") if len(entries) == 0 { return nil, fmt.Errorf("Invalid OrderedResources '%s'.", orderMapStr) @@ -337,7 +337,7 @@ func (o *CreateOptions) BuildBackup(namespace string) (*velerov1api.Backup, erro StorageLocation(o.StorageLocation). VolumeSnapshotLocations(o.SnapshotLocations...) if len(o.OrderedResources) > 0 { - orders, err := parseOrderedResources(o.OrderedResources) + orders, err := ParseOrderedResources(o.OrderedResources) if err != nil { return nil, err } diff --git a/pkg/cmd/cli/backup/create_test.go b/pkg/cmd/cli/backup/create_test.go index ec6236994..401e93e47 100644 --- a/pkg/cmd/cli/backup/create_test.go +++ b/pkg/cmd/cli/backup/create_test.go @@ -34,7 +34,7 @@ func TestCreateOptions_BuildBackup(t *testing.T) { o := NewCreateOptions() o.Labels.Set("velero.io/test=true") o.OrderedResources = "pods=p1,p2;persistentvolumeclaims=pvc1,pvc2" - orders, err := parseOrderedResources(o.OrderedResources) + orders, err := ParseOrderedResources(o.OrderedResources) assert.NoError(t, err) backup, err := o.BuildBackup(testNamespace) @@ -100,10 +100,10 @@ func TestCreateOptions_BuildBackupFromSchedule(t *testing.T) { } func TestCreateOptions_OrderedResources(t *testing.T) { - orderedResources, err := parseOrderedResources("pods= ns1/p1; ns1/p2; persistentvolumeclaims=ns2/pvc1, ns2/pvc2") + orderedResources, err := ParseOrderedResources("pods= ns1/p1; ns1/p2; persistentvolumeclaims=ns2/pvc1, ns2/pvc2") assert.NotNil(t, err) - orderedResources, err = parseOrderedResources("pods= ns1/p1,ns1/p2 ; persistentvolumeclaims=ns2/pvc1,ns2/pvc2") + orderedResources, err = ParseOrderedResources("pods= ns1/p1,ns1/p2 ; persistentvolumeclaims=ns2/pvc1,ns2/pvc2") assert.NoError(t, err) expectedResources := map[string]string{ @@ -112,7 +112,7 @@ func TestCreateOptions_OrderedResources(t *testing.T) { } assert.Equal(t, orderedResources, expectedResources) - orderedResources, err = parseOrderedResources("pods= ns1/p1,ns1/p2 ; persistentvolumes=pv1,pv2") + orderedResources, err = ParseOrderedResources("pods= ns1/p1,ns1/p2 ; persistentvolumes=pv1,pv2") assert.NoError(t, err) expectedMixedResources := map[string]string{ diff --git a/pkg/cmd/cli/schedule/create.go b/pkg/cmd/cli/schedule/create.go index 7a4971aa7..5e15ac6bc 100644 --- a/pkg/cmd/cli/schedule/create.go +++ b/pkg/cmd/cli/schedule/create.go @@ -111,11 +111,20 @@ func (o *CreateOptions) Complete(args []string, f client.Factory) error { } func (o *CreateOptions) Run(c *cobra.Command, f client.Factory) error { + var orders map[string]string + veleroClient, err := f.Client() if err != nil { return err } + if len(o.BackupOptions.OrderedResources) > 0 { + orders, err = backup.ParseOrderedResources(o.BackupOptions.OrderedResources) + if err != nil { + return err + } + } + schedule := &api.Schedule{ ObjectMeta: metav1.ObjectMeta{ Namespace: f.Namespace(), @@ -135,6 +144,7 @@ func (o *CreateOptions) Run(c *cobra.Command, f client.Factory) error { StorageLocation: o.BackupOptions.StorageLocation, VolumeSnapshotLocations: o.BackupOptions.SnapshotLocations, DefaultVolumesToRestic: o.BackupOptions.DefaultVolumesToRestic.Value, + OrderedResources: orders, }, Schedule: o.Schedule, UseOwnerReferencesInBackup: &o.UseOwnerReferencesInBackup,