)
from ..tlsobject_types import TLSCredentials, EMPTY_TLS_CREDENTIALS
from ..schedule import DaemonPlacement
+from cephadm import utils
+from dataclasses import replace
if TYPE_CHECKING:
from ..module import CephadmOrchestrator
logger.debug('smb generate_config: %r', config_blobs)
self._configure_cluster_meta(smb_spec, daemon_spec)
- deps = self.get_dependencies(self.mgr, smb_spec)
+ deps = sorted(self.get_dependencies(self.mgr, smb_spec))
return config_blobs, deps
def _cert_or_uri(self, data: Optional[str]) -> Optional[str]:
for ccc in smb_spec.ceph_cluster_configs or []:
value = _hash_ceph_cluster_config(ccc)
out.append(Dep.META(f'ceph_cluster_config.{ccc.alias}', value))
+ # Add features as a dependency
+ out.append(Dep.FIELD('features', ','.join(sorted(smb_spec.features or []))))
return out
+ def choose_next_action(
+ self,
+ scheduled_action: utils.Action,
+ daemon_type: Optional[str],
+ spec: Optional[ServiceSpec],
+ curr_deps: List[str],
+ last_deps: List[str],
+ daemon: Optional[DaemonDescription] = None,
+ ) -> utils.NextDaemonStep:
+ step = super().choose_next_action(
+ scheduled_action, daemon_type, spec, curr_deps, last_deps)
+ if step.action is utils.Action.RECONFIG:
+ sym_diff = set(curr_deps).symmetric_difference(last_deps)
+ if any(d.startswith(Dep.FIELD('features', '')) for d in sym_diff):
+ return replace(step, action=utils.Action.REDEPLOY)
+ return step
+
Network = Union[ipaddress.IPv4Network, ipaddress.IPv6Network]