Skip to content

Commit 319f706

Browse files
committed
Move Backup registry to nested struct
A registry configuration is now stored under a separated nested struct. Signed-off-by: Ales Raszka <[email protected]>
1 parent 4be0f98 commit 319f706

12 files changed

+154
-98
lines changed

apis/controller/v1alpha1/devworkspaceoperatorconfig_types.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,25 +72,30 @@ type CleanupCronJobConfig struct {
7272
Schedule string `json:"schedule,omitempty"`
7373
}
7474

75+
type RegistryConfig struct {
76+
// A registry where backup images are stored. Images are stored
77+
// in {registry}/backup-${DEVWORKSPACE_NAMESPACE}-${DEVWORKSPACE_NAME}
78+
// +kubebuilder:validation:Required
79+
Path string `json:"path,omitempty"`
80+
// AuthSecret is the name of a Kubernetes secret of
81+
// type kubernetes.io/dockerconfigjson
82+
// +kubebuilder:validation:Optional
83+
AuthSecret string `json:"authSecret,omitempty"`
84+
}
85+
7586
type BackupCronJobConfig struct {
7687
// Enable determines whether backup CronJobs should be created for workspace PVCs.
7788
// Defaults to false if not specified.
7889
// +kubebuilder:validation:Optional
7990
Enable *bool `json:"enable,omitempty"`
91+
// RegistryConfig defines the registry configuration where backup images are stored.
92+
// +kubebuilder:validation:Required
93+
Registry *RegistryConfig `json:"registry,omitempty"`
8094
// Schedule specifies the cron schedule for the backup cron job.
8195
// For example, "0 2 * * *" runs daily at 2 AM.
8296
// +kubebuilder:default:="0 2 * * *"
8397
// +kubebuilder:validation:Optional
8498
Schedule string `json:"schedule,omitempty"`
85-
// A registry where backup images are stored. Images are stored
86-
// in {registry}/backup-${DEVWORKSPACE_NAMESPACE}-${DEVWORKSPACE_NAME}
87-
// +kubebuilder:validation:Required
88-
Registry string `json:"registry,omitempty"`
89-
90-
// RegistryAuthSecret is the name of a Kubernetes secret of
91-
// type kubernetes.io/dockerconfigjson
92-
// +kubebuilder:validation:Optional
93-
RegistryAuthSecret string `json:"registryAuthSecret,omitempty"`
9499
}
95100

96101
type RoutingConfig struct {

apis/controller/v1alpha1/zz_generated.deepcopy.go

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

controllers/backupcronjob/backupcronjob_controller.go

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package controllers
1717

1818
import (
1919
"context"
20+
"reflect"
2021

2122
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
2223
"sigs.k8s.io/controller-runtime/pkg/reconcile"
@@ -72,27 +73,7 @@ func shouldReconcileOnUpdate(e event.UpdateEvent, log logr.Logger) bool {
7273
oldBackup := oldConfig.Config.Workspace.BackupCronJob
7374
newBackup := newConfig.Config.Workspace.BackupCronJob
7475

75-
if oldBackup == nil && newBackup == nil {
76-
return false
77-
}
78-
if (oldBackup == nil && newBackup != nil) || (oldBackup != nil && newBackup == nil) {
79-
return true
80-
}
81-
if !ptr.Equal(oldBackup.Enable, newBackup.Enable) {
82-
return true
83-
}
84-
85-
if oldBackup.Schedule != newBackup.Schedule {
86-
return true
87-
}
88-
if oldBackup.Registry != newBackup.Registry {
89-
return true
90-
}
91-
if oldBackup.RegistryAuthSecret != newBackup.RegistryAuthSecret {
92-
return true
93-
}
94-
95-
return false
76+
return !reflect.DeepEqual(oldBackup, newBackup)
9677
}
9778

9879
// SetupWithManager sets up the controller with the Manager.
@@ -282,16 +263,16 @@ func (r *BackupCronJobReconciler) executeBackupSync(ctx context.Context, dwOpera
282263

283264
func (r *BackupCronJobReconciler) getRegistryAuthSecret(ctx context.Context, dwOperatorConfig *controllerv1alpha1.DevWorkspaceOperatorConfig, log logr.Logger) (*corev1.Secret, error) {
284265
registryAuthSecret := &corev1.Secret{}
285-
if dwOperatorConfig.Config.Workspace.BackupCronJob.RegistryAuthSecret != "" {
266+
if dwOperatorConfig.Config.Workspace.BackupCronJob.Registry.AuthSecret != "" {
286267
err := r.NonCachingClient.Get(ctx, client.ObjectKey{
287-
Name: dwOperatorConfig.Config.Workspace.BackupCronJob.RegistryAuthSecret,
268+
Name: dwOperatorConfig.Config.Workspace.BackupCronJob.Registry.AuthSecret,
288269
Namespace: dwOperatorConfig.Namespace,
289270
}, registryAuthSecret)
290271
if err != nil {
291-
log.Error(err, "Failed to get registry auth secret for backup job", "secretName", dwOperatorConfig.Config.Workspace.BackupCronJob.RegistryAuthSecret)
272+
log.Error(err, "Failed to get registry auth secret for backup job", "secretName", dwOperatorConfig.Config.Workspace.BackupCronJob.Registry.AuthSecret)
292273
return nil, err
293274
}
294-
log.Info("Successfully retrieved registry auth secret for backup job", "secretName", dwOperatorConfig.Config.Workspace.BackupCronJob.RegistryAuthSecret)
275+
log.Info("Successfully retrieved registry auth secret for backup job", "secretName", dwOperatorConfig.Config.Workspace.BackupCronJob.Registry.AuthSecret)
295276
return registryAuthSecret, nil
296277
}
297278
return nil, nil
@@ -384,7 +365,7 @@ func (r *BackupCronJobReconciler) createBackupJob(
384365
},
385366
{Name: "STORAGE_DRIVER", Value: "overlay"},
386367
{Name: "BUILDAH_ISOLATION", Value: "chroot"},
387-
{Name: "DEVWORKSPACE_BACKUP_REGISTRY", Value: backUpConfig.Registry},
368+
{Name: "DEVWORKSPACE_BACKUP_REGISTRY", Value: backUpConfig.Registry.Path},
388369
{Name: "BUILDAH_PUSH_OPTIONS", Value: "--tls-verify=false"},
389370
},
390371
Image: images.GetProjectBackupImage(),

controllers/backupcronjob/backupcronjob_controller_test.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -308,10 +308,12 @@ var _ = Describe("BackupCronJobReconciler", func() {
308308
Config: &controllerv1alpha1.OperatorConfiguration{
309309
Workspace: &controllerv1alpha1.WorkspaceConfig{
310310
BackupCronJob: &controllerv1alpha1.BackupCronJobConfig{
311-
Enable: &enabled,
312-
Schedule: schedule,
313-
Registry: "my-registry:5000",
314-
RegistryAuthSecret: "my-secret",
311+
Enable: &enabled,
312+
Schedule: schedule,
313+
Registry: &controllerv1alpha1.RegistryConfig{
314+
Path: "my-registry:5000",
315+
AuthSecret: "my-secret",
316+
},
315317
},
316318
},
317319
},
@@ -444,6 +446,11 @@ var _ = Describe("DevWorkspaceOperatorConfig UpdateFunc Tests", func() {
444446
&controllerv1alpha1.BackupCronJobConfig{Schedule: "1 * * * *"},
445447
true,
446448
),
449+
Entry("Registry differs => changed",
450+
&controllerv1alpha1.BackupCronJobConfig{Registry: &controllerv1alpha1.RegistryConfig{Path: "fake"}},
451+
&controllerv1alpha1.BackupCronJobConfig{Registry: &controllerv1alpha1.RegistryConfig{Path: "fake-different"}},
452+
true,
453+
),
447454
Entry("All fields match => no change",
448455
&controllerv1alpha1.BackupCronJobConfig{
449456
Enable: pointer.Bool(true),

deploy/bundle/manifests/controller.devfile.io_devworkspaceoperatorconfigs.yaml

Lines changed: 15 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/deployment/kubernetes/combined.yaml

Lines changed: 16 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/deployment/kubernetes/objects/devworkspaceoperatorconfigs.controller.devfile.io.CustomResourceDefinition.yaml

Lines changed: 16 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/deployment/openshift/combined.yaml

Lines changed: 16 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/deployment/openshift/objects/devworkspaceoperatorconfigs.controller.devfile.io.CustomResourceDefinition.yaml

Lines changed: 16 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/templates/crd/bases/controller.devfile.io_devworkspaceoperatorconfigs.yaml

Lines changed: 16 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)