27 lines
704 B
Python
27 lines
704 B
Python
|
from collections.abc import Callable
|
||
|
from typing import TypeVar
|
||
|
|
||
|
from ..ssh import Host, HostGroup, HostResult
|
||
|
from .machines import Machine
|
||
|
|
||
|
T = TypeVar("T")
|
||
|
|
||
|
|
||
|
class MachineGroup:
|
||
|
def __init__(self, machines: list[Machine]) -> None:
|
||
|
self.group = HostGroup(list(m.target_host for m in machines))
|
||
|
|
||
|
def run_function(
|
||
|
self, func: Callable[[Machine], T], check: bool = True
|
||
|
) -> list[HostResult[T]]:
|
||
|
"""
|
||
|
Function to run for each host in the group in parallel
|
||
|
|
||
|
@func the function to call
|
||
|
"""
|
||
|
|
||
|
def wrapped_func(host: Host) -> T:
|
||
|
return func(host.meta["machine"])
|
||
|
|
||
|
return self.group.run_function(wrapped_func, check=check)
|