---
kind: ConfigMap
apiVersion: v1
metadata:
  name: sdc-check-job-completion
  namespace: onap-sdc
data:
  sdc_check_job_completion.py: |
    #!/usr/bin/python
    from __future__ import print_function
    import time, argparse, logging, sys, os
    import kubernetes.client
    from kubernetes import client, config
    from pprint import pprint
    
    #extract env variables.
    namespace = os.environ['NAMESPACE']
    cert = os.environ['CERT']
    host = os.environ['KUBERNETES_SERVICE_HOST']
    token_path = os.environ['TOKEN']
    
    with open(token_path, 'r') as token_file:
        token = token_file.read().replace('\n', '')
    
    client.configuration.api_key['authorization'] = token
    client.configuration.api_key_prefix['authorization'] = 'Bearer'
    client.configuration.host = "https://" + str(host)
    client.configuration.ssl_ca_cert = cert
    
    api_instance = client.BatchV1Api()
    
    #setup logging
    log = logging.getLogger(__name__)
    handler = logging.StreamHandler(sys.stdout)
    handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
    handler.setLevel(logging.INFO)
    log.addHandler(handler)
    log.setLevel(logging.INFO)
    
    
    def is_ready(job_name):
        log.info( "[INFO] Checking if " + job_name + "  is completed")
        pretty = True
        job_status = False

        try:
            api_response = api_instance.read_namespaced_job_status(job_name, namespace, pretty=pretty)
        except Exception as e:
          print("Exception when calling BatchV1Api->read_namespaced_job_status: %s\n" % e)

        pprint(api_response)
        if api_response.status.succeeded == 1:
          job_status_type = api_response.status.conditions[0].type
          if job_status_type == "Complete":
            job_status = True
            
        print("[DBG] jobStatus: " + unicode(job_status))
        return job_status


    def main(args):
        for job_name in args:
            timeout = time.time() + 60 * 10
            while True:
                ready = is_ready(job_name)
                if ready is True :
                    break
                elif time.time() > timeout:
                    log.warning( "timed out waiting for '" + job_name + "' to be ready")
                    exit(1)
                else:
                    time.sleep(5)
    
    
    if __name__ == "__main__":
        parser = argparse.ArgumentParser(description='Process some names.')
        parser.add_argument('--job-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)
