mirror of
https://github.com/clastix/kamaji.git
synced 2026-02-14 10:00:02 +00:00
* feat(api): kubeconfig generator Signed-off-by: Dario Tranchitella <dario@tranchitella.eu> * refactor: abstracting enqueue to channel function Signed-off-by: Dario Tranchitella <dario@tranchitella.eu> * fix: avoiding multiple context registration Signed-off-by: Dario Tranchitella <dario@tranchitella.eu> * feat: kubeconfig generator Signed-off-by: Dario Tranchitella <dario@tranchitella.eu> * docs: kubeconfig generator Signed-off-by: Dario Tranchitella <dario@tranchitella.eu> * feat(helm): deployment for kubeconfig generator Signed-off-by: Dario Tranchitella <dario@tranchitella.eu> --------- Signed-off-by: Dario Tranchitella <dario@tranchitella.eu>
76 lines
2.0 KiB
Go
76 lines
2.0 KiB
Go
// Copyright 2022 Clastix Labs
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package controllers
|
|
|
|
import (
|
|
"context"
|
|
|
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/labels"
|
|
ctrl "sigs.k8s.io/controller-runtime"
|
|
"sigs.k8s.io/controller-runtime/pkg/client"
|
|
"sigs.k8s.io/controller-runtime/pkg/event"
|
|
"sigs.k8s.io/controller-runtime/pkg/log"
|
|
"sigs.k8s.io/controller-runtime/pkg/manager"
|
|
|
|
kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1"
|
|
)
|
|
|
|
type KubeconfigGeneratorWatcher struct {
|
|
Client client.Client
|
|
GeneratorChan chan event.GenericEvent
|
|
}
|
|
|
|
func (r *KubeconfigGeneratorWatcher) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
|
|
logger := log.FromContext(ctx)
|
|
|
|
logger.Info("reconciling resource")
|
|
|
|
var tcp kamajiv1alpha1.TenantControlPlane
|
|
if err := r.Client.Get(ctx, req.NamespacedName, &tcp); err != nil {
|
|
if apierrors.IsNotFound(err) {
|
|
logger.Info("resource may have been deleted, skipping")
|
|
|
|
return ctrl.Result{}, nil
|
|
}
|
|
|
|
logger.Error(err, "cannot retrieve the required resource")
|
|
|
|
return ctrl.Result{}, err
|
|
}
|
|
|
|
var generators kamajiv1alpha1.KubeconfigGeneratorList
|
|
if err := r.Client.List(ctx, &generators); err != nil {
|
|
logger.Error(err, "cannot list generators")
|
|
|
|
return ctrl.Result{}, err
|
|
}
|
|
|
|
for _, generator := range generators.Items {
|
|
sel, err := metav1.LabelSelectorAsSelector(&generator.Spec.TenantControlPlaneSelector)
|
|
if err != nil {
|
|
logger.Error(err, "cannot validate Selector", "generator", generator.Name)
|
|
|
|
return ctrl.Result{}, err
|
|
}
|
|
|
|
if sel.Matches(labels.Set(tcp.Labels)) {
|
|
logger.Info("pushing Generator", "generator", generator.Name)
|
|
|
|
r.GeneratorChan <- event.GenericEvent{
|
|
Object: &generator,
|
|
}
|
|
}
|
|
}
|
|
|
|
return ctrl.Result{}, nil
|
|
}
|
|
|
|
func (r *KubeconfigGeneratorWatcher) SetupWithManager(mgr manager.Manager) error {
|
|
return ctrl.NewControllerManagedBy(mgr).
|
|
For(&kamajiv1alpha1.TenantControlPlane{}).
|
|
Complete(r)
|
|
}
|