Beispiel #1
0
 def __init__(self):
     self.jita = Jita()
     self.tasks = []
     self.catalog_tasks = []
     self.catalog_tasks_link = "https://jita.eng.nutanix.com/results?agave_task_ids="
     self.reg_handedover_tasks = []
     self.reg_handedover_tasks_link = "https://jita.eng.nutanix.com/results?agave_task_ids="
     self.non_reg_handedover_tasks = []
     self.non_reg_handedover_tasks_link = "https://jita.eng.nutanix.com/results?agave_task_ids="
     self.cloned_jps = {}
     self.compatibility_jps = {}
     self.jita_task_link = "https://jita.eng.nutanix.com/results?agave_task_ids="
Beispiel #2
0
    def get_tasks_status(self, tasks):
        #print "\nTasks: {}\n".format(tasks)
        overall_tasks_details = {}
        for task_id in tasks:
            task_status = Jita.fetch_status_task_id(task_id[0]['$oid'])
            task_id[0]['task_status'] = task_status
            self.tasks.append(task_id)
            if task_id[0]['sub-component'] == 'catalog':
                self.catalog_tasks.append(task_id)
                self.catalog_tasks_link = self.jita_task_link + str(
                    task_id[0]['$oid']).strip() + ','
                overall_tasks_details['catalog'] = [
                    self.catalog_tasks, self.catalog_tasks_link
                ]
            if task_id[0]['category'] == 'non-reg-handedover':
                self.non_reg_handedover_tasks.append(task_id)
                self.non_reg_handedover_tasks_link = self.non_reg_handedover_tasks_link + str(
                    task_id[0]['$oid']).strip() + ','
                overall_tasks_details['non-reg-handedover'] = [
                    self.non_reg_handedover_tasks,
                    self.non_reg_handedover_tasks_link
                ]
            if task_id[0]['category'] == 'reg-handedover':
                self.reg_handedover_tasks.append(task_id)
                self.reg_handedover_tasks_link = self.reg_handedover_tasks_link + str(
                    task_id[0]['$oid']).strip() + ','
                overall_tasks_details['reg-handedover'] = [
                    self.reg_handedover_tasks, self.reg_handedover_tasks_link
                ]

            self.jita_task_link = self.jita_task_link + str(
                task_id[0]['$oid']).strip() + ','

        print(
            "\n ================ Tasks Details ================= \n {}".format(
                self.tasks))
        print("\n ================ Overall Task Link ================ \n {}".
              format(self.jita_task_link[:-1]))

        if self.catalog_tasks:
            self.catalog_tasks_link = self.catalog_tasks_link[:-1]
            print(
                "\n ================ Catalog Task Link ================ \n {}".
                format(self.catalog_tasks_link))
        if self.non_reg_handedover_tasks:
            self.non_reg_handedover_tasks_link = self.non_reg_handedover_tasks_link[:
                                                                                    -1]
            print(
                "\n ================ Non-Reg Handedover Tasl Link ================ \n {}"
                .format(self.non_reg_handedover_tasks_link))
        if self.reg_handedover_tasks:
            self.reg_handedover_tasks_link = self.reg_handedover_tasks_link[:
                                                                            -1]
            print(
                "\n ================ Reg Handedover Task Link ================ \n {}"
                .format(self.reg_handedover_tasks_link))

        #return self.jita_task_link[:-1]
        return overall_tasks_details
Beispiel #3
0
class QTMS(object):
    def __init__(self):
        self.jita = Jita()
        self.tasks = []
        self.catalog_tasks = []
        self.catalog_tasks_link = "https://jita.eng.nutanix.com/results?agave_task_ids="
        self.reg_handedover_tasks = []
        self.reg_handedover_tasks_link = "https://jita.eng.nutanix.com/results?agave_task_ids="
        self.non_reg_handedover_tasks = []
        self.non_reg_handedover_tasks_link = "https://jita.eng.nutanix.com/results?agave_task_ids="
        self.cloned_jps = {}
        self.compatibility_jps = {}
        self.jita_task_link = "https://jita.eng.nutanix.com/results?agave_task_ids="

    # def kill_tasks(self, tasks):
    #     self.jita.kill_jita_tasks(tasks)

    def get_job_profile_payload(self, jp_id):
        payload = self.jita.fetch_job_profile_payload(jp_id)
        print("Job Profile Payload : {}".format(payload))

    def get_job_profile_id(self, jps):
        for jp in jps:
            jp_id = self.jita.get_job_profile_id(jp["JP_NAME"])

    def clone_job_profile(self, jps, payload2, clone_from_branch,
                          clone_to_branch, clone_key):
        local_clone = []
        for jp in jps:
            jp_id = self.jita.get_job_profile_id(jp["JP_NAME"])
            if jp_id is None:
                jp_id = jp["JP_ID"]
            payload1 = self.jita.fetch_job_profile_payload(jp_id)
            clone_jp = self.jita.clone_job_profile(payload1, payload2,
                                                   clone_from_branch, clone_to_branch,
                                                   jp['sub-component'], jp['category'],
                                                   jp['max_dep'])
            if clone_jp is not None:
                local_clone.append(clone_jp)
            else:
                local_clone.append(dict())
        self.cloned_jps[clone_key] = local_clone

    def update_job_profiles(self, jps, payload):
        for jp in jps:
            #jp_id = self.jita.get_job_profile_id(jp["JP_NAME"])
            #if jp_id is None:
            jp_id = jp["JP_ID"]
            for tags in payload['tester_tags']:
                if tags.startswith("max_deployments"):
                    #print "\nTester Tags: {}".format(payload['tester_tags'])
                    payload['tester_tags'].remove(tags)
            payload['tester_tags'].extend(jp["max_dep"])
            #fqa_id = jp.get("FQA", [""])
            # fqa_id = ''
            # if 'emails' in payload.keys():
            #     fqa_id = payload['emails']
            self.jita.update_job_profile_payload(jp_id, jp["JP_NAME"], payload)

    def trigger_job_profile(self, jps, payload):
        for jp in jps:
            print (jp)
            # jp_id = self.jita.get_job_profile_id(jp["JP_NAME"])
            # if jp_id is None:
            #     jp_id = jp["JP_ID"]
            jp_id = jp["JP_ID"]
            for tags in payload['tester_tags']:
                if tags.startswith("max_deployments"):
                    payload['tester_tags'].remove(tags)
            payload['tester_tags'].extend(jp["max_dep"])
            #fqa_id = jp.get("FQA", [""])
            fqa_id = ''
            if 'emails' in payload.keys():
                fqa_id = payload['emails']
            self.jita.trigger_job_profile(jp["JP_NAME"], jp_id, fqa_id, payload, jp['category'], jp['sub-component'])
#        print 'Tasks ids are: {}'.format(self.jita.tasks_ids)

    def send_mail(self, branch, tasks, jita_task_link, email_text=None, email_msg=None, emails=None):
        build_email(branch, tasks, jita_task_link, email_text, email_msg, emails)

    def mark_tasks_official(self, tasks, task_link=True):
        if task_link:
            delimiters = ",", "="
            regexPattern = '|'.join(map(re.escape, delimiters))
            task_to_mark_official = re.split(regexPattern, tasks)[1:]
        else:
            task_to_mark_official = tasks
        self.jita.mark_jita_tasks_official(task_to_mark_official)

    def kill_tasks(self, tasks, task_link=True):
        if task_link:
            delimiters = ",", "="
            regexPattern = '|'.join(map(re.escape, delimiters))
            task_to_kill = re.split(regexPattern, tasks)[1:]
        else:
            task_to_kill = tasks
        self.jita.kill_jita_tasks(task_to_kill)

    def get_tasks_status(self, tasks):
        #print "\nTasks: {}\n".format(tasks)
        overall_tasks_details = {}
        for task_id in tasks:
            task_status = Jita.fetch_status_task_id(task_id[0]['$oid'])
            task_id[0]['task_status'] = task_status
            self.tasks.append(task_id)
            if task_id[0]['sub-component'] == 'catalog':
                self.catalog_tasks.append(task_id)
                self.catalog_tasks_link = self.jita_task_link + str(task_id[0]['$oid']).strip() + ','
                overall_tasks_details['catalog'] = [self.catalog_tasks, self.catalog_tasks_link]
            if task_id[0]['category'] == 'non-reg-handedover':
                self.non_reg_handedover_tasks.append(task_id)
                self.non_reg_handedover_tasks_link = self.non_reg_handedover_tasks_link + str(task_id[0]['$oid']).strip() + ','
                overall_tasks_details['non-reg-handedover'] = [self.non_reg_handedover_tasks, self.non_reg_handedover_tasks_link]
            if task_id[0]['category'] == 'reg-handedover':
                self.reg_handedover_tasks.append(task_id)
                self.reg_handedover_tasks_link = self.reg_handedover_tasks_link + str(task_id[0]['$oid']).strip() + ','
                overall_tasks_details['reg-handedover'] = [self.reg_handedover_tasks, self.reg_handedover_tasks_link]

            self.jita_task_link = self.jita_task_link + str(task_id[0]['$oid']).strip() + ','

        print ("\n ================ Tasks Details ================= \n {}".format(self.tasks))
        print ("\n ================ Overall Task Link ================ \n {}".format(self.jita_task_link[:-1]))

        if self.catalog_tasks:
            self.catalog_tasks_link = self.catalog_tasks_link[:-1]
            print ("\n ================ Catalog Task Link ================ \n {}".format(self.catalog_tasks_link))
        if self.non_reg_handedover_tasks:
            self.non_reg_handedover_tasks_link = self.non_reg_handedover_tasks_link[:-1]
            print ("\n ================ Non-Reg Handedover Tasl Link ================ \n {}".format(self.non_reg_handedover_tasks_link))
        if self.reg_handedover_tasks:
            self.reg_handedover_tasks_link = self.reg_handedover_tasks_link[:-1]
            print ("\n ================ Reg Handedover Task Link ================ \n {}".format(self.reg_handedover_tasks_link))

        #return self.jita_task_link[:-1]
        return overall_tasks_details

    def execute_qtms_ops(self):
        for jita_operation in self.jita_operations:
            if jita_operation["op"] == 'update_job_profile':
                print ("\n ================ Updating Job Profile ================ \n")
                for jp in self.job_profiles:
                    self.update_job_profiles(jp['jps'], jp['payload'])
            if jita_operation["op"] == 'trigger_job_profile':
                for jp in self.job_profiles:
                    self.trigger_job_profile(jp['jps'], jp['payload'])
                jita_tasks = self.get_tasks_status(self.jita.tasks_ids)
                if self.catalog_tasks:
                    branch = self.catalog_tasks[0][0]['branch']
                    #tasks = self.catalog_tasks
                    #jita_task_link = self.catalog_tasks_link
                    emails = [u'*****@*****.**', u'*****@*****.**',
                              u'*****@*****.**',
                              u'*****@*****.**', u'*****@*****.**',
                              u'*****@*****.**',
                              u'*****@*****.**', u'*****@*****.**',
                              u'*****@*****.**']
                    email_text = 'Catalog Regression Test Run Details'
                    email_msg = 'Catalog Regression Test Run Details'
                    print ("Sending email for Catalog Regression Test runs: {}".format(self.catalog_tasks_link))
                    mail_instance_catalog = SendEmail(branch, tasks=jita_tasks['catalog'][0], jita_task_link=jita_tasks['catalog'][1],
                                                      email_text=email_text, email_msg=email_msg, emails=emails)
                    mail_instance_catalog.build_email()
                    #self.send_mail(branch, self.catalog_tasks, self.catalog_tasks_link, email_text, email_msg, emails)
                if self.reg_handedover_tasks:
                    branch = self.reg_handedover_tasks[0][0]['branch']
                    #tasks = self.reg_handedover_tasks
                    #jita_task_link = self.reg_handedover_tasks_link
                    emails = ['*****@*****.**', '*****@*****.**', '*****@*****.**','*****@*****.**']
                    email_text = 'Acropolis Regression Reg Handedover Test Run Details'
                    email_msg = 'Acropolis Regression Reg Handedover Test Run Details'
                    print ("Sending email for Reg Handedover Test runs: {}".format(self.reg_handedover_tasks_link))
                    mail_instance_reg_handedover = SendEmail(branch, tasks=jita_tasks['reg-handedover'][0], jita_task_link=jita_tasks['reg-handedover'][1],
                                                      email_text=email_text, email_msg=email_msg, emails=emails)
                    mail_instance_reg_handedover.build_email()
                    #self.send_mail(branch, self.reg_handedover_tasks, self.reg_handedover_tasks_link, email_text, email_msg, emails)
                if self.non_reg_handedover_tasks:
                    branch = self.non_reg_handedover_tasks[0][0]['branch']
                    #tasks = self.non_reg_handedover_tasks
                    #jita_task_link = self.non_reg_handedover_tasks_link
                    emails = ['*****@*****.**', '*****@*****.**', '*****@*****.**']
                    email_text = 'Acropolis Regression Non Reg Handedover Test Run Details'
                    email_msg = 'Acropolis Regression Non Reg Handedover Test Run Details'
                    print ("Sending email for Non-Reg Handedover Test runs: {}".format(self.non_reg_handedover_tasks_link))
                    mail_instance_non_reg_handedover = SendEmail(branch, tasks=jita_tasks['non-reg-handedover'][0], jita_task_link=jita_tasks['non-reg-handedover'][1],
                                                      email_text=email_text, email_msg=email_msg, emails=emails)
                    mail_instance_non_reg_handedover.build_email()
                    #self.send_mail(branch, self.non_reg_handedover_tasks, self.non_reg_handedover_tasks_link, email_text, email_msg, emails)

                # if jp['emails'] is not None:
                #     self.send_mail(jp["payload"]['git']['branch'], self.tasks, jita_tasks, jp['emails'])
                # else:
                #     self.send_mail(jp["payload"]['git']['branch'], self.tasks, jita_tasks)

                if self.jita.jps_not_triggered:
                    print ("\n ================ List of Job Profiles Failed to trigger ================ \n {}".format(self.jita.jps_not_triggered))
            if jita_operation["op"] == 'create_compatibility_jps':
                self.create_compatilibility_job_profiles(self.compatibility_matrix, self.component)
            if jita_operation["op"] == 'clone_job_profile':
                print ("\n ================ Performning Clone Operations ================ \n")
                for jp in self.clone_from_jps:
                    #print "JP: {}".format(jp)
                    self.clone_job_profile(jp['jps'], jp['payload'], jita_operation["fromBranch"],
                                           jita_operation["toBranch"], jp['jp_type'])
                print ("\n ================ Jop Profiles Cloned are ================ \n {}".format(self.cloned_jps))
                print ("\n ================ Formatted Output of Cloned Job Profiles ================ \n")
                pprint(self.cloned_jps)

    def create_compatilibility_job_profiles(self, compat_matrix, component):
        jps = []
        for matrix in compat_matrix:
            component_values = ''
            pc_build = ''
            if matrix["pe"] in PE_MATRIX.keys():
                for comp in PE_MATRIX[matrix["pe"]]:
                    if component in comp.keys():
                        component_values = comp
            if matrix["pc"] in PC_MATRIX.keys():
                pc_build = PC_MATRIX[matrix["pc"]]
            new_jp = self.jita.create_compatilibility_job_profiles(component, SAMPLE_COMPATIBILITY_PAYLOAD,
                                                                   NEW_COMPATIBILITY_PAYLOAD,
                                                                   component_values, matrix, pc_build)
            if new_jp is not None:
                jps.append(new_jp)
            else:
                jps.append(dict())
        self.compatibility_jps[component] = jps
        print ("Comaptibility Job Profiles are : {}".format(self.compatibility_jps))