diff --git a/reana_commons/api_client.py b/reana_commons/api_client.py index 36986c69..7e342a43 100644 --- a/reana_commons/api_client.py +++ b/reana_commons/api_client.py @@ -87,7 +87,7 @@ def _get_spec(self, spec_file): class JobControllerAPIClient(BaseAPIClient): """REANA-Job-Controller http client class.""" - def submit( + def submit( # noqa: C901 self, workflow_uuid="", image="", @@ -108,6 +108,9 @@ def submit( slurm_partition="", slurm_time="", kubernetes_job_timeout: Optional[int] = None, + c4p_cpu_cores="", + c4p_memory_limit="", + c4p_additional_requirements="", ): """Submit a job to RJC API. @@ -132,6 +135,9 @@ def submit( :param slurm_partition: Partition of a Slurm job. :param slurm_time: Maximum timelimit of a Slurm job. :param kubernetes_job_timeout: Timeout for the job in seconds. + :param c4p_cpu_cores: Amount of CPU cores requested to process C4P job + :param c4p_memory_limit: Amount of memory requested to process C4P job + :param c4p_additional_requirements: Additional requirements requested to process C4P job like GPU, etc. :return: Returns a dict with the ``job_id``. """ job_spec = { @@ -181,6 +187,15 @@ def submit( if slurm_time: job_spec["slurm_time"] = slurm_time + if c4p_cpu_cores: + job_spec["c4p_cpu_cores"] = c4p_cpu_cores + + if c4p_memory_limit: + job_spec["c4p_memory_limit"] = c4p_memory_limit + + if c4p_additional_requirements: + job_spec["c4p_additional_requirements"] = c4p_additional_requirements + try: response, http_response = self._client.jobs.create_job( job=job_spec diff --git a/reana_commons/openapi_specifications/reana_job_controller.json b/reana_commons/openapi_specifications/reana_job_controller.json index a4842434..2cc25255 100644 --- a/reana_commons/openapi_specifications/reana_job_controller.json +++ b/reana_commons/openapi_specifications/reana_job_controller.json @@ -39,6 +39,15 @@ }, "JobRequest": { "properties": { + "c4p_additional_requirements": { + "type": "string" + }, + "c4p_cpu_cores": { + "type": "string" + }, + "c4p_memory_limit": { + "type": "string" + }, "cmd": { "default": "", "type": "string" diff --git a/reana_commons/serial.py b/reana_commons/serial.py index ace49556..b5205992 100644 --- a/reana_commons/serial.py +++ b/reana_commons/serial.py @@ -50,7 +50,12 @@ "compute_backend": { "$id": "#/properties/steps/properties/compute_backend", "type": "string", - "enum": ["kubernetes", "htcondorcern", "slurmcern"], + "enum": [ + "kubernetes", + "htcondorcern", + "slurmcern", + "compute4punch", + ], }, "kerberos": { "$id": "#/properties/steps/properties/kerberos", @@ -98,6 +103,21 @@ "type": "string", "default": "", }, + "c4p_cpu_cores": { + "$id": "#/properties/steps/properties/c4p_cpu_cores", + "type": "string", + "default": "", + }, + "c4p_memory_limit": { + "$id": "#/properties/steps/properties/c4p_memory_limit", + "type": "string", + "default": "", + }, + "c4p_additional_requirements": { + "$id": "#/properties/steps/properties/c4p_additional_requirements", + "type": "string", + "default": "", + }, "commands": { "$id": "#/properties/steps/properties/commands", "type": "array", diff --git a/reana_commons/validation/schemas/reana_analysis_schema.json b/reana_commons/validation/schemas/reana_analysis_schema.json index 1a3bc422..692659ef 100644 --- a/reana_commons/validation/schemas/reana_analysis_schema.json +++ b/reana_commons/validation/schemas/reana_analysis_schema.json @@ -247,7 +247,8 @@ "enum": [ "kubernetes", "htcondorcern", - "slurmcern" + "slurmcern", + "compute4punch" ], "title": "Compute backend" }, @@ -297,6 +298,21 @@ "type": "boolean", "title": "VOMS proxy", "description": "Whether to use a VOMS proxy for the step. This would require you to upload a valid VOMS proxy as a REANA secret." + }, + "c4p_cpu_cores": { + "type": "string", + "title": "C4P CPU Cores", + "description": "Number of CPU cores requested from Compute4PUNCH for running the task." + }, + "c4p_memory_limit": { + "type": "string", + "title": "C4P Memory Limit", + "description": "Amount of memory requested from Compute4PUNCH for running the task." + }, + "c4p_additional_requirements": { + "type": "string", + "title": "C4P Additional Requirements", + "description": "Additional HTCondor requirements like RequestGPUs for running the task." } }, "required": [