forked from TrueCloudLab/frostfs-testlib
51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
from abc import ABC, abstractmethod
|
|
from dataclasses import dataclass, field
|
|
from typing import Any, Optional
|
|
|
|
from frostfs_testlib.plugins import load_plugin
|
|
from frostfs_testlib.storage.cluster import Cluster, ClusterNode
|
|
from frostfs_testlib.storage.dataclasses.wallet import WalletInfo
|
|
|
|
|
|
@dataclass
|
|
class S3Credentials:
|
|
access_key: str
|
|
secret_key: str
|
|
|
|
|
|
@dataclass
|
|
class User:
|
|
name: str
|
|
attributes: dict[str, Any] = field(default_factory=dict)
|
|
wallet: WalletInfo | None = None
|
|
s3_credentials: S3Credentials | None = None
|
|
|
|
|
|
class S3CredentialsProvider(ABC):
|
|
def __init__(self, cluster: Cluster) -> None:
|
|
self.cluster = cluster
|
|
|
|
@abstractmethod
|
|
def provide(self, user: User, cluster_node: ClusterNode, location_constraints: Optional[str] = None, **kwargs) -> S3Credentials:
|
|
raise NotImplementedError("Directly called abstract class?")
|
|
|
|
|
|
class GrpcCredentialsProvider(ABC):
|
|
def __init__(self, cluster: Cluster) -> None:
|
|
self.cluster = cluster
|
|
|
|
@abstractmethod
|
|
def provide(self, user: User, cluster_node: ClusterNode, **kwargs) -> WalletInfo:
|
|
raise NotImplementedError("Directly called abstract class?")
|
|
|
|
|
|
class CredentialsProvider(object):
|
|
S3: S3CredentialsProvider
|
|
GRPC: GrpcCredentialsProvider
|
|
|
|
def __init__(self, cluster: Cluster) -> None:
|
|
config = cluster.cluster_nodes[0].host.config
|
|
s3_cls = load_plugin("frostfs.testlib.credentials_providers", config.s3_creds_plugin_name)
|
|
self.S3 = s3_cls(cluster)
|
|
grpc_cls = load_plugin("frostfs.testlib.credentials_providers", config.grpc_creds_plugin_name)
|
|
self.GRPC = grpc_cls(cluster)
|