kube-fetcher/cmd/fetcher/watcher.go

60 lines
1.2 KiB
Go

package main
import (
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/cache"
"k8s.io/klog/v2"
)
type Watcher struct {
}
func (watcher *Watcher) WatchPods(
clientset *kubernetes.Clientset,
namespace string) {
watchlist := cache.NewListWatchFromClient(
clientset.CoreV1().RESTClient(),
"pods",
namespace,
fields.Everything(),
)
addOrUpdate := func(obj interface{}) {
pod := watcher.getPod(obj)
klog.Infof("Added/updated %s/%s\n", pod.Namespace, pod.Name)
}
options := cache.InformerOptions{
ListerWatcher: watchlist,
ObjectType: &corev1.Pod{},
Handler: cache.ResourceEventHandlerFuncs{
AddFunc: addOrUpdate,
UpdateFunc: func(_ any, obj any) {
addOrUpdate(obj)
},
DeleteFunc: func(obj any) {
pod := watcher.getPod(obj)
klog.Infof("Delete %s/%s\n", pod.Namespace, pod.Name)
},
},
ResyncPeriod: 0,
}
_, controller := cache.NewInformerWithOptions(options)
stop := make(chan struct{})
defer close(stop)
go controller.Run(stop)
select {}
}
func (watcher *Watcher) getPod(obj any) *corev1.Pod {
k8spod, ok := obj.(*corev1.Pod)
if !ok {
klog.Fatalf("Object of wrong type: %v", obj)
}
return k8spod
}