From 5b5a12ba51dcf465d0e11cddb44c8e1fd502d7fd Mon Sep 17 00:00:00 2001 From: Amir Blum Date: Fri, 10 Jan 2025 20:53:14 +0200 Subject: [PATCH] chore: remove unused odigos config controller (#2177) The controller for the instrumentation config was needed for old language detection which was triggered from instrumentor. New language detection will be triggered once when the instrumentation config is first created, and use whatever values are in the config at this time. Hence this controller can be removed --- .../controllers/startlangdetection/manager.go | 15 --- .../odigosconfig_controller.go | 96 ------------------- k8sutils/pkg/predicate/cm_changed.go | 45 --------- 3 files changed, 156 deletions(-) delete mode 100644 instrumentor/controllers/startlangdetection/odigosconfig_controller.go delete mode 100644 k8sutils/pkg/predicate/cm_changed.go diff --git a/instrumentor/controllers/startlangdetection/manager.go b/instrumentor/controllers/startlangdetection/manager.go index 027a43bcbb..841c66cb3a 100644 --- a/instrumentor/controllers/startlangdetection/manager.go +++ b/instrumentor/controllers/startlangdetection/manager.go @@ -1,12 +1,10 @@ package startlangdetection import ( - odigospredicate "github.com/odigos-io/odigos/k8sutils/pkg/predicate" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" - "sigs.k8s.io/controller-runtime/pkg/predicate" ) func SetupWithManager(mgr ctrl.Manager) error { @@ -61,18 +59,5 @@ func SetupWithManager(mgr ctrl.Manager) error { return err } - err = builder. - ControllerManagedBy(mgr). - Named("startlangdetection-configmaps"). - For(&corev1.ConfigMap{}). - WithEventFilter(predicate.And(odigospredicate.OdigosEffectiveConfigMapPredicate, odigospredicate.ConfigMapDataChangedPredicate{})). - Complete(&OdigosConfigReconciler{ - Client: mgr.GetClient(), - Scheme: mgr.GetScheme(), - }) - if err != nil { - return err - } - return nil } diff --git a/instrumentor/controllers/startlangdetection/odigosconfig_controller.go b/instrumentor/controllers/startlangdetection/odigosconfig_controller.go deleted file mode 100644 index 3b6de2078c..0000000000 --- a/instrumentor/controllers/startlangdetection/odigosconfig_controller.go +++ /dev/null @@ -1,96 +0,0 @@ -package startlangdetection - -import ( - "context" - - "github.com/odigos-io/odigos/k8sutils/pkg/workload" - - appsv1 "k8s.io/api/apps/v1" - apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime" - ctrl "sigs.k8s.io/controller-runtime" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/log" -) - -// This reconiler is responsible for recalculating the instrumented application for potential changes of ignored container list, -// and trigger runtime detection. -type OdigosConfigReconciler struct { - client.Client - Scheme *runtime.Scheme -} - -func (r *OdigosConfigReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { - // TODO: this logic can be improved by iterating over the instrumentation configs and marking the invalidate flag - // we currently no changing this logic because all the runtime detection logic is still under development - logger := log.FromContext(ctx) - logger.V(0).Info("Odigos Configuration changed, recalculating instrumentated application for potential changes of ignored container list") - - var deps appsv1.DeploymentList - err := r.Client.List(ctx, &deps) - if client.IgnoreNotFound(err) != nil { - logger.Error(err, "error fetching deployments") - return ctrl.Result{}, err - } - - for _, dep := range deps.Items { - err := r.reconcileUnDisabledFreshWorkload(ctx, workload.WorkloadKindDeployment, client.ObjectKey{Name: dep.Name, Namespace: dep.Namespace}) - if err != nil { - logger.Error(err, "error requesting runtime details from odiglets", "name", dep.Name, "namespace", dep.Namespace) - } - } - - var sts appsv1.StatefulSetList - err = r.Client.List(ctx, &sts) - if client.IgnoreNotFound(err) != nil { - logger.Error(err, "error fetching statefulsets") - return ctrl.Result{}, err - } - - for _, st := range sts.Items { - err := r.reconcileUnDisabledFreshWorkload(ctx, workload.WorkloadKindStatefulSet, client.ObjectKey{Name: st.Name, Namespace: st.Namespace}) - if err != nil { - logger.Error(err, "error requesting runtime details from odiglets", "name", st.Name, "namespace", st.Namespace) - } - } - - var dss appsv1.DaemonSetList - err = r.Client.List(ctx, &dss) - if client.IgnoreNotFound(err) != nil { - logger.Error(err, "error fetching daemonsets") - return ctrl.Result{}, err - } - - for _, ds := range dss.Items { - err := r.reconcileUnDisabledFreshWorkload(ctx, workload.WorkloadKindDaemonSet, client.ObjectKey{Name: ds.Name, Namespace: ds.Namespace}) - if err != nil { - logger.Error(err, "error requesting runtime details from odiglets", "name", ds.Name, "namespace", ds.Namespace) - } - } - - return ctrl.Result{}, nil -} - -func (r *OdigosConfigReconciler) reconcileUnDisabledFreshWorkload(ctx context.Context, kind workload.WorkloadKind, key client.ObjectKey) error { - // it is very important that we make the changes based on a fresh copy of the workload object - // if a list operation pulled in state and is now slowly iterating over it, we might be working with stale data - freshWorkloadCopy := workload.ClientObjectFromWorkloadKind(kind) - workloadGetErr := r.Client.Get(ctx, key, freshWorkloadCopy) - if workloadGetErr != nil { - if apierrors.IsNotFound(workloadGetErr) { - // if the workload been deleted, we don't need to do anything - return nil - } else { - return workloadGetErr - } - } - - var err error - // a more accurate approach here might be to che - // if workload.IsWorkloadInstrumentationEffectiveEnabled - if !workload.IsInstrumentationDisabledExplicitly(freshWorkloadCopy) { - req := ctrl.Request{NamespacedName: key} - _, err = reconcileWorkload(ctx, r.Client, kind, req, r.Scheme) - } - return err -} diff --git a/k8sutils/pkg/predicate/cm_changed.go b/k8sutils/pkg/predicate/cm_changed.go deleted file mode 100644 index e73b84b0b6..0000000000 --- a/k8sutils/pkg/predicate/cm_changed.go +++ /dev/null @@ -1,45 +0,0 @@ -package predicate - -import ( - "maps" - - corev1 "k8s.io/api/core/v1" - "sigs.k8s.io/controller-runtime/pkg/event" - "sigs.k8s.io/controller-runtime/pkg/predicate" -) - -// this event filter will only trigger reconciliation when the configmap data was changed. -// the reconciled type must be corev1.ConfigMap -// note: this preidcate currently only check the Data field of the ConfigMap (without BinaryData) -type ConfigMapDataChangedPredicate struct{} - -func (o ConfigMapDataChangedPredicate) Create(e event.CreateEvent) bool { - return false -} - -func (i ConfigMapDataChangedPredicate) Update(e event.UpdateEvent) bool { - if e.ObjectOld == nil || e.ObjectNew == nil { - return false - } - - oldConfigMap, ok := e.ObjectOld.(*corev1.ConfigMap) - if !ok { - return false - } - newConfigMap, ok := e.ObjectNew.(*corev1.ConfigMap) - if !ok { - return false - } - - return !maps.Equal(oldConfigMap.Data, newConfigMap.Data) -} - -func (i ConfigMapDataChangedPredicate) Delete(e event.DeleteEvent) bool { - return false -} - -func (i ConfigMapDataChangedPredicate) Generic(e event.GenericEvent) bool { - return false -} - -var _ predicate.Predicate = &ConfigMapDataChangedPredicate{}