nixos/lib/test-driver: provide legacy path for create_machine({"startCommand": "..."})

This commit is contained in:
K900 2024-02-27 23:14:15 +03:00
parent 423098c284
commit bdacdc46e4
2 changed files with 38 additions and 2 deletions

View File

@ -12,6 +12,8 @@ from test_driver.machine import Machine, NixStartScript, retry
from test_driver.polling_condition import PollingCondition
from test_driver.vlan import VLan
SENTINEL = object()
def get_tmp_dir() -> Path:
"""Returns a temporary directory that is defined by TMPDIR, TEMP, TMP or CWD
@ -189,11 +191,45 @@ class Driver:
def create_machine(
self,
start_command: str,
start_command: str | dict,
*,
name: Optional[str] = None,
keep_vm_state: bool = False,
) -> Machine:
# Legacy args handling
# FIXME: remove after 24.05
if isinstance(start_command, dict):
if name is not None or keep_vm_state:
raise TypeError(
"Dictionary passed to create_machine must be the only argument"
)
args = start_command
start_command = args.pop("startCommand", SENTINEL)
if start_command is SENTINEL:
raise TypeError(
"Dictionary passed to create_machine must contain startCommand"
)
if not isinstance(start_command, str):
raise TypeError(
f"startCommand must be a string, got: {repr(start_command)}"
)
name = args.pop("name", None)
keep_vm_state = args.pop("keep_vm_state", False)
if args:
raise TypeError(
f"Unsupported arguments passed to create_machine: {args}"
)
rootlog.warning(
"Using create_machine with a single dictionary argument is deprecated, and will be removed in NixOS 24.11"
)
# End legacy args handling
tmp_dir = get_tmp_dir()
cmd = NixStartScript(start_command)

View File

@ -29,7 +29,7 @@ class PollingConditionProtocol(Protocol):
class CreateMachineProtocol(Protocol):
def __call__(
self,
start_command: str,
start_command: str | dict,
*,
name: Optional[str] = None,
keep_vm_state: bool = False,