mirror of
https://github.com/ceph/ceph
synced 2025-02-24 11:37:37 +00:00
cephadm/smb: convert config object to use a dataclass
While working on the smb.py file I began to be annoyed at the Config class and the need to repeat myself. Now that cephadm is not expected to run on python versions older than 3.7 I think it's safe to convert Config to use a dataclass. While making the change to a dataclass I also chose to make it a frozen dataclass to help eliminate any future bugs wrt mutating the config object. Signed-off-by: John Mulligan <jmulligan@redhat.com>
This commit is contained in:
parent
13f4266694
commit
2b30c8e895
@ -1,3 +1,4 @@
|
||||
import dataclasses
|
||||
import enum
|
||||
import json
|
||||
import logging
|
||||
@ -67,83 +68,32 @@ class ClusterPublicIP(NamedTuple):
|
||||
return cls(address, destinations)
|
||||
|
||||
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class Config:
|
||||
identity: DaemonIdentity
|
||||
instance_id: str
|
||||
source_config: str
|
||||
samba_debug_level: int
|
||||
ctdb_log_level: str
|
||||
debug_delay: int
|
||||
domain_member: bool
|
||||
clustered: bool
|
||||
join_sources: List[str]
|
||||
user_sources: List[str]
|
||||
custom_dns: List[str]
|
||||
smb_port: int
|
||||
ceph_config_entity: str
|
||||
vhostname: str
|
||||
metrics_image: str
|
||||
metrics_port: int
|
||||
samba_debug_level: int = 0
|
||||
ctdb_log_level: str = ''
|
||||
debug_delay: int = 0
|
||||
join_sources: List[str] = dataclasses.field(default_factory=list)
|
||||
user_sources: List[str] = dataclasses.field(default_factory=list)
|
||||
custom_dns: List[str] = dataclasses.field(default_factory=list)
|
||||
smb_port: int = 0
|
||||
ceph_config_entity: str = 'client.admin'
|
||||
vhostname: str = ''
|
||||
metrics_image: str = ''
|
||||
metrics_port: int = 0
|
||||
# clustering related values
|
||||
rank: int
|
||||
rank_generation: int
|
||||
cluster_meta_uri: str
|
||||
cluster_lock_uri: str
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
identity: DaemonIdentity,
|
||||
instance_id: str,
|
||||
source_config: str,
|
||||
domain_member: bool,
|
||||
clustered: bool,
|
||||
samba_debug_level: int = 0,
|
||||
ctdb_log_level: str = '',
|
||||
debug_delay: int = 0,
|
||||
join_sources: Optional[List[str]] = None,
|
||||
user_sources: Optional[List[str]] = None,
|
||||
custom_dns: Optional[List[str]] = None,
|
||||
smb_port: int = 0,
|
||||
ceph_config_entity: str = 'client.admin',
|
||||
vhostname: str = '',
|
||||
metrics_image: str = '',
|
||||
metrics_port: int = 0,
|
||||
rank: int = -1,
|
||||
rank_generation: int = -1,
|
||||
cluster_meta_uri: str = '',
|
||||
cluster_lock_uri: str = '',
|
||||
cluster_public_addrs: Optional[List[ClusterPublicIP]] = None,
|
||||
) -> None:
|
||||
self.identity = identity
|
||||
self.instance_id = instance_id
|
||||
self.source_config = source_config
|
||||
self.domain_member = domain_member
|
||||
self.clustered = clustered
|
||||
self.samba_debug_level = samba_debug_level
|
||||
self.ctdb_log_level = ctdb_log_level
|
||||
self.debug_delay = debug_delay
|
||||
self.join_sources = join_sources or []
|
||||
self.user_sources = user_sources or []
|
||||
self.custom_dns = custom_dns or []
|
||||
self.smb_port = smb_port
|
||||
self.ceph_config_entity = ceph_config_entity
|
||||
self.vhostname = vhostname
|
||||
self.metrics_image = metrics_image
|
||||
self.metrics_port = metrics_port
|
||||
self.rank = rank
|
||||
self.rank_generation = rank_generation
|
||||
self.cluster_meta_uri = cluster_meta_uri
|
||||
self.cluster_lock_uri = cluster_lock_uri
|
||||
self.cluster_public_addrs = cluster_public_addrs
|
||||
|
||||
def __str__(self) -> str:
|
||||
return (
|
||||
f'SMB Config[id={self.instance_id},'
|
||||
f' source_config={self.source_config},'
|
||||
f' domain_member={self.domain_member},'
|
||||
f' clustered={self.clustered}]'
|
||||
)
|
||||
rank: int = -1
|
||||
rank_generation: int = -1
|
||||
cluster_meta_uri: str = ''
|
||||
cluster_lock_uri: str = ''
|
||||
cluster_public_addrs: List[ClusterPublicIP] = dataclasses.field(
|
||||
default_factory=list
|
||||
)
|
||||
|
||||
def config_uris(self) -> List[str]:
|
||||
uris = [self.source_config]
|
||||
@ -432,7 +382,7 @@ class SMB(ContainerDaemonForm):
|
||||
self._raw_configs: Dict[str, Any] = context_getters.fetch_configs(ctx)
|
||||
self._config_keyring = context_getters.get_config_and_keyring(ctx)
|
||||
self._cached_layout: Optional[ContainerLayout] = None
|
||||
self._rank_info = context_getters.fetch_rank_info(ctx)
|
||||
self._rank_info = context_getters.fetch_rank_info(ctx) or (-1, -1)
|
||||
self.smb_port = 445
|
||||
self.metrics_port = 9922
|
||||
self._network_mapper = _NetworkMapper(ctx)
|
||||
@ -502,6 +452,7 @@ class SMB(ContainerDaemonForm):
|
||||
# cache the cephadm networks->devices mapping for later
|
||||
self._network_mapper.load()
|
||||
|
||||
rank, rank_gen = self._rank_info
|
||||
self._instance_cfg = Config(
|
||||
identity=self._identity,
|
||||
instance_id=instance_id,
|
||||
@ -516,15 +467,12 @@ class SMB(ContainerDaemonForm):
|
||||
vhostname=vhostname,
|
||||
metrics_image=metrics_image,
|
||||
metrics_port=metrics_port,
|
||||
rank=rank,
|
||||
rank_generation=rank_gen,
|
||||
cluster_meta_uri=cluster_meta_uri,
|
||||
cluster_lock_uri=cluster_lock_uri,
|
||||
cluster_public_addrs=_public_addrs,
|
||||
)
|
||||
if self._rank_info:
|
||||
(
|
||||
self._instance_cfg.rank,
|
||||
self._instance_cfg.rank_generation,
|
||||
) = self._rank_info
|
||||
self._files = files
|
||||
logger.debug('SMB Instance Config: %s', self._instance_cfg)
|
||||
logger.debug('Configured files: %s', self._files)
|
||||
|
Loading…
Reference in New Issue
Block a user