-
Notifications
You must be signed in to change notification settings - Fork 0
/
pod_informer.go
41 lines (35 loc) · 1.14 KB
/
pod_informer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package watcher
import (
"github.com/rs/zerolog/log"
api "k8s.io/api/core/v1"
"k8s.io/client-go/informers"
"k8s.io/client-go/tools/cache"
"github.com/iLert/ilert-kube-agent/pkg/config"
"github.com/iLert/ilert-kube-agent/pkg/incident"
)
var podInformerStopper chan struct{}
func startPodInformer(cfg *config.Config) {
factory := informers.NewSharedInformerFactory(cfg.KubeClient, 0)
podInformer := factory.Core().V1().Pods().Informer()
podInformerStopper = make(chan struct{})
podInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
UpdateFunc: func(oldObj interface{}, newObj interface{}) {
pod := newObj.(*api.Pod)
log.Debug().Interface("pod", pod.GetName()).Msg("Update Pod")
analyzePodStatus(pod, cfg)
},
DeleteFunc: func(obj interface{}) {
pod := obj.(*api.Pod)
log.Debug().Interface("pod", pod.Name).Msg("Delete Pod")
incident.DeleteIncidentRef(cfg.AgentKubeClient, pod.GetName(), pod.GetNamespace())
},
})
log.Info().Msg("Starting pod informer")
podInformer.Run(podInformerStopper)
}
func stopPodInformer() {
if podInformerStopper != nil {
log.Info().Msg("Stopping pod informer")
close(podInformerStopper)
}
}