Skip to content

Commit c4a958c

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 c4a958c

12 files changed

+175
-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: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ var _ = Describe("BackupCronJobReconciler", func() {
110110
BackupCronJob: &controllerv1alpha1.BackupCronJobConfig{
111111
Enable: pointer.Bool(true),
112112
Schedule: "* * * * *",
113+
Registry: &controllerv1alpha1.RegistryConfig{
114+
Path: "fake-registy",
115+
},
113116
},
114117
},
115118
},
@@ -134,6 +137,9 @@ var _ = Describe("BackupCronJobReconciler", func() {
134137
BackupCronJob: &controllerv1alpha1.BackupCronJobConfig{
135138
Enable: &enabled,
136139
Schedule: schedule,
140+
Registry: &controllerv1alpha1.RegistryConfig{
141+
Path: "fake-registy",
142+
},
137143
},
138144
},
139145
},
@@ -156,6 +162,9 @@ var _ = Describe("BackupCronJobReconciler", func() {
156162
BackupCronJob: &controllerv1alpha1.BackupCronJobConfig{
157163
Enable: &enabled,
158164
Schedule: schedule1,
165+
Registry: &controllerv1alpha1.RegistryConfig{
166+
Path: "fake-registy",
167+
},
159168
},
160169
},
161170
},
@@ -189,6 +198,9 @@ var _ = Describe("BackupCronJobReconciler", func() {
189198
BackupCronJob: &controllerv1alpha1.BackupCronJobConfig{
190199
Enable: &enabled,
191200
Schedule: schedule,
201+
Registry: &controllerv1alpha1.RegistryConfig{
202+
Path: "fake-registy",
203+
},
192204
},
193205
},
194206
},
@@ -221,6 +233,9 @@ var _ = Describe("BackupCronJobReconciler", func() {
221233
BackupCronJob: &controllerv1alpha1.BackupCronJobConfig{
222234
Enable: &enabled,
223235
Schedule: schedule,
236+
Registry: &controllerv1alpha1.RegistryConfig{
237+
Path: "fake-registy",
238+
},
224239
},
225240
},
226241
},
@@ -251,6 +266,9 @@ var _ = Describe("BackupCronJobReconciler", func() {
251266
BackupCronJob: &controllerv1alpha1.BackupCronJobConfig{
252267
Enable: &enabled,
253268
Schedule: schedule,
269+
Registry: &controllerv1alpha1.RegistryConfig{
270+
Path: "fake-registy",
271+
},
254272
},
255273
},
256274
},
@@ -283,6 +301,9 @@ var _ = Describe("BackupCronJobReconciler", func() {
283301
BackupCronJob: &controllerv1alpha1.BackupCronJobConfig{
284302
Enable: &enabled,
285303
Schedule: schedule,
304+
Registry: &controllerv1alpha1.RegistryConfig{
305+
Path: "fake-registy",
306+
},
286307
},
287308
},
288309
},
@@ -308,10 +329,12 @@ var _ = Describe("BackupCronJobReconciler", func() {
308329
Config: &controllerv1alpha1.OperatorConfiguration{
309330
Workspace: &controllerv1alpha1.WorkspaceConfig{
310331
BackupCronJob: &controllerv1alpha1.BackupCronJobConfig{
311-
Enable: &enabled,
312-
Schedule: schedule,
313-
Registry: "my-registry:5000",
314-
RegistryAuthSecret: "my-secret",
332+
Enable: &enabled,
333+
Schedule: schedule,
334+
Registry: &controllerv1alpha1.RegistryConfig{
335+
Path: "my-registry:5000",
336+
AuthSecret: "my-secret",
337+
},
315338
},
316339
},
317340
},
@@ -444,6 +467,11 @@ var _ = Describe("DevWorkspaceOperatorConfig UpdateFunc Tests", func() {
444467
&controllerv1alpha1.BackupCronJobConfig{Schedule: "1 * * * *"},
445468
true,
446469
),
470+
Entry("Registry differs => changed",
471+
&controllerv1alpha1.BackupCronJobConfig{Registry: &controllerv1alpha1.RegistryConfig{Path: "fake"}},
472+
&controllerv1alpha1.BackupCronJobConfig{Registry: &controllerv1alpha1.RegistryConfig{Path: "fake-different"}},
473+
true,
474+
),
447475
Entry("All fields match => no change",
448476
&controllerv1alpha1.BackupCronJobConfig{
449477
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.

0 commit comments

Comments
 (0)