mirror of https://github.com/grafana/grafana.git
83 lines
2.2 KiB
Go
83 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
"os"
|
|
"os/signal"
|
|
|
|
"github.com/grafana/grafana-app-sdk/k8s"
|
|
"github.com/grafana/grafana-app-sdk/logging"
|
|
"github.com/grafana/grafana-app-sdk/operator"
|
|
"github.com/grafana/grafana-app-sdk/simple"
|
|
"github.com/grafana/grafana/apps/iam/pkg/app"
|
|
)
|
|
|
|
func main() {
|
|
// Configure the default logger to use slog
|
|
logging.DefaultLogger = logging.NewSLogLogger(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
|
|
Level: slog.LevelDebug,
|
|
}))
|
|
|
|
//Load the config from the environment
|
|
cfg, err := LoadConfigFromEnv()
|
|
if err != nil {
|
|
logging.DefaultLogger.With("error", err).Error("Unable to load config from environment")
|
|
panic(err)
|
|
}
|
|
|
|
// Set up tracing
|
|
if cfg.OTelConfig.Host != "" {
|
|
err = simple.SetTraceProvider(simple.OpenTelemetryConfig{
|
|
Host: cfg.OTelConfig.Host,
|
|
Port: cfg.OTelConfig.Port,
|
|
ConnType: cfg.OTelConfig.ConnType,
|
|
ServiceName: cfg.OTelConfig.ServiceName,
|
|
})
|
|
if err != nil {
|
|
logging.DefaultLogger.With("error", err).Error("Unable to set trace provider")
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
// Create the operator config and the runner
|
|
operatorConfig := operator.RunnerConfig{
|
|
KubeConfig: cfg.KubeConfig.RestConfig,
|
|
WebhookConfig: operator.RunnerWebhookConfig{
|
|
Port: cfg.WebhookServer.Port,
|
|
TLSConfig: k8s.TLSConfig{
|
|
CertPath: cfg.WebhookServer.TLSCertPath,
|
|
KeyPath: cfg.WebhookServer.TLSKeyPath,
|
|
},
|
|
},
|
|
MetricsConfig: operator.RunnerMetricsConfig{
|
|
Enabled: true,
|
|
},
|
|
}
|
|
|
|
runner, err := operator.NewRunner(operatorConfig)
|
|
if err != nil {
|
|
logging.DefaultLogger.With("error", err).Error("Unable to create operator runner")
|
|
panic(err)
|
|
}
|
|
|
|
// Context and cancel for the operator's Run method
|
|
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, os.Kill)
|
|
defer cancel()
|
|
|
|
// Create app config from operator config
|
|
appCfg := app.AppConfig{
|
|
ZanzanaClientCfg: cfg.ZanzanaClient,
|
|
FolderReconcilerNamespace: cfg.FolderReconciler.Namespace,
|
|
}
|
|
|
|
// Run
|
|
logging.DefaultLogger.Info("Starting operator")
|
|
err = runner.Run(ctx, app.Provider(appCfg))
|
|
if err != nil {
|
|
logging.DefaultLogger.With("error", err).Error("Operator exited with error")
|
|
panic(err)
|
|
}
|
|
logging.DefaultLogger.Info("Normal operator exit")
|
|
}
|