package kubernetes import ( "time" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" "k8s.io/client-go/informers" "k8s.io/client-go/tools/cache" ) func (p *Provider) watchDeployments(instance chan<- string) cache.SharedIndexInformer { handler := cache.ResourceEventHandlerFuncs{ UpdateFunc: func(old, new interface{}) { newDeployment := new.(*appsv1.Deployment) oldDeployment := old.(*appsv1.Deployment) if newDeployment.ObjectMeta.ResourceVersion == oldDeployment.ObjectMeta.ResourceVersion { return } if *oldDeployment.Spec.Replicas == 0 { return } if *newDeployment.Spec.Replicas == 0 { parsed := DeploymentName(newDeployment, ParseOptions{Delimiter: p.delimiter}) instance <- parsed.Original } }, DeleteFunc: func(obj interface{}) { deletedDeployment := obj.(*appsv1.Deployment) parsed := DeploymentName(deletedDeployment, ParseOptions{Delimiter: p.delimiter}) instance <- parsed.Original }, } factory := informers.NewSharedInformerFactoryWithOptions(p.Client, 2*time.Second, informers.WithNamespace(corev1.NamespaceAll)) informer := factory.Apps().V1().Deployments().Informer() informer.AddEventHandler(handler) return informer }