60 lines
1.2 KiB
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
|
|
}
|