]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/nvmeof: use nvmeof module during orch nvmeof apply
authorTomer Haskalovitch <tomer.haska@ibm.com>
Tue, 24 Feb 2026 11:38:00 +0000 (13:38 +0200)
committerTomer Haskalovitch <tomer.haska@ibm.com>
Thu, 26 Feb 2026 07:32:47 +0000 (09:32 +0200)
Added a call to create_pool_if_not_exists during the execution of ceph orch apply nvmeof command.

Fixes: https://tracker.ceph.com/issues/74702
Signed-off-by: Tomer Haskalovitch <tomer.haska@ibm.com>
src/pybind/mgr/orchestrator/module.py

index 3a7d453f799ac745c43dd7201d703ab47dde4441..876f1c536d63eddf25dc04891697f5f9bc13f643 100644 (file)
@@ -2117,10 +2117,23 @@ 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,
-                      pool: str,
-                      group: str,
+                      _end_positional_: int = 0,
+                      pool: str = ".nvmeof",
+                      group: str = '',
                       placement: Optional[str] = None,
                       unmanaged: bool = False,
                       dry_run: bool = False,
@@ -2128,11 +2141,18 @@ Usage:
                       no_overwrite: bool = False,
                       inbuf: Optional[str] = None) -> HandleCommandResult:
         """Scale an nvmeof service"""
+        if group == '':
+            raise OrchestratorValidationError('The --group argument is required')
+
         if inbuf:
             raise OrchestratorValidationError('unrecognized command -i; -h or --help for usage')
 
+        if pool == ".nvmeof":
+            self._create_nvmeof_metadata_pool_if_needed()
+
+        cleanpool = pool.lstrip('.')
         spec = NvmeofServiceSpec(
-            service_id=f'{pool}.{group}' if group else pool,
+            service_id=f'{cleanpool}.{group}' if group else cleanpool,
             pool=pool,
             group=group,
             placement=PlacementSpec.from_string(placement),