diff --git a/eventbroadcaster/notifiersink.go b/eventbroadcaster/notifiersink.go index 961c2c5dad..3af0517262 100644 --- a/eventbroadcaster/notifiersink.go +++ b/eventbroadcaster/notifiersink.go @@ -14,6 +14,7 @@ import ( notifTypes "github.com/DataDog/chaos-controller/eventnotifier/types" "go.uber.org/zap" + corev1client "k8s.io/client-go/kubernetes/typed/core/v1" ctrl "sigs.k8s.io/controller-runtime" corev1 "k8s.io/api/core/v1" @@ -40,6 +41,10 @@ func RegisterNotifierSinks(mgr ctrl.Manager, broadcaster record.EventBroadcaster broadcaster.StartRecordingToSink(&NotifierSink{client: client, notifier: notifier, logger: logger}) } + corev1Client, _ := corev1client.NewForConfig(mgr.GetConfig()) + + broadcaster.StartRecordingToSink(&corev1client.EventSinkImpl{Interface: corev1Client.Events("")}) + return } diff --git a/main.go b/main.go index f7b7dd8768..9538bdb9ed 100644 --- a/main.go +++ b/main.go @@ -28,6 +28,7 @@ import ( "github.com/DataDog/chaos-controller/utils" "github.com/DataDog/chaos-controller/watchers" chaoswebhook "github.com/DataDog/chaos-controller/webhook" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" kubeinformers "k8s.io/client-go/informers" @@ -75,22 +76,22 @@ func main() { logger.Fatalw("unable to create a valid configuration", "error", err) } - broadcaster := eventbroadcaster.EventBroadcaster() - mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ Scheme: scheme, MetricsBindAddress: cfg.Controller.MetricsBindAddr, LeaderElection: cfg.Controller.LeaderElection, LeaderElectionID: "75ec2fa4.datadoghq.com", - EventBroadcaster: broadcaster, Host: cfg.Controller.Webhook.Host, Port: cfg.Controller.Webhook.Port, CertDir: cfg.Controller.Webhook.CertDir, }) + if err != nil { logger.Fatalw("unable to start manager", "error", err) } + broadcaster := eventbroadcaster.EventBroadcaster() + // event notifiers err = eventbroadcaster.RegisterNotifierSinks(mgr, broadcaster, cfg.Controller.Notifiers, logger) if err != nil { @@ -168,7 +169,7 @@ func main() { Client: mgr.GetClient(), BaseLog: logger, Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor(chaosv1beta1.SourceDisruptionComponent), + Recorder: broadcaster.NewRecorder(mgr.GetScheme(), corev1.EventSource{Component: chaosv1beta1.SourceDisruptionComponent}), MetricsSink: metricsSink, TracerSink: tracerSink, TargetSelector: targetSelector, @@ -363,6 +364,10 @@ func main() { }, }) + // for safety purposes: as long as no event is emitted and mgr.Start(ctx.Context) isn't + // called, the broadcaster isn't actually initiated + defer broadcaster.Shutdown() + // erase/close caches contexts defer func() { for _, contextTuple := range disruptionReconciler.CacheContextStore {