GRM-30: feat: add runner labels support and refactor i18n to JSON

This commit is contained in:
emil
2026-06-20 18:42:39 +00:00
parent c8970da942
commit 0c6c735000
10 changed files with 890 additions and 772 deletions
+50 -1
View File
@@ -42,6 +42,7 @@ class TestRunnerManager:
key=None,
mode="docker",
gitea_url="https://git.example.com",
labels=None,
)
def test_install_with_name_and_key(self) -> None:
@@ -68,6 +69,7 @@ class TestRunnerManager:
key="/key",
mode="docker",
gitea_url="https://git.example.com",
labels=None,
)
def test_install_ask_become_pass(self) -> None:
@@ -93,7 +95,13 @@ class TestRunnerManager:
cmd_str = " ".join(cmd)
assert "runner_mode=binary" in cmd_str
mock_registry.add.assert_called_once_with(
name="host1", host="host1", user="root", key=None, mode="binary", gitea_url="https://git.example.com"
name="host1",
host="host1",
user="root",
key=None,
mode="binary",
gitea_url="https://git.example.com",
labels=None,
)
def test_install_missing_gitea_url(self) -> None:
@@ -112,6 +120,34 @@ class TestRunnerManager:
with pytest.raises(AnsibleError, match="Playbook not found"):
manager.install("host", "user", token="tok", gitea_url="https://git.example.com")
def test_install_with_labels(self) -> None:
mock_registry = MagicMock()
manager = RunnerManager(registry=mock_registry)
mock_executor = MagicMock()
manager._executor = mock_executor
manager.install(
"host1",
"root",
token="tok",
gitea_url="https://git.example.com",
labels="docker:docker://alpine:latest",
)
cmd = mock_executor.run.call_args.args[0]
cmd_str = " ".join(cmd)
assert "runner_labels=docker:docker://alpine:latest" in cmd_str
def test_install_no_labels(self) -> None:
mock_registry = MagicMock()
manager = RunnerManager(registry=mock_registry)
mock_executor = MagicMock()
manager._executor = mock_executor
manager.install("host1", "root", token="tok", gitea_url="https://git.example.com")
cmd = mock_executor.run.call_args.args[0]
cmd_str = " ".join(cmd)
assert "runner_labels" not in cmd_str
def test_install_with_admin_token(self) -> None:
mock_registry = MagicMock()
manager = RunnerManager(registry=mock_registry)
@@ -530,6 +566,19 @@ class TestRunnerManager:
manager = RunnerManager(registry=mock_registry)
assert manager.list_runners() == []
def test_list_runners_without_labels(self) -> None:
mock_registry = MagicMock()
mock_registry.list.return_value = {
"r1": {"host": "10.0.0.1", "user": "ubuntu", "key": None, "mode": "docker"},
}
manager = RunnerManager(registry=mock_registry)
mock_executor = MagicMock()
mock_executor.run_ad_hoc.return_value = "running"
manager._executor = mock_executor
runners = manager.list_runners()
assert runners[0]["labels"] == ""
def test_list_runners_docker_exited(self) -> None:
mock_registry = MagicMock()
mock_registry.list.return_value = {