/
controller.go
68 lines (53 loc) · 1.71 KB
/
controller.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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package main
import (
"log"
"time"
"github.com/gojektech/kubehandler"
kubeinformers "k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
)
type LoggerHandler struct {
kubehandler.DefaultHandler
}
func (l *LoggerHandler) GetName() string {
return "LoggerHandler"
}
func (l *LoggerHandler) AddFunc(namespace string, name string) error {
log.Printf("Pod %s added in namespace %s", name, namespace)
return nil
}
func (l *LoggerHandler) UpdateFunc(namespace string, name string) error {
log.Printf("Pod %s updated in namespace %s", name, namespace)
return nil
}
func (l *LoggerHandler) DeleteFunc(namespace string, name string) error {
log.Printf("Pod %s deleted in namespace %s", name, namespace)
return nil
}
func main() {
// Ignoring some errors for brevity
cfg, _ := clientcmd.BuildConfigFromFlags("", "")
kubeClient, _ := kubernetes.NewForConfig(cfg)
// Get a pod informer
kubeInformerFactory := kubeinformers.NewSharedInformerFactory(kubeClient, time.Second*30)
informer := kubeInformerFactory.Core().V1().Pods().Informer()
loggingHandler := &LoggerHandler{
DefaultHandler: kubehandler.DefaultHandler{
Informer: informer,
Synced: informer.HasSynced,
},
}
// This name is used as the workqueue name
loop := kubehandler.NewEventLoop("logger_queue")
// Register all your handlers
loop.Register(loggingHandler)
// We're not handling signals for clean teardown. For production code, you
// probably want to do that
stopCh := make(chan struct{})
// Start the k8s informer so you get events
go kubeInformerFactory.Start(stopCh)
// Start processing events. This can run in a go routine if you want to
// continue doing something else.
loop.Run(2, stopCh)
}