Skip to content

Instantly share code, notes, and snippets.

@Siebjee
Created November 22, 2021 07:15
Show Gist options
  • Save Siebjee/59441b187bfba899a18c08b39e32905c to your computer and use it in GitHub Desktop.
Save Siebjee/59441b187bfba899a18c08b39e32905c to your computer and use it in GitHub Desktop.
kubeinformers
package main
import (
"encoding/json"
"fmt"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"time"
"github.com/golang/glog"
kubeinformers "k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/tools/clientcmd"
)
func main() {
config, err := clientcmd.BuildConfigFromFlags("", "/home/user/.kube/config")
if err != nil {
glog.Errorln(err)
}
clientSet, err := kubernetes.NewForConfig(config)
if err != nil {
glog.Errorln(err)
}
kubeInformerFactory := kubeinformers.NewSharedInformerFactoryWithOptions(
clientSet,
0,
kubeinformers.WithNamespace("db-ops"),
kubeinformers.WithTweakListOptions(func(opts *v1.ListOptions) {
opts.LabelSelector = "scripts=db-ops"
}),
)
cmInformer := kubeInformerFactory.Core().V1().ConfigMaps().Informer()
cmInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) {
b, err := json.MarshalIndent(obj, "", " ")
if err != nil {
return
}
fmt.Printf("service added: %s \n", b)
},
UpdateFunc: func(oldObj, newObj interface{}) {
b, err := json.MarshalIndent(newObj, "", " ")
if err != nil {
return
}
fmt.Printf("service updated: %s \n", b)
},
},)
stop := make(chan struct{})
defer close(stop)
kubeInformerFactory.Start(stop)
for {
time.Sleep(time.Second)
}
@Siebjee
Copy link
Author

Siebjee commented Nov 22, 2021

Credits go to @cherwin

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment