From f367cc74a7daeb474a1dc5e8ce5b53190f6cbd0f Mon Sep 17 00:00:00 2001 From: Ralf Grubenmann Date: Wed, 7 Dec 2022 11:31:40 +0100 Subject: [PATCH] fix(cli): fix setting cpu request in renku.ini for renku session start (#3232) --- renku/core/errors.py | 6 +++++- renku/core/session/session.py | 7 +++++++ tests/cli/test_session.py | 18 ++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/renku/core/errors.py b/renku/core/errors.py index 011876b484..b5e7f52da5 100644 --- a/renku/core/errors.py +++ b/renku/core/errors.py @@ -627,7 +627,11 @@ def __init__(self, reason: str): super().__init__(f"Docker failed: {reason}") -class RenkulabSessionError(RenkuException): +class SessionStartError(RenkuException): + """Raised when an error occurs trying to start sessions.""" + + +class RenkulabSessionError(SessionStartError): """Raised when an error occurs trying to start sessions with the notebook service.""" diff --git a/renku/core/session/session.py b/renku/core/session/session.py index 4945b2a984..3a9df80dd6 100644 --- a/renku/core/session/session.py +++ b/renku/core/session/session.py @@ -103,6 +103,13 @@ def session_start( # set resource settings cpu_limit = cpu_request or get_value("interactive", "cpu_request") + + if cpu_limit is not None: + try: + cpu_limit = float(cpu_limit) + except ValueError: + raise errors.SessionStartError(f"Invalid value for cpu_request (must be float): {cpu_limit}") + disk_limit = disk_request or get_value("interactive", "disk_request") mem_limit = mem_request or get_value("interactive", "mem_request") gpu = gpu_request or get_value("interactive", "gpu_request") diff --git a/tests/cli/test_session.py b/tests/cli/test_session.py index 1d988ea4e0..2d13350e39 100644 --- a/tests/cli/test_session.py +++ b/tests/cli/test_session.py @@ -63,3 +63,21 @@ def test_session_up_down(runner, project, dummy_session_provider, monkeypatch): result = runner.invoke(cli, ["session", "ls", "-p", "dummy"]) assert 0 == result.exit_code, format_result_exception(result) assert 2 == len(result.output.splitlines()) + + +def test_session_start_config_requests(runner, project, dummy_session_provider, monkeypatch): + """Test session with configuration in the renku config.""" + import docker + + result = runner.invoke(cli, ["config", "set", "interactive.cpu_request", "0.5"]) + assert 0 == result.exit_code, format_result_exception(result) + result = runner.invoke(cli, ["config", "set", "interactive.disk_request", "100mb"]) + assert 0 == result.exit_code, format_result_exception(result) + result = runner.invoke(cli, ["config", "set", "interactive.mem_request", "100mb"]) + assert 0 == result.exit_code, format_result_exception(result) + + with monkeypatch.context() as monkey: + monkey.setattr(docker, "from_env", MagicMock()) + result = runner.invoke(cli, ["session", "start", "-p", "docker"]) + assert 0 == result.exit_code, format_result_exception(result) + assert "successfully started" in result.output