Skip to content

Commit ad7c409

Browse files
authored
Merge pull request ceph#60549 from phlogistonjohn/jjm-smb-dataclass-config
cephadm/smb: convert config object to use a dataclass Reviewed-by: Adam King <[email protected]>
2 parents 2cbef71 + 2b30c8e commit ad7c409

File tree

1 file changed

+24
-76
lines changed
  • src/cephadm/cephadmlib/daemons

1 file changed

+24
-76
lines changed

src/cephadm/cephadmlib/daemons/smb.py

Lines changed: 24 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import dataclasses
12
import enum
23
import json
34
import logging
@@ -67,83 +68,32 @@ def convert(cls, item: Dict[str, Any]) -> 'ClusterPublicIP':
6768
return cls(address, destinations)
6869

6970

71+
@dataclasses.dataclass(frozen=True)
7072
class Config:
7173
identity: DaemonIdentity
7274
instance_id: str
7375
source_config: str
74-
samba_debug_level: int
75-
ctdb_log_level: str
76-
debug_delay: int
7776
domain_member: bool
7877
clustered: bool
79-
join_sources: List[str]
80-
user_sources: List[str]
81-
custom_dns: List[str]
82-
smb_port: int
83-
ceph_config_entity: str
84-
vhostname: str
85-
metrics_image: str
86-
metrics_port: int
78+
samba_debug_level: int = 0
79+
ctdb_log_level: str = ''
80+
debug_delay: int = 0
81+
join_sources: List[str] = dataclasses.field(default_factory=list)
82+
user_sources: List[str] = dataclasses.field(default_factory=list)
83+
custom_dns: List[str] = dataclasses.field(default_factory=list)
84+
smb_port: int = 0
85+
ceph_config_entity: str = 'client.admin'
86+
vhostname: str = ''
87+
metrics_image: str = ''
88+
metrics_port: int = 0
8789
# clustering related values
88-
rank: int
89-
rank_generation: int
90-
cluster_meta_uri: str
91-
cluster_lock_uri: str
92-
93-
def __init__(
94-
self,
95-
*,
96-
identity: DaemonIdentity,
97-
instance_id: str,
98-
source_config: str,
99-
domain_member: bool,
100-
clustered: bool,
101-
samba_debug_level: int = 0,
102-
ctdb_log_level: str = '',
103-
debug_delay: int = 0,
104-
join_sources: Optional[List[str]] = None,
105-
user_sources: Optional[List[str]] = None,
106-
custom_dns: Optional[List[str]] = None,
107-
smb_port: int = 0,
108-
ceph_config_entity: str = 'client.admin',
109-
vhostname: str = '',
110-
metrics_image: str = '',
111-
metrics_port: int = 0,
112-
rank: int = -1,
113-
rank_generation: int = -1,
114-
cluster_meta_uri: str = '',
115-
cluster_lock_uri: str = '',
116-
cluster_public_addrs: Optional[List[ClusterPublicIP]] = None,
117-
) -> None:
118-
self.identity = identity
119-
self.instance_id = instance_id
120-
self.source_config = source_config
121-
self.domain_member = domain_member
122-
self.clustered = clustered
123-
self.samba_debug_level = samba_debug_level
124-
self.ctdb_log_level = ctdb_log_level
125-
self.debug_delay = debug_delay
126-
self.join_sources = join_sources or []
127-
self.user_sources = user_sources or []
128-
self.custom_dns = custom_dns or []
129-
self.smb_port = smb_port
130-
self.ceph_config_entity = ceph_config_entity
131-
self.vhostname = vhostname
132-
self.metrics_image = metrics_image
133-
self.metrics_port = metrics_port
134-
self.rank = rank
135-
self.rank_generation = rank_generation
136-
self.cluster_meta_uri = cluster_meta_uri
137-
self.cluster_lock_uri = cluster_lock_uri
138-
self.cluster_public_addrs = cluster_public_addrs
139-
140-
def __str__(self) -> str:
141-
return (
142-
f'SMB Config[id={self.instance_id},'
143-
f' source_config={self.source_config},'
144-
f' domain_member={self.domain_member},'
145-
f' clustered={self.clustered}]'
146-
)
90+
rank: int = -1
91+
rank_generation: int = -1
92+
cluster_meta_uri: str = ''
93+
cluster_lock_uri: str = ''
94+
cluster_public_addrs: List[ClusterPublicIP] = dataclasses.field(
95+
default_factory=list
96+
)
14797

14898
def config_uris(self) -> List[str]:
14999
uris = [self.source_config]
@@ -432,7 +382,7 @@ def __init__(self, ctx: CephadmContext, ident: DaemonIdentity):
432382
self._raw_configs: Dict[str, Any] = context_getters.fetch_configs(ctx)
433383
self._config_keyring = context_getters.get_config_and_keyring(ctx)
434384
self._cached_layout: Optional[ContainerLayout] = None
435-
self._rank_info = context_getters.fetch_rank_info(ctx)
385+
self._rank_info = context_getters.fetch_rank_info(ctx) or (-1, -1)
436386
self.smb_port = 445
437387
self.metrics_port = 9922
438388
self._network_mapper = _NetworkMapper(ctx)
@@ -502,6 +452,7 @@ def validate(self) -> None:
502452
# cache the cephadm networks->devices mapping for later
503453
self._network_mapper.load()
504454

455+
rank, rank_gen = self._rank_info
505456
self._instance_cfg = Config(
506457
identity=self._identity,
507458
instance_id=instance_id,
@@ -516,15 +467,12 @@ def validate(self) -> None:
516467
vhostname=vhostname,
517468
metrics_image=metrics_image,
518469
metrics_port=metrics_port,
470+
rank=rank,
471+
rank_generation=rank_gen,
519472
cluster_meta_uri=cluster_meta_uri,
520473
cluster_lock_uri=cluster_lock_uri,
521474
cluster_public_addrs=_public_addrs,
522475
)
523-
if self._rank_info:
524-
(
525-
self._instance_cfg.rank,
526-
self._instance_cfg.rank_generation,
527-
) = self._rank_info
528476
self._files = files
529477
logger.debug('SMB Instance Config: %s', self._instance_cfg)
530478
logger.debug('Configured files: %s', self._files)

0 commit comments

Comments
 (0)