Skip to content

Commit

Permalink
test
Browse files Browse the repository at this point in the history
  • Loading branch information
paull committed Jan 2, 2025
1 parent a77a26e commit f5a0fe6
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 8 deletions.
30 changes: 22 additions & 8 deletions lisa/sut_orchestrator/baremetal/ip_power.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@
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
REQUEST_SUCCESS_CODE = 200


class IPPower(subclasses.BaseClassWithRunbookMixin, ContextMixin, InitializableMixin):
def __init__(self, runbook: IPPowerSchema) -> None:
Expand All @@ -21,18 +24,18 @@ 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()


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"
)
Expand All @@ -45,10 +48,21 @@ 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)
self._set_ip_power(request_on)

def off(self, port: int) -> None:
def off(self, port: str) -> None:
request_off = f"{self._request_cmd}{port}=0"
requests.get(request_off)
self._set_ip_power(request_off)

def _set_ip_power(self, power_cmd: str) -> None:
try:
response = requests.get(power_cmd, timeout=REQUEST_TIMEOUT)
response.raise_for_status()
except requests.HTTPError as http_err:
raise LisaException(f"HTTP error: {http_err} in set_ip_power occurred")
except Exception as err:
raise LisaException(f"Other Error: {err} in set_ip_power occurred")
else:
self._log.debug(f"Command {power_cmd} in set_ip_power done")
18 changes: 18 additions & 0 deletions lisa/sut_orchestrator/baremetal/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,24 @@ class KeyLoaderSchema(schema.TypedSchema, schema.ExtendableSchemaMixin):
type: str = field(default="build", metadata=field_metadata(required=True))


@dataclass_json()
@dataclass
class BootConfigSchema(schema.TypedSchema, schema.ExtendableSchemaMixin):
type: str = field(default="boot_config", metadata=field_metadata(required=True))


@dataclass_json()
@dataclass
class IPPowerSchema(schema.TypedSchema, schema.ExtendableSchemaMixin):
type: str = field(default="Ip9285", metadata=field_metadata(required=True))
host: str = ""
username: str = ""
password: str = ""

def __post_init__(self, *args: Any, **kwargs: Any) -> None:
add_secret(self.password)


@dataclass_json()
@dataclass
class ClusterSchema(schema.TypedSchema, schema.ExtendableSchemaMixin):
Expand Down

0 comments on commit f5a0fe6

Please sign in to comment.