+import dataclasses
import enum
import json
import logging
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]
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)
# 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,
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)