Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion controllers/mgmtcluster_classifier_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ import (
// no deployment to managed clusters is needed.
type ManagementClusterClassifierReconciler struct {
client.Client
Scheme *runtime.Scheme
Scheme *runtime.Scheme
ShardKey string // when set, only the default (unsharded) deployment reconciles
// Mux guards GVKToClassifiers and other in-memory state.
Mux sync.Mutex

Expand All @@ -75,6 +76,13 @@ type ManagementClusterClassifierReconciler struct {
//+kubebuilder:rbac:groups=lib.projectsveltos.io,resources=managementclusterclassifierreports/status,verbs=get;update;patch

func (r *ManagementClusterClassifierReconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ ctrl.Result, reterr error) {
if r.ShardKey != "" {
// Only the default classifier deployment reconciles ManagementClusterClassifiers.
// Unlike Classifier, this resource is evaluated entirely against the management
// cluster itself, so sharded deployments have no role to play for it.
return reconcile.Result{}, nil
}

logger := ctrl.LoggerFrom(ctx)
logger.V(logs.LogDebug).Info("Reconciling")

Expand Down
33 changes: 33 additions & 0 deletions controllers/mgmtcluster_classifier_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
"k8s.io/klog/v2/textlogger"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client/fake"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"

libsveltosv1beta1 "github.com/projectsveltos/libsveltos/api/v1beta1"

Expand Down Expand Up @@ -209,6 +211,37 @@ end
})
})

Context("Reconcile", func() {
It("no-ops when ShardKey is set, leaving the ManagementClusterClassifier untouched", func() {
mcc := &libsveltosv1beta1.ManagementClusterClassifier{
ObjectMeta: metav1.ObjectMeta{Name: randomString()},
Spec: libsveltosv1beta1.ManagementClusterClassifierSpec{
ClassifierLabels: []libsveltosv1beta1.ClassifierLabel{
{Key: testLabelEnv, Value: testValueProd},
},
},
}

fakeClient := fake.NewClientBuilder().
WithScheme(mgmtTestScheme()).
WithObjects(mcc).
Build()

reconciler := &controllers.ManagementClusterClassifierReconciler{
Client: fakeClient,
ShardKey: "shard1",
}

_, err := reconciler.Reconcile(context.TODO(),
ctrl.Request{NamespacedName: types.NamespacedName{Name: mcc.Name}})
Expect(err).ToNot(HaveOccurred())

current := &libsveltosv1beta1.ManagementClusterClassifier{}
Expect(fakeClient.Get(context.TODO(), types.NamespacedName{Name: mcc.Name}, current)).To(Succeed())
Expect(controllerutil.ContainsFinalizer(current, libsveltosv1beta1.ManagementClusterClassifierFinalizer)).To(BeFalse())
})
})

Context("classifierLabelKeys", func() {
It("returns all keys from ClassifierLabel slice", func() {
labels := []libsveltosv1beta1.ClassifierLabel{
Expand Down
1 change: 1 addition & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,7 @@ func getMgmtClassifierReconciler(mgr manager.Manager) *controllers.ManagementClu
return &controllers.ManagementClusterClassifierReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
ShardKey: shardKey,
GVKToClassifiers: make(map[schema.GroupVersionKind]*libsveltosset.Set),
Logger: ctrl.Log.WithName("managementclusterclassifierreconciler"),
}
Expand Down