diff --git a/saagieapi/jobs/jobs.py b/saagieapi/jobs/jobs.py index d38b86d..d291fa6 100644 --- a/saagieapi/jobs/jobs.py +++ b/saagieapi/jobs/jobs.py @@ -582,6 +582,7 @@ def create( emails: List = None, status_list: List = None, source_url: str = "", + docker_info: Dict = None, ) -> Dict: """Create job in given project @@ -635,6 +636,9 @@ def create( "RUNNING", "FAILED", "KILLED", "KILLING", "SUCCEEDED", "UNKNOWN", "AWAITING", "SKIPPED" source_url: str, optional URL of the source code used for the job (link to the commit for example) + docker_info: dict (optional) + Docker information for the job + Example: {"image": "my_image", "dockerCredentialsId": "MY_CREDENTIALS_ID"} Returns ------- @@ -730,6 +734,9 @@ def create( if source_url: params["sourceUrl"] = source_url + if docker_info: + params["dockerInfo"] = docker_info + result = self.__launch_request(file, GQL_CREATE_JOB, params) logging.info("✅ Job [%s] successfully created", job_name) return result @@ -877,6 +884,7 @@ def upgrade( extra_technology: str = None, extra_technology_version: str = None, source_url: str = "", + docker_info: dict = None, ) -> Dict: """Upgrade a job @@ -903,6 +911,9 @@ def upgrade( Version of the extra technology. Leave to None when not needed source_url: str (optional) URL of the source code used for the job (link to the commit for example) + docker_info: dict (optional) + Docker information for the job + Example: {"image": "my_image", "dockerCredentialsId": "MY_CREDENTIALS_ID"} Returns ------- @@ -957,6 +968,7 @@ def upgrade( "runtimeVersion": runtime_version or job_info["versions"][0]["runtimeVersion"], "commandLine": command_line or job_info["versions"][0]["commandLine"], "usePreviousArtifact": bool(use_previous_artifact and job_info["versions"][0]["packageInfo"]), + "dockerInfo": docker_info or job_info["versions"][0]["dockerInfo"], } # Add extra technology parameter if needed @@ -1066,6 +1078,7 @@ def create_or_upgrade( emails: List = None, status_list: List = None, source_url: str = "", + docker_info: dict = None, ) -> Dict: """Create or upgrade a job @@ -1112,6 +1125,9 @@ def create_or_upgrade( Status list source_url: str (optional) URL of the source code used for the job (link to the commit for example) + docker_info: dict (optional) + Docker information for the job + Example: {"image": "my_image", "dockerCredentialsId": "MY_CREDENTIALS_ID"} Returns ------- @@ -1141,6 +1157,7 @@ def create_or_upgrade( ... emails=['email1@saagie.io', 'email2@saagie.io'], ... status_list=["FAILED", "KILLED"], ... source_url="", + ... docker_info=None ... ) { "data":{ @@ -1175,6 +1192,7 @@ def create_or_upgrade( extra_technology=extra_technology, extra_technology_version=extra_technology_version, source_url=source_url, + docker_info=docker_info, )["data"]["addJobVersion"] } @@ -1214,6 +1232,7 @@ def create_or_upgrade( "emails": emails, "status_list": status_list, "source_url": source_url, + "docker_info": docker_info, }.items() if v is not None # Remove None values from the dict } diff --git a/tests/unit/jobs_unit_test.py b/tests/unit/jobs_unit_test.py index 83838e7..052d62a 100644 --- a/tests/unit/jobs_unit_test.py +++ b/tests/unit/jobs_unit_test.py @@ -213,6 +213,7 @@ def test_create_job(self, saagie_api_mock): "status_list": ["FAILED", "KILLED"], "cron_scheduling": "0 0 * * *", "schedule_timezone": "Europe/Paris", + "docker_info": {"image": "my_image", "dockerCredentialsId": "MY_CREDENTIAL_UUID"}, } # Patch the self.__launch_request method to avoid calling the API with patch.object(instance, "_Jobs__launch_request") as launch_request: @@ -288,6 +289,7 @@ def test_create_job_with_extra_techno(self, saagie_api_mock): "release_note": "Initial version", "extra_technology": "python", "extra_technology_version": "3.9", + "docker_info": {"image": "my_image", "dockerCredentialsId": "MY_CREDENTIAL_UUID"}, } with patch.object(instance, "_Jobs__launch_request") as launch_request: @@ -579,6 +581,7 @@ def test_upgrade_job(self, saagie_api_mock, caplog): "job_id": "60f46dce-c869-40c3-a2e5-1d7765a806db", "file": "/tmp/my_file.py", "source_url": "http://my.super.source.url", + "docker_info": {"image": "my_image", "dockerCredentialsId": "MY_CREDENTIAL_UUID"}, } # Mock the return value return_value = {"data": {"addJobVersion": {"number": 2, "__typename": "JobVersion"}}} @@ -655,6 +658,7 @@ def test_upgrade_job_with_extra_techno(self, saagie_api_mock): "source_url": "http://my.super.source.url", "extra_technology": "python", "extra_technology_version": "3.9", + "docker_info": {"image": "my_image", "dockerCredentialsId": "MY_CREDENTIAL_UUID"}, } # Mock the return value return_value = {"data": {"addJobVersion": {"number": 2, "__typename": "JobVersion"}}}