diff --git a/pkg/cmd/server/server.go b/pkg/cmd/server/server.go index 182c10853..a9b9ab658 100644 --- a/pkg/cmd/server/server.go +++ b/pkg/cmd/server/server.go @@ -451,6 +451,7 @@ func (s *server) runControllers(config *api.Config) error { s.backupService, config.BackupStorageProvider.Bucket, config.BackupSyncPeriod.Duration, + s.namespace, s.logger, ) wg.Add(1) diff --git a/pkg/controller/backup_sync_controller.go b/pkg/controller/backup_sync_controller.go index a36403137..638d93e21 100644 --- a/pkg/controller/backup_sync_controller.go +++ b/pkg/controller/backup_sync_controller.go @@ -37,6 +37,7 @@ type backupSyncController struct { backupService cloudprovider.BackupService bucket string syncPeriod time.Duration + namespace string logger logrus.FieldLogger } @@ -45,6 +46,7 @@ func NewBackupSyncController( backupService cloudprovider.BackupService, bucket string, syncPeriod time.Duration, + namespace string, logger logrus.FieldLogger, ) Interface { if syncPeriod < time.Minute { @@ -56,6 +58,7 @@ func NewBackupSyncController( backupService: backupService, bucket: bucket, syncPeriod: syncPeriod, + namespace: namespace, logger: logger, } } @@ -88,6 +91,7 @@ func (c *backupSyncController) run() { // faster than the sync finishes. Just process them as we find them. cloudBackup.Finalizers = stringslice.Except(cloudBackup.Finalizers, gcFinalizer) + cloudBackup.Namespace = c.namespace cloudBackup.ResourceVersion = "" if _, err := c.client.Backups(cloudBackup.Namespace).Create(cloudBackup); err != nil && !kuberrs.IsAlreadyExists(err) { logContext.WithError(errors.WithStack(err)).Error("Error syncing backup from object storage") diff --git a/pkg/controller/backup_sync_controller_test.go b/pkg/controller/backup_sync_controller_test.go index f1b5dc6be..7738585ec 100644 --- a/pkg/controller/backup_sync_controller_test.go +++ b/pkg/controller/backup_sync_controller_test.go @@ -36,6 +36,7 @@ func TestBackupSyncControllerRun(t *testing.T) { name string getAllBackupsError error cloudBackups []*v1.Backup + namespace string }{ { name: "no cloud backups", @@ -49,20 +50,31 @@ func TestBackupSyncControllerRun(t *testing.T) { cloudBackups: []*v1.Backup{ arktest.NewTestBackup().WithNamespace("ns-1").WithName("backup-1").Backup, arktest.NewTestBackup().WithNamespace("ns-1").WithName("backup-2").Backup, - arktest.NewTestBackup().WithNamespace("ns-2").WithName("backup-3").Backup, + arktest.NewTestBackup().WithNamespace("ns-1").WithName("backup-3").Backup, }, + namespace: "ns-1", }, { name: "Finalizer gets removed on sync", cloudBackups: []*v1.Backup{ arktest.NewTestBackup().WithNamespace("ns-1").WithFinalizers(gcFinalizer).Backup, }, + namespace: "ns-1", }, { name: "Only target finalizer is removed", cloudBackups: []*v1.Backup{ arktest.NewTestBackup().WithNamespace("ns-1").WithFinalizers(gcFinalizer, "blah").Backup, }, + namespace: "ns-1", + }, + { + name: "backups get created in Ark server's namespace", + cloudBackups: []*v1.Backup{ + arktest.NewTestBackup().WithNamespace("ns-1").WithName("backup-1").Backup, + arktest.NewTestBackup().WithNamespace("ns-2").WithName("backup-2").Backup, + }, + namespace: "heptio-ark", }, } @@ -79,6 +91,7 @@ func TestBackupSyncControllerRun(t *testing.T) { bs, "bucket", time.Duration(0), + test.namespace, logger, ).(*backupSyncController) @@ -92,9 +105,10 @@ func TestBackupSyncControllerRun(t *testing.T) { for _, cloudBackup := range test.cloudBackups { // Verify that the run function stripped the GC finalizer assert.False(t, stringslice.Has(cloudBackup.Finalizers, gcFinalizer)) + assert.Equal(t, test.namespace, cloudBackup.Namespace) action := core.NewCreateAction( v1.SchemeGroupVersion.WithResource("backups"), - cloudBackup.Namespace, + test.namespace, cloudBackup, )