#!/usr/bin/python #from kubernetes import client, config import kubernetes import time, argparse, logging, sys, os, base64 import yaml #setup logging log = logging.getLogger(__name__) handler = logging.StreamHandler(sys.stdout) handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) handler.setLevel(logging.DEBUG) log.addHandler(handler) log.setLevel(logging.DEBUG) def is_ready(container_name): log.info( "Checking if " + container_name + " is ready") kubernetes.config.kube_config.KubeConfigLoader(config_dict=get_k8s_config_env()).load_and_set() client = kubernetes.client namespace = get_namespace_env() v1 = client.CoreV1Api() ready = False try: response = v1.list_namespaced_pod(namespace=namespace, watch=False) for i in response.items: for s in i.status.container_statuses: if s.name == container_name: log.debug ( "response %s" % response ) ready = s.ready if not ready: log.info( container_name + " is not ready.") else: log.info( container_name + " is ready!") else: continue return ready except Exception as e: log.error("Exception when calling list_namespaced_pod: %s\n" % e) def get_k8s_config_env(): try: k8s_config_env = os.environ.get("K8S_CONFIG_B64") decoded = base64.b64decode(k8s_config_env) return yaml.load(decoded) except KeyError as ke: raise Exception("K8S_CONFIG_B64 variable is not set.") def get_namespace_env(): try: namespace_env = os.environ.get("NAMESPACE") return namespace_env except KeyError as ke: raise Exception("NAMESPACE variable is not set.") def main(args):#from kubernetes import client, config # args are a list of container names for container_name in args: # 5 min, TODO: make configurable timeout = time.time() + 60 * 10 while True: ready = is_ready(container_name) if ready is True: break elif time.time() > timeout: log.warning( "timed out waiting for '" + container_name + "' to be ready") exit(1) else: time.sleep(5) if __name__ == "__main__": parser = argparse.ArgumentParser(description='Process some names.') parser.add_argument('--container-name', action='append', required=True, help='A container name') args = parser.parse_args() arg_dict = vars(args) for arg in arg_dict.itervalues(): main(arg)