]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/pybind/mgr/dashboard/controllers/mgr_modules.py
Import ceph 15.2.8
[ceph.git] / ceph / src / pybind / mgr / dashboard / controllers / mgr_modules.py
index 358ae8be56abe1045441c16f97e4626843ab11ad..b558bed065301784b636fa94e2bb71832e8d078d 100644 (file)
@@ -1,7 +1,8 @@
 # -*- coding: utf-8 -*-
 from __future__ import absolute_import
 
-from . import ApiController, RESTController
+from . import ApiController, RESTController, \
+    allow_empty_body
 from .. import mgr
 from ..security import Scope
 from ..services.ceph_service import CephService
@@ -21,18 +22,19 @@ class MgrModules(RESTController):
         """
         result = []
         mgr_map = mgr.get('mgr_map')
+        always_on_modules = mgr_map['always_on_modules'].get(mgr.release_name, [])
         for module_config in mgr_map['available_modules']:
-            if module_config['name'] not in self.ignore_modules:
+            module_name = module_config['name']
+            if module_name not in self.ignore_modules:
+                always_on = module_name in always_on_modules
+                enabled = module_name in mgr_map['modules'] or always_on
                 result.append({
-                    'name': module_config['name'],
-                    'enabled': False,
+                    'name': module_name,
+                    'enabled': enabled,
+                    'always_on': always_on,
                     'options': self._convert_module_options(
                         module_config['module_options'])
                 })
-        for name in mgr_map['modules']:
-            if name not in self.ignore_modules:
-                obj = find_object_in_list('name', name, result)
-                obj['enabled'] = True
         return result
 
     def get(self, module_name):
@@ -68,6 +70,7 @@ class MgrModules(RESTController):
 
     @RESTController.Resource('POST')
     @handle_send_command_error('mgr_modules')
+    @allow_empty_body
     def enable(self, module_name):
         """
         Enable the specified Ceph Mgr module.
@@ -80,6 +83,7 @@ class MgrModules(RESTController):
 
     @RESTController.Resource('POST')
     @handle_send_command_error('mgr_modules')
+    @allow_empty_body
     def disable(self, module_name):
         """
         Disable the specified Ceph Mgr module.
@@ -157,12 +161,13 @@ class MgrModules(RESTController):
                 else:
                     option['default_value'] = str_to_bool(
                         option['default_value'])
-            elif option['type'] == 'float':
+            elif option['type'] in ['float', 'uint', 'int', 'size', 'secs']:
+                cls = {
+                    'float': float
+                }.get(option['type'], int)
                 for name in ['default_value', 'min', 'max']:
-                    if option[name]:  # Skip empty entries
-                        option[name] = float(option[name])
-            elif option['type'] in ['uint', 'int', 'size', 'secs']:
-                for name in ['default_value', 'min', 'max']:
-                    if option[name]:  # Skip empty entries
-                        option[name] = int(option[name])
+                    if option[name] == 'None':  # This is Python None
+                        option[name] = None
+                    elif option[name]:  # Skip empty entries
+                        option[name] = cls(option[name])
         return options