]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr: allow specifying module option level
authorPatrick Donnelly <pdonnell@redhat.com>
Fri, 19 Apr 2024 18:31:09 +0000 (14:31 -0400)
committerPatrick Donnelly <pdonnell@ibm.com>
Tue, 25 Feb 2025 16:17:14 +0000 (11:17 -0500)
Some are for development purposes and should be filtered out by the dashboard.

Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
(cherry picked from commit 0d94eebb0dd1b3e2afdde92e1c1051affded46f2)

qa/tasks/mgr/dashboard/test_mgr_module.py
src/common/options.h
src/mgr/PyModule.cc
src/pybind/mgr/mgr_module.py

index c196c712401400cc4ef83881e9aece5c80bedbf9..2b8b672f2840036e3e77d0cf82fe19feb05a35d0 100644 (file)
@@ -112,6 +112,7 @@ class MgrModuleTest(MgrModuleTestCase):
             'last_opt_revision': module_options_object_schema,
             'leaderboard': module_options_object_schema,
             'leaderboard_description': module_options_object_schema,
+            'sqlite3_killpoint': module_options_object_schema,
             'log_level': module_options_object_schema,
             'log_to_cluster': module_options_object_schema,
             'log_to_cluster_level': module_options_object_schema,
index e1d4ec16ed704c88925cec163a2d76da527420dc..ad39936d43ae5412b259fc37e1f04f889ca9545c 100644 (file)
@@ -116,6 +116,18 @@ struct Option {
     }
   }
 
+  static level_t str_to_level(std::string_view s) {
+    if (s == "basic") {
+      return LEVEL_BASIC;
+    } else if (s == "advanced") {
+      return LEVEL_ADVANCED;
+    } else if (s == "dev") {
+      return LEVEL_DEV;
+    } else {
+      return LEVEL_UNKNOWN;
+    }
+  }
+
   enum flag_t {
     FLAG_RUNTIME = 0x1,         ///< option can be changed at runtime
     FLAG_NO_MON_UPDATE = 0x2,   ///< option cannot be changed via mon config
index 084cf3ffc1eac44e784b122928c729091f216327..20234ec57682e036b5923e56df1a34b46c233e1b 100644 (file)
@@ -609,6 +609,13 @@ int PyModule::load_options()
        option.type = t;
       }
     }
+    p = PyDict_GetItemString(pOption, "level");
+    if (p && PyLong_Check(p)) {
+      long v = PyLong_AsLong(p);
+      option.level = static_cast<Option::level_t>(v);
+    } else {
+      option.level = Option::level_t::LEVEL_ADVANCED;
+    }
     p = PyDict_GetItemString(pOption, "desc");
     if (p && PyObject_TypeCheck(p, &PyUnicode_Type)) {
       option.desc = PyUnicode_AsUTF8(p);
index 3fefd79b99419cf309276e2363479ee9f80df2ca..15939a2628009302830360e35910aa953bd25fb8 100644 (file)
@@ -558,6 +558,11 @@ if TYPE_CHECKING:
 # common/options.h: value_t
 OptionValue = Optional[Union[bool, int, float, str]]
 
+class OptionLevel(IntEnum):
+    BASIC = 0
+    ADVANCED = 1
+    DEV = 2
+    UNKNOWN = 3
 
 class Option(Dict):
     """
@@ -568,6 +573,7 @@ class Option(Dict):
     def __init__(
             self,
             name: str,
+            level: OptionLevel = OptionLevel.ADVANCED,
             default: OptionValue = None,
             type: 'OptionTypeLabel' = 'str',
             desc: Optional[str] = None,