I am using kubernetes-client/python and want to write a method which will block control until a set of Pods is in Ready state (Running state). I found that kubernetes supports wait –for command for doing same thing via command. Can someone please help me with how to achieve same functionality using kubernetes python client.
To be precise i am mostly interested in equivalent of-
kubectl wait --for condition=Ready pod -l 'app in (kafka,elasticsearch)'
Advertisement
Answer
You can use the watch
functionality available in the client library.
from kubernetes import client, config, watch config.load_kube_config() w = watch.Watch() core_v1 = client.CoreV1Api() for event in w.stream(func=core_v1.list_namespaced_pod, namespace=namespace, label_selector=label, timeout_seconds=60): if event["object"].status.phase == "Running": w.stop() end_time = time.time() logger.info("%s started in %0.2f sec", full_name, end_time-start_time) return # event.type: ADDED, MODIFIED, DELETED if event["type"] == "DELETED": # Pod was deleted while we were waiting for it to start. logger.debug("%s deleted before it started", full_name) w.stop() return