diff --git a/lisa/sut_orchestrator/baremetal/ip_power.py b/lisa/sut_orchestrator/baremetal/ip_power.py index b82d933d56..4c8c8f888c 100644 --- a/lisa/sut_orchestrator/baremetal/ip_power.py +++ b/lisa/sut_orchestrator/baremetal/ip_power.py @@ -6,11 +6,13 @@ import requests from lisa import schema -from lisa.util import ContextMixin, InitializableMixin, subclasses +from lisa.util import ContextMixin, InitializableMixin, LisaException, subclasses from lisa.util.logger import get_logger from .schema import IPPowerSchema +REQUEST_TIMEOUT = 3 + class IPPower(subclasses.BaseClassWithRunbookMixin, ContextMixin, InitializableMixin): def __init__(self, runbook: IPPowerSchema) -> None: @@ -21,10 +23,10 @@ def __init__(self, runbook: IPPowerSchema) -> None: def type_schema(cls) -> Type[schema.TypedSchema]: return IPPowerSchema - def on(self, port: int) -> None: + def on(self, port: str) -> None: raise NotImplementedError() - def off(self, port: int) -> None: + def off(self, port: str) -> None: raise NotImplementedError() @@ -32,7 +34,7 @@ class Ip9285(IPPower): def __init__(self, runbook: IPPowerSchema) -> None: super().__init__(runbook) self._request_cmd = ( - f"http://{runbook.hostname}/set.cmd?" + f"http://{runbook.host}/set.cmd?" f"user={runbook.username}+pass=" f"{runbook.password}+cmd=setpower+P6" ) @@ -45,10 +47,16 @@ def type_name(cls) -> str: def type_schema(cls) -> Type[schema.TypedSchema]: return IPPowerSchema - def on(self, port: int) -> None: + def on(self, port: str) -> None: request_on = f"{self._request_cmd}{port}=1" - requests.get(request_on) + try: + requests.get(request_on, timeout=REQUEST_TIMEOUT) + except requests.Timeout: + raise LisaException(f"Failed to turn off port {port}") - def off(self, port: int) -> None: + def off(self, port: str) -> None: request_off = f"{self._request_cmd}{port}=0" - requests.get(request_off) + try: + requests.get(request_off, timeout=REQUEST_TIMEOUT) + except requests.Timeout: + raise LisaException(f"Failed to turn off port {port}") diff --git a/lisa/sut_orchestrator/baremetal/schema.py b/lisa/sut_orchestrator/baremetal/schema.py index 96225daec3..0772190344 100644 --- a/lisa/sut_orchestrator/baremetal/schema.py +++ b/lisa/sut_orchestrator/baremetal/schema.py @@ -74,7 +74,7 @@ class KeyLoaderSchema(schema.TypedSchema, schema.ExtendableSchemaMixin): @dataclass_json() -@dataclass +@dataclass class BootConfigSchema(schema.TypedSchema, schema.ExtendableSchemaMixin): type: str = field(default="boot_config", metadata=field_metadata(required=True)) @@ -83,7 +83,7 @@ class BootConfigSchema(schema.TypedSchema, schema.ExtendableSchemaMixin): @dataclass class IPPowerSchema(schema.TypedSchema, schema.ExtendableSchemaMixin): type: str = field(default="Ip9285", metadata=field_metadata(required=True)) - hostname: str = "" + host: str = "" username: str = "" password: str = ""