Skip to content

Commit 588404d

Browse files
committed
feat(controller): expose bucket class on BucketClaim Workloads
Signed-off-by: harshitrwt <[email protected]>
1 parent 10554f9 commit 588404d

2 files changed

Lines changed: 71 additions & 0 deletions

File tree

‎internal/controller/workloadmonitor_controller.go‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,10 @@ func (r *WorkloadMonitorReconciler) reconcileBucketClaimForMonitor(
328328
}
329329
workload.Labels[workloadMonitorLabel] = monitor.Name
330330

331+
if bc.Spec.BucketClassName != "" {
332+
workload.Labels["workloads.cozystack.io/bucket-class"] = bc.Spec.BucketClassName
333+
}
334+
331335
// Start from the sizes already recorded on the Workload: when the
332336
// metrics endpoint is unreachable or reports nothing for this bucket,
333337
// the last known good values must survive rather than collapse to

‎internal/controller/workloadmonitor_controller_test.go‎

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,73 @@ func TestReconcileBucketClaimCreatesWorkload(t *testing.T) {
462462
}
463463
}
464464

465+
func TestReconcileBucketClaim_BucketClassLabelPropagated(t *testing.T) {
466+
s := newTestScheme()
467+
468+
monitor := &cozyv1alpha1.WorkloadMonitor{
469+
ObjectMeta: metav1.ObjectMeta{
470+
Name: "my-bucket",
471+
Namespace: "tenant-demo",
472+
},
473+
Spec: cozyv1alpha1.WorkloadMonitorSpec{
474+
Kind: "bucket",
475+
Type: "s3",
476+
Selector: map[string]string{
477+
"app.kubernetes.io/instance": "my-bucket",
478+
},
479+
},
480+
}
481+
482+
bc := &cosiv1alpha1.BucketClaim{
483+
ObjectMeta: metav1.ObjectMeta{
484+
Name: "my-bucket",
485+
Namespace: "tenant-demo",
486+
Labels: map[string]string{
487+
"app.kubernetes.io/instance": "my-bucket",
488+
},
489+
},
490+
Spec: cosiv1alpha1.BucketClaimSpec{
491+
BucketClassName: "seaweedfs-encrypted",
492+
Protocols: []cosiv1alpha1.Protocol{cosiv1alpha1.ProtocolS3},
493+
},
494+
Status: cosiv1alpha1.BucketClaimStatus{
495+
BucketReady: true,
496+
BucketName: "cosi-abc123",
497+
},
498+
}
499+
500+
fakeClient := fake.NewClientBuilder().
501+
WithScheme(s).
502+
WithObjects(monitor, bc).
503+
WithStatusSubresource(monitor).
504+
Build()
505+
506+
reconciler := &WorkloadMonitorReconciler{Client: fakeClient, Scheme: s}
507+
req := reconcile.Request{NamespacedName: types.NamespacedName{
508+
Name: "my-bucket",
509+
Namespace: "tenant-demo",
510+
}}
511+
512+
_, err := reconciler.Reconcile(context.TODO(), req)
513+
if err != nil {
514+
t.Fatalf("Reconcile returned error: %v", err)
515+
}
516+
517+
workload := &cozyv1alpha1.Workload{}
518+
err = fakeClient.Get(context.TODO(), types.NamespacedName{
519+
Name: "bucket-my-bucket",
520+
Namespace: "tenant-demo",
521+
}, workload)
522+
if err != nil {
523+
t.Fatalf("expected Workload to be created, got error: %v", err)
524+
}
525+
526+
got := workload.Labels["workloads.cozystack.io/bucket-class"]
527+
if got != "seaweedfs-encrypted" {
528+
t.Errorf("expected workloads.cozystack.io/bucket-class=%q, got %q", "seaweedfs-encrypted", got)
529+
}
530+
}
531+
465532
func TestReconcileBucketClaimNotReady(t *testing.T) {
466533
s := newTestScheme()
467534

0 commit comments

Comments
 (0)