Skip to content

Commit

Permalink
feature: support loglevel controller (#894)
Browse files Browse the repository at this point in the history
Signed-off-by: lan.tian <lance5890@163.com>
  • Loading branch information
lance5890 committed Jan 22, 2024
1 parent 3ce28f3 commit 6fc5127
Show file tree
Hide file tree
Showing 64 changed files with 4,184 additions and 6 deletions.
4 changes: 3 additions & 1 deletion manifests/03-clusterrole.yaml
Expand Up @@ -62,6 +62,8 @@ rules:
- insightsoperators/status
- insightsoperators
verbs:
- list
- watch
- get
- update
- patch
Expand Down Expand Up @@ -422,7 +424,7 @@ rules:
verbs:
- create
- get
- list
- list
- delete
- apiGroups:
- apps
Expand Down
82 changes: 82 additions & 0 deletions pkg/controller/generic_client.go
@@ -0,0 +1,82 @@
package controller

import (
"context"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/tools/cache"

operatorapiv1 "github.com/openshift/api/operator/v1"
operatorclientv1 "github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1"
operatorinformers "github.com/openshift/client-go/operator/informers/externalversions"
)

type genericClient struct {
informers operatorinformers.SharedInformerFactory
client operatorclientv1.OperatorV1Interface
}

func (p *genericClient) Informer() cache.SharedIndexInformer {
return p.informers.Operator().V1().InsightsOperators().Informer()
}

func (p *genericClient) CurrentStatus() (operatorapiv1.OperatorStatus, error) {
instance, err := p.informers.Operator().V1().InsightsOperators().Lister().Get("cluster")
if err != nil {
return operatorapiv1.OperatorStatus{}, err
}

return instance.Status.OperatorStatus, nil
}

func (p *genericClient) GetOperatorState() (*operatorapiv1.OperatorSpec, *operatorapiv1.OperatorStatus, string, error) {
instance, err := p.informers.Operator().V1().InsightsOperators().Lister().Get("cluster")
if err != nil {
return nil, nil, "", err
}

return &instance.Spec.OperatorSpec, &instance.Status.OperatorStatus, instance.ResourceVersion, nil
}

func (p *genericClient) GetObjectMeta() (*metav1.ObjectMeta, error) {
resource, err := p.informers.Operator().V1().InsightsOperators().Lister().Get("cluster")
if err != nil {
return nil, err
}
return &resource.ObjectMeta, nil
}

func (p *genericClient) UpdateOperatorSpec(ctx context.Context, resourceVersion string,
spec *operatorapiv1.OperatorSpec) (*operatorapiv1.OperatorSpec, string, error) {
resource, err := p.informers.Operator().V1().InsightsOperators().Lister().Get("cluster")
if err != nil {
return nil, "", err
}
resourceCopy := resource.DeepCopy()
resourceCopy.ResourceVersion = resourceVersion
resourceCopy.Spec.OperatorSpec = *spec

ret, err := p.client.InsightsOperators().Update(ctx, resourceCopy, metav1.UpdateOptions{})
if err != nil {
return nil, "", err
}

return &ret.Spec.OperatorSpec, ret.ResourceVersion, nil
}
func (p *genericClient) UpdateOperatorStatus(ctx context.Context, resourceVersion string,
status *operatorapiv1.OperatorStatus) (*operatorapiv1.OperatorStatus, error) {
resource, err := p.informers.Operator().V1().InsightsOperators().Lister().Get("cluster")
if err != nil {
return nil, err
}
resourceCopy := resource.DeepCopy()
resourceCopy.ResourceVersion = resourceVersion
resourceCopy.Status.OperatorStatus = *status

ret, err := p.client.InsightsOperators().UpdateStatus(ctx, resourceCopy, metav1.UpdateOptions{})
if err != nil {
return nil, err
}

return &ret.Status.OperatorStatus, nil
}
24 changes: 19 additions & 5 deletions pkg/controller/operator.go
Expand Up @@ -11,7 +11,8 @@ import (
configv1informers "github.com/openshift/client-go/config/informers/externalversions"
insightsv1alpha1client "github.com/openshift/client-go/insights/clientset/versioned"
insightsInformers "github.com/openshift/client-go/insights/informers/externalversions"
operatorv1client "github.com/openshift/client-go/operator/clientset/versioned/typed/operator/v1"
operatorclient "github.com/openshift/client-go/operator/clientset/versioned"
operatorinformers "github.com/openshift/client-go/operator/informers/externalversions"
"github.com/openshift/library-go/pkg/controller/controllercmd"
"github.com/openshift/library-go/pkg/operator/configobserver/featuregates"
"github.com/openshift/library-go/pkg/operator/v1helpers"
Expand Down Expand Up @@ -39,6 +40,7 @@ import (
"github.com/openshift/insights-operator/pkg/ocm/sca"
"github.com/openshift/insights-operator/pkg/recorder"
"github.com/openshift/insights-operator/pkg/recorder/diskrecorder"
"github.com/openshift/library-go/pkg/operator/loglevel"
)

// Operator is the type responsible for controlling the start-up of the Insights Operator
Expand Down Expand Up @@ -72,7 +74,7 @@ func (s *Operator) Run(ctx context.Context, controller *controllercmd.Controller
}
configInformers := configv1informers.NewSharedInformerFactory(configClient, 10*time.Minute)

operatorClient, err := operatorv1client.NewForConfig(controller.KubeConfig)
operatorClient, err := operatorclient.NewForConfig(controller.KubeConfig)
if err != nil {
return err
}
Expand All @@ -82,6 +84,13 @@ func (s *Operator) Run(ctx context.Context, controller *controllercmd.Controller
return err
}

operatorConfigInformers := operatorinformers.NewSharedInformerFactory(operatorClient, 10*time.Minute)

opClient := &genericClient{
informers: operatorConfigInformers,
client: operatorClient.OperatorV1(),
}

gatherProtoKubeConfig, gatherKubeConfig, metricsGatherKubeConfig, alertsGatherKubeConfig := prepareGatherConfigs(
controller.ProtoKubeConfig, controller.KubeConfig, s.Impersonate,
)
Expand Down Expand Up @@ -213,12 +222,13 @@ func (s *Operator) Run(ctx context.Context, controller *controllercmd.Controller
)
if !insightsConfigAPIEnabled {
periodicGather = periodic.New(configAggregator, rec, gatherers, anonymizer,
operatorClient.InsightsOperators(), kubeClient)
operatorClient.OperatorV1().InsightsOperators(), kubeClient)
statusReporter.AddSources(periodicGather.Sources()...)
} else {
reportRetriever := insightsreport.NewWithTechPreview(insightsClient, configAggregator)
periodicGather = periodic.NewWithTechPreview(reportRetriever, configAggregator,
insightsDataGatherObserver, gatherers, kubeClient, insightClient.InsightsV1alpha1(), operatorClient.InsightsOperators(), dgInformer)
insightsDataGatherObserver, gatherers, kubeClient, insightClient.InsightsV1alpha1(),
operatorClient.OperatorV1().InsightsOperators(), dgInformer)
statusReporter.AddSources(periodicGather.Sources()...)
statusReporter.AddSources(reportRetriever)
go periodicGather.PeriodicPrune(ctx)
Expand Down Expand Up @@ -246,7 +256,7 @@ func (s *Operator) Run(ctx context.Context, controller *controllercmd.Controller
// know any previous last reported time
go uploader.Run(ctx)

reportGatherer := insightsreport.New(insightsClient, configAggregator, uploader, operatorClient.InsightsOperators())
reportGatherer := insightsreport.New(insightsClient, configAggregator, uploader, operatorClient.OperatorV1().InsightsOperators())
statusReporter.AddSources(reportGatherer)
go reportGatherer.Run(ctx)
}
Expand All @@ -267,6 +277,10 @@ func (s *Operator) Run(ctx context.Context, controller *controllercmd.Controller
promRulesController := insights.NewPrometheusRulesController(configAggregator, controller.KubeConfig)
go promRulesController.Start(ctx)

// support logLevelController
logLevelController := loglevel.NewClusterOperatorLoggingController(opClient, controller.EventRecorder)
operatorConfigInformers.Start(ctx.Done())
go logLevelController.Run(ctx, 1)
klog.Warning("started")

<-ctx.Done()
Expand Down

0 comments on commit 6fc5127

Please sign in to comment.