forked from TrueCloudLab/frostfs-testlib
60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
from frostfs_testlib.load.interfaces.loader import Loader
|
|
from frostfs_testlib.resources.load_params import (
|
|
LOAD_NODE_SSH_PASSWORD,
|
|
LOAD_NODE_SSH_PRIVATE_KEY_PASSPHRASE,
|
|
LOAD_NODE_SSH_PRIVATE_KEY_PATH,
|
|
LOAD_NODE_SSH_USER,
|
|
)
|
|
from frostfs_testlib.shell.interfaces import Shell, SshCredentials
|
|
from frostfs_testlib.shell.ssh_shell import SSHShell
|
|
from frostfs_testlib.storage.cluster import ClusterNode
|
|
|
|
|
|
class RemoteLoader(Loader):
|
|
def __init__(self, ssh_credentials: SshCredentials, ip: str) -> None:
|
|
self.ssh_credentials = ssh_credentials
|
|
self._ip = ip
|
|
|
|
@property
|
|
def ip(self):
|
|
return self._ip
|
|
|
|
def get_shell(self) -> Shell:
|
|
ssh_client = SSHShell(
|
|
host=self.ip,
|
|
login=self.ssh_credentials.ssh_login,
|
|
password=self.ssh_credentials.ssh_password,
|
|
private_key_path=self.ssh_credentials.ssh_key_path,
|
|
private_key_passphrase=self.ssh_credentials.ssh_key_passphrase,
|
|
)
|
|
|
|
return ssh_client
|
|
|
|
@classmethod
|
|
def from_ip_list(cls, ip_list: list[str]) -> list[Loader]:
|
|
loaders: list[Loader] = []
|
|
ssh_credentials = SshCredentials(
|
|
LOAD_NODE_SSH_USER,
|
|
LOAD_NODE_SSH_PASSWORD,
|
|
LOAD_NODE_SSH_PRIVATE_KEY_PATH,
|
|
LOAD_NODE_SSH_PRIVATE_KEY_PASSPHRASE,
|
|
)
|
|
|
|
for ip in ip_list:
|
|
loaders.append(RemoteLoader(ssh_credentials, ip))
|
|
|
|
return loaders
|
|
|
|
|
|
class NodeLoader(Loader):
|
|
"""When ClusterNode is the loader for itself (for Local scenario only)."""
|
|
|
|
def __init__(self, cluster_node: ClusterNode) -> None:
|
|
self.cluster_node = cluster_node
|
|
|
|
def get_shell(self) -> Shell:
|
|
return self.cluster_node.host.get_shell()
|
|
|
|
@property
|
|
def ip(self):
|
|
return self.cluster_node.host_ip
|