From 6f7eb57e5862bd6eb312803d89252620b8fb8f91 Mon Sep 17 00:00:00 2001 From: Guillaume86 Date: Fri, 14 Mar 2025 21:24:23 +0100 Subject: [PATCH 1/2] derive controller name from prototype and allow custom name --- pkg/patterns/declarative/reconciler.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/pkg/patterns/declarative/reconciler.go b/pkg/patterns/declarative/reconciler.go index 263ca86c..51151bbd 100644 --- a/pkg/patterns/declarative/reconciler.go +++ b/pkg/patterns/declarative/reconciler.go @@ -106,10 +106,17 @@ func (e *ErrorResult) Error() string { var defaultApplier = applier.DefaultApplier func (r *Reconciler) Init(mgr manager.Manager, prototype DeclarativeObject, opts ...ReconcilerOption) error { + controllerName := "addon-controller" + if commonName, err := utils.GetCommonName(prototype); err == nil { + controllerName = commonName + "-controller" + } + + return r.InitWithName(mgr, prototype, controllerName, opts...) +} + +func (r *Reconciler) InitWithName(mgr manager.Manager, prototype DeclarativeObject, controllerName string, opts ...ReconcilerOption) error { r.prototype = prototype - // TODO: Can we derive the name from prototype? - controllerName := "addon-controller" r.recorder = mgr.GetEventRecorderFor(controllerName) r.client = mgr.GetClient() From 76c90bc62f521bbfde87c5657f77f1a86c44a62c Mon Sep 17 00:00:00 2001 From: Guillaume86 Date: Sat, 15 Mar 2025 17:14:02 +0100 Subject: [PATCH 2/2] add tests for GetCommonName --- pkg/patterns/addon/pkg/utils/helpers_test.go | 71 ++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 pkg/patterns/addon/pkg/utils/helpers_test.go diff --git a/pkg/patterns/addon/pkg/utils/helpers_test.go b/pkg/patterns/addon/pkg/utils/helpers_test.go new file mode 100644 index 00000000..5db7342a --- /dev/null +++ b/pkg/patterns/addon/pkg/utils/helpers_test.go @@ -0,0 +1,71 @@ +package utils + +import ( + "testing" + + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + addonsv1alpha1 "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon/pkg/apis/v1alpha1" +) + +type mockCommonObject struct { + addonsv1alpha1.CommonObject + name string +} + +func (m *mockCommonObject) ComponentName() string { + return m.name +} + +func TestGetCommonName(t *testing.T) { + type args struct { + instance runtime.Object + } + tests := []struct { + name string + args args + want string + wantErr bool + }{ + { + name: "CommonObject instance", + args: args{ + instance: &mockCommonObject{name: "test-component"}, + }, + want: "test-component", + wantErr: false, + }, + { + name: "Unstructured instance", + args: args{ + instance: &unstructured.Unstructured{ + Object: map[string]interface{}{ + "kind": "TestKind", + }, + }, + }, + want: "testkind", + wantErr: false, + }, + { + name: "Invalid instance", + args: args{ + instance: &runtime.Unknown{}, + }, + want: "", + wantErr: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := GetCommonName(tt.args.instance) + if (err != nil) != tt.wantErr { + t.Errorf("GetCommonName() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("GetCommonName() = %v, want %v", got, tt.want) + } + }) + } +}