From: John Mulligan Date: Wed, 25 Feb 2026 00:21:55 +0000 (-0500) Subject: mgr/smb: add support for configuring log level values X-Git-Tag: v21.0.0~145^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=660f419328f3666a45a64af6cdb785ad407694d1;p=ceph.git mgr/smb: add support for configuring log level values For the "smb" logging set the log level in the samba global configuration. Allow specifying a true log level or make some "educated guesses" if a log level "word" is given. For the "ctdb" logging set the log level via a supported log level term or take an educated guess that the user wants info level logging. Signed-off-by: John Mulligan --- diff --git a/src/pybind/mgr/smb/handler.py b/src/pybind/mgr/smb/handler.py index 35c371652bdc..ceb11104bb8b 100644 --- a/src/pybind/mgr/smb/handler.py +++ b/src/pybind/mgr/smb/handler.py @@ -17,6 +17,7 @@ import dataclasses import logging import time +import ceph.smb.constants from ceph.deployment.service_spec import SMBExternalCephCluster, SMBSpec from ceph.fs.earmarking import EarmarkTopScope @@ -944,6 +945,7 @@ def _generate_config(conf: _ClusterConf) -> Dict[str, Any]: cluster_global_opts['idmap config * : backend'] = 'autorid' cluster_global_opts['idmap config * : range'] = '2000-9999999' cluster_global_opts['smb ports'] = str(_smb_port(cluster)) + _set_debug_level(cluster_global_opts, conf) share_configs = { share.resource.name: _generate_share(share) for share in conf.shares @@ -1069,6 +1071,7 @@ def _generate_smb_service_spec( remote_control_ssl_key=rc_key, remote_control_ca_cert=rc_ca_cert, ceph_cluster_configs=ceph_cluster_configs, + tunables=_service_spec_tunables(cluster), ) @@ -1235,3 +1238,61 @@ def _tls_uri( return None uri = tls_credential_entries[src.ref].uri return f'URI:{uri}' + + +def _get_log_level(cluster: resources.Cluster, key: str) -> str: + if not cluster.debug_level: + return '' + return str(cluster.debug_level.get(key) or '').upper() + + +def _smb_log_level(cluster: resources.Cluster) -> str: + level = orig = _get_log_level(cluster, 'samba') + if not level: + return '' + if level.isdigit(): + return level + # tier mapping + for word, low, hi in ceph.smb.constants.DEBUG_LEVEL_TIERS: + if level == word: + level = str(hi) + if not level: + level = '1' + log.info('Mapped debug level %s to %s', orig, level) + return level + + +def _ctdb_log_level(cluster: resources.Cluster) -> str: + level = orig = _get_log_level(cluster, 'ctdb') + if not level: + return '' + if level in ceph.smb.constants.DEBUG_LEVEL_TERMS: + return level + # tier mapping + for word, low, hi in ceph.smb.constants.DEBUG_LEVEL_TIERS: + try: + lval = int(level) + except ValueError: + continue + if lval in range(low, hi + 1): + level = word + if not level: + level = 'INFO' + log.info('Mapped debug level %s to %s', orig, level) + return level + + +def _set_debug_level(opts: Dict[str, Any], conf: _ClusterConf) -> None: + level = _smb_log_level(conf.resource) + if not level: + return + opts['log level'] = level + + +def _service_spec_tunables( + cluster: resources.Cluster, +) -> Optional[Dict[str, str]]: + level = _ctdb_log_level(cluster) + if not level: + return None + return {'log_level.ctdb': level}