File indexing completed on 2026-04-20 07:59:00
0001 import json
0002 import os
0003 import uuid
0004
0005 import requests
0006 from pandaharvester.harvestercore import core_utils
0007 from pandaharvester.harvestercore.plugin_base import PluginBase
0008 from pandaharvester.harvestermisc.gitlab_utils import store_job_params
0009
0010
0011 baseLogger = core_utils.setup_logger("gitlab_submitter")
0012
0013
0014
0015 class GitlabSubmitter(PluginBase):
0016
0017 def __init__(self, **kwarg):
0018 self.timeout = 180
0019 PluginBase.__init__(self, **kwarg)
0020
0021
0022 def submit_workers(self, workspec_list):
0023 tmpLog = self.make_logger(baseLogger, method_name="submit_workers")
0024 tmpLog.debug(f"start nWorkers={len(workspec_list)}")
0025 retList = []
0026 for workSpec in workspec_list:
0027 try:
0028 jobSpec = workSpec.get_jobspec_list()[0]
0029 secrets = jobSpec.jobParams["secrets"]
0030 params = json.loads(jobSpec.jobParams["jobPars"])
0031 params["secrets"] = secrets
0032 store_job_params(workSpec, params)
0033 url = f"{params['project_api']}/{params['project_id']}/trigger/pipeline"
0034 data = {"token": secrets[params["trigger_token"]], "ref": params["ref"]}
0035 try:
0036 tmpLog.debug(f"trigger pipeline at {url}")
0037 r = requests.post(url, data=data, timeout=self.timeout)
0038 response = r.json()
0039 tmpLog.debug(f"got {str(response)}")
0040 except Exception:
0041 err_str = core_utils.dump_error_message(tmpLog)
0042 retList.append((False, err_str))
0043 continue
0044 if response["status"] == "created":
0045 workSpec.batchID = f"{response['id']} {response['project_id']}"
0046 tmpLog.debug(f"succeeded with {workSpec.batchID}")
0047 retList.append((True, ""))
0048 else:
0049 err_str = f"failed to trigger with {response['status']}"
0050 tmpLog.error(err_str)
0051 retList.append((False, err_str))
0052 except Exception:
0053 err_str = core_utils.dump_error_message(tmpLog)
0054 retList.append((False, err_str))
0055 tmpLog.debug("done")
0056 return retList