From: Kushal Deb Date: Tue, 7 Apr 2026 14:00:22 +0000 (+0530) Subject: mgr/cephadm: create default pool for nvmeof X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6fa0fca6d76c6990d374f3626e028bb52f88aa86;p=ceph.git mgr/cephadm: create default pool for nvmeof Signed-off-by: Kushal Deb --- diff --git a/src/pybind/mgr/cephadm/module.py b/src/pybind/mgr/cephadm/module.py index 347305c64995..78c48ee08e4c 100644 --- a/src/pybind/mgr/cephadm/module.py +++ b/src/pybind/mgr/cephadm/module.py @@ -62,7 +62,7 @@ from mgr_module import ( NotifyType, MonCommandFailed, ) -from mgr_util import build_url +from mgr_util import build_url, NvmeofMetadataPoolHelper import orchestrator from orchestrator.module import to_format, Format @@ -3922,6 +3922,8 @@ Then run the following: nvmeof_spec = cast(NvmeofServiceSpec, spec) assert nvmeof_spec.pool is not None, "Pool cannot be None for nvmeof services" assert nvmeof_spec.service_id is not None # for mypy + if nvmeof_spec.pool == '.nvmeof': + NvmeofMetadataPoolHelper(self).create_pool_if_needed() try: self._check_pool_exists(nvmeof_spec.pool, nvmeof_spec.service_name()) except OrchestratorError as e: diff --git a/src/pybind/mgr/mgr_util.py b/src/pybind/mgr/mgr_util.py index d80991e49efd..fa44e6c56b90 100644 --- a/src/pybind/mgr/mgr_util.py +++ b/src/pybind/mgr/mgr_util.py @@ -440,6 +440,28 @@ class CephFSEarmarkResolver: return False +class NvmeofMetadataPoolHelper: + def __init__(self, mgr: "MgrModule") -> None: + self.mgr = mgr + + def is_module_enabled(self, module: str) -> bool: + mgr_map = self.mgr.get('mgr_map') + return ( + module in mgr_map.get('modules', []) + or module in mgr_map.get('always_on_modules', {}).get(self.mgr.release_name, []) + ) + + def create_pool_if_needed(self) -> None: + from orchestrator import OrchestratorError + + if not self.is_module_enabled('nvmeof'): + raise OrchestratorError( + 'NVMe-oF support requires the nvmeof manager module to be enabled before proceeding. ' + 'Enable it with: ceph mgr module enable nvmeof' + ) + self.mgr.remote('nvmeof', 'create_pool_if_not_exists') + + @contextlib.contextmanager def open_filesystem(fsc: CephfsClient, fs_name: str) -> Generator["cephfs.LibCephFS", None, None]: """ diff --git a/src/pybind/mgr/orchestrator/module.py b/src/pybind/mgr/orchestrator/module.py index 876f1c536d63..4b4489237e87 100644 --- a/src/pybind/mgr/orchestrator/module.py +++ b/src/pybind/mgr/orchestrator/module.py @@ -22,7 +22,7 @@ from ceph.deployment.hostspec import SpecValidationError from ceph.deployment.utils import unwrap_ipv6 from ceph.utils import datetime_now from ceph.cephadm.images import NonCephImageServiceTypes -from mgr_util import to_pretty_timedelta, format_bytes, parse_combined_pem_file +from mgr_util import to_pretty_timedelta, format_bytes, parse_combined_pem_file, NvmeofMetadataPoolHelper from mgr_module import MgrModule, HandleCommandResult, Option from object_format import Format @@ -2117,18 +2117,6 @@ Usage: return self._apply_misc([spec], dry_run, format, no_overwrite) - def _is_module_enabled(self, module: str) -> bool: - mgr_map = self.get('mgr_map') - return ( - module in mgr_map.get('modules', []) - or module in mgr_map.get('always_on_modules', []).get(self.release_name, []) - ) - - def _create_nvmeof_metadata_pool_if_needed(self) -> None: - if not self._is_module_enabled('nvmeof'): - raise OrchestratorError('nvmeof module must be enabled to use .nvmeof pool') - self.remote('nvmeof', 'create_pool_if_not_exists') - @OrchestratorCLICommand.Write('orch apply nvmeof') def _apply_nvmeof(self, _end_positional_: int = 0, @@ -2148,7 +2136,8 @@ Usage: raise OrchestratorValidationError('unrecognized command -i; -h or --help for usage') if pool == ".nvmeof": - self._create_nvmeof_metadata_pool_if_needed() + nvmeof_pool_helper = NvmeofMetadataPoolHelper(self) + nvmeof_pool_helper.create_pool_if_needed() cleanpool = pool.lstrip('.') spec = NvmeofServiceSpec( diff --git a/src/pybind/mgr/orchestrator/tests/test_orchestrator.py b/src/pybind/mgr/orchestrator/tests/test_orchestrator.py index 3c6ed7ad7cef..88aee08a0103 100644 --- a/src/pybind/mgr/orchestrator/tests/test_orchestrator.py +++ b/src/pybind/mgr/orchestrator/tests/test_orchestrator.py @@ -334,7 +334,10 @@ class TestApplyNvmeof: res = self.m._apply_nvmeof(pool=".nvmeof", group="mygroup") assert res.retval != 0 - assert "nvmeof module must be enabled to use .nvmeof pool" in res.stderr + assert ( + "NVMe-oF support requires the nvmeof manager module to be enabled before proceeding. " + "Enable it with: ceph mgr module enable nvmeof" + ) in res.stderr mock_remote.assert_not_called() mock_apply_misc.assert_not_called()