Advertisement
rohankanojia

Untitled

Apr 9th, 2021
440
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.47 KB | None | 0 0
  1. package io.fabric8;
  2.  
  3. import io.fabric8.kubernetes.api.model.ObjectMeta;
  4. import io.fabric8.kubernetes.api.model.Pod;
  5. import io.fabric8.kubernetes.client.DefaultKubernetesClient;
  6. import io.fabric8.kubernetes.client.KubernetesClient;
  7. import io.fabric8.kubernetes.client.informers.ResourceEventHandler;
  8. import io.fabric8.kubernetes.client.informers.SharedIndexInformer;
  9. import io.fabric8.kubernetes.client.informers.SharedInformerFactory;
  10. import io.fabric8.kubernetes.client.informers.cache.Lister;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13.  
  14. import java.util.HashMap;
  15. import java.util.Map;
  16. import java.util.concurrent.TimeUnit;
  17.  
  18. public class MultipleSharedInformerExample {
  19.     private static final Logger logger = LoggerFactory.getLogger("MultiInformer::");
  20.     private static final String NAMESPACE_PREFIX = "multi-";
  21.  
  22.     public static void main(String[] args) throws InterruptedException {
  23.         try (KubernetesClient client = new DefaultKubernetesClient()) {
  24.             SharedInformerFactory sharedInformerFactory = client.informers();
  25.             Map<String, SharedIndexInformer<Pod>> namespaceToInformerMap = new HashMap<>();
  26.             logger.info("Informer factory initialized.");
  27.             for (int i = 10; i < 30; i++) {
  28.                 SharedIndexInformer<Pod> informer = newPodSharedInformerClient(sharedInformerFactory, NAMESPACE_PREFIX + i);
  29.                 namespaceToInformerMap.put(NAMESPACE_PREFIX + i, informer);
  30.             }
  31.             logger.info("Starting all registered informers");
  32.             sharedInformerFactory.startAllRegisteredInformers();
  33.  
  34.             for (Map.Entry<String, SharedIndexInformer<Pod>> entry: namespaceToInformerMap.entrySet()) {
  35.                 listPodsFromEachInformerCache(entry.getKey(), entry.getValue());
  36.             }
  37.             TimeUnit.MINUTES.sleep(15);
  38.             sharedInformerFactory.stopAllRegisteredInformers();
  39.         }
  40.     }
  41.  
  42.     private static SharedIndexInformer<Pod> newPodSharedInformerClient(SharedInformerFactory sharedInformerFactory, String namespace) throws InterruptedException {
  43.         SharedIndexInformer<Pod> podInformer = sharedInformerFactory.inNamespace(namespace).sharedIndexInformerFor(Pod.class, 0L);
  44.         logger.info("Registered Pod SharedInformer for {} namespace", namespace);
  45.         podInformer.addEventHandler(new PodEventHandler());
  46.         return podInformer;
  47.     }
  48.  
  49.     private static void listPodsFromEachInformerCache(String namespace, SharedIndexInformer<Pod> podInformer) {
  50.         Lister<Pod> podLister = new Lister<>(podInformer.getIndexer(), namespace);
  51.         logger.info("PodLister has {}", podLister.list().size());
  52.         podLister.list().stream().map(Pod::getMetadata).map(ObjectMeta::getName).forEach(p -> logger.info("{} namespace Lister list: {}", namespace, p));
  53.     }
  54.  
  55.     private static final class PodEventHandler implements ResourceEventHandler<Pod> {
  56.         @Override
  57.         public void onAdd(Pod pod) {
  58.             logger.info("{}/{} pod added", pod.getMetadata().getNamespace(), pod.getMetadata().getName());
  59.         }
  60.  
  61.         @Override
  62.         public void onUpdate(Pod oldPod, Pod newPod) {
  63.             logger.info("{}/{} pod updated", oldPod.getMetadata().getNamespace(), oldPod.getMetadata().getName());
  64.         }
  65.  
  66.         @Override
  67.         public void onDelete(Pod pod, boolean deletedFinalStateUnknown) {
  68.             logger.info("{}/{} pod deleted", pod.getMetadata().getNamespace(), pod.getMetadata().getName());
  69.         }
  70.     }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement