]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr: add MgrModule.OPTIONS definitions to modules
authorJohn Spray <john.spray@redhat.com>
Mon, 16 Apr 2018 16:10:13 +0000 (12:10 -0400)
committerJohn Spray <john.spray@redhat.com>
Mon, 23 Apr 2018 14:14:31 +0000 (10:14 -0400)
They need these to do upgrades properly.  Where there
was an existing structure describing config, merge
these together to avoid having two lists of options.

Signed-off-by: John Spray <john.spray@redhat.com>
src/pybind/mgr/balancer/module.py
src/pybind/mgr/dashboard/module.py
src/pybind/mgr/dashboard/settings.py
src/pybind/mgr/influx/module.py
src/pybind/mgr/localpool/module.py
src/pybind/mgr/prometheus/module.py
src/pybind/mgr/restful/module.py
src/pybind/mgr/selftest/module.py
src/pybind/mgr/zabbix/module.py

index 289fc127d83b9382d4bc358c2045a3eef7a03ec5..91d6722968aebe818b7fd2cd5090e715fe80e968 100644 (file)
@@ -201,6 +201,20 @@ class Eval:
         return r
 
 class Module(MgrModule):
+    OPTIONS = [
+            {'name': 'active'},
+            {'name': 'begin_time'},
+            {'name': 'crush_compat_max_iteratons'},
+            {'name': 'crush_compat_step'},
+            {'name': 'end_time'},
+            {'name': 'max_misplaced'},
+            {'name': 'min_score'},
+            {'name': 'mode'},
+            {'name': 'sleep_interval'},
+            {'name': 'upmap_max_iterations'},
+            {'name': 'upmap_max_deviations'},
+    ]
+
     COMMANDS = [
         {
             "cmd": "balancer status",
index 5bd0007af31d515d021cffc10a81be4b30fcc936..67fcc20a510cbe6d1d0f2b6909773518cfd8554d 100644 (file)
@@ -30,7 +30,8 @@ from .controllers import generate_routes, json_error_page
 from .controllers.auth import Auth
 from .tools import SessionExpireAtBrowserCloseTool, NotificationQueue, \
                    RequestLoggingTool, TaskManager
-from .settings import options_command_list, handle_option_command
+from .settings import options_command_list, options_schema_list, \
+                      handle_option_command
 
 
 # cherrypy likes to sys.exit on error.  don't let it take us down too!
@@ -73,6 +74,16 @@ class Module(MgrModule):
     ]
     COMMANDS.extend(options_command_list())
 
+    OPTIONS = [
+        {'name': 'server_addr'},
+        {'name': 'server_port'},
+        {'name': 'session-expire'},
+        {'name': 'password'},
+        {'name': 'url_prefix'},
+        {'name': 'username'},
+    ]
+    OPTIONS.extend(options_schema_list())
+
     @property
     def url_prefix(self):
         return self._url_prefix
index bb5c3c613098171746bb62b5be3f97cde9760129..3875f268254a9d374d36b7ea152c8c74c345abe0 100644 (file)
@@ -102,6 +102,19 @@ def options_command_list():
     return cmd_list
 
 
+def options_schema_list():
+    def filter_attr(member):
+        return not inspect.isroutine(member)
+
+    result = []
+    for option, value in inspect.getmembers(Options, filter_attr):
+        if option.startswith('_'):
+            continue
+        result.append({'name': option, 'default': value[0]})
+
+    return result
+
+
 def handle_option_command(cmd):
     if cmd['prefix'] not in _OPTIONS_COMMAND_MAP:
         return (-errno.ENOSYS, '', "Command not found '{}'".format(cmd['prefix']))
index aea8b913e79010be4ebb5a10a6cb113bccab2519..d24135aa3b9a9ee058d01b62b3e2c9f8c615e41f 100644 (file)
@@ -15,6 +15,46 @@ except ImportError:
 
 
 class Module(MgrModule):
+    OPTIONS = [
+            {
+                'name': 'hostname',
+                'default': None
+            },
+            {
+                'name': 'port',
+                'default': 8086
+            },
+            {
+                'name': 'database',
+                'default': 'ceph'
+            },
+            {
+                'name': 'username',
+                'default': None
+            },
+            {
+                'name': 'password',
+                'default': None
+            },
+            {
+                'name': 'interval',
+                'default': 30
+            },
+            {
+                'name': 'ssl',
+                'default': 'false'
+            },
+            {
+                'name': 'verify_ssl',
+                'default': 'true'
+            },
+    ]
+
+    @property
+    def config_keys(self):
+        return dict((o['name'], o.get('default', None))
+                for o in self.OPTIONS)
+
     COMMANDS = [
         {
             "cmd": "influx config-set name=key,type=CephString "
@@ -39,17 +79,6 @@ class Module(MgrModule):
         },
     ]
 
-    config_keys = {
-        'hostname': None,
-        'port': 8086,
-        'database': 'ceph',
-        'username': None,
-        'password': None,
-        'interval': 30,
-        'ssl': 'false',
-        'verify_ssl': 'true'
-    }
-
     def __init__(self, *args, **kwargs):
         super(Module, self).__init__(*args, **kwargs)
         self.event = Event()
index fac3d1c7f6c71ebd6d829897df608066a1ee5cba..794c1dba39617de04c30fa186f5b59c3c0ac112b 100644 (file)
@@ -3,6 +3,16 @@ import json
 import threading
 
 class Module(MgrModule):
+
+    OPTIONS = [
+            {'name': 'failure_domain'},
+            {'name': 'min_size'},
+            {'name': 'num_rep'},
+            {'name': 'pg_num'},
+            {'name': 'prefix'},
+            {'name': 'subtree'},
+    ]
+
     def __init__(self, *args, **kwargs):
         super(Module, self).__init__(*args, **kwargs)
         self.serve_event = threading.Event()
index c7daa128dd8af16fee1ae408895653f2684d8d18..4cdde9809d05d7846c6ded83ab2128918e20338d 100644 (file)
@@ -337,6 +337,11 @@ class Module(MgrModule):
         },
     ]
 
+    OPTIONS = [
+            {'name': 'server_addr'},
+            {'name': 'server_port'},
+    ]
+
     def __init__(self, *args, **kwargs):
         super(Module, self).__init__(*args, **kwargs)
         self.metrics = Metrics()
index e1b76aa3c75e6dbb7ec0be4f9d7afdcdeadd5419..8856987cd37a6585dec008aaac25a9541b4df2e4 100644 (file)
@@ -203,6 +203,12 @@ class CommandsRequest(object):
 
 
 class Module(MgrModule):
+    OPTIONS = [
+        {'name': 'server_addr'},
+        {'name': 'server_port'},
+        {'name': 'key_file'},
+    ]
+
     COMMANDS = [
         {
             "cmd": "restful create-key name=key_name,type=CephString",
index ae8f50c47d5c7c261e46a21fd034b1cab646e38a..dfc57ae5c2bfdbf57e46125a33775651270b70c4 100644 (file)
@@ -25,6 +25,14 @@ class Module(MgrModule):
 
     WORKLOADS = (WORKLOAD_COMMAND_SPAM, WORKLOAD_THROW_EXCEPTION)
 
+    # The test code in qa/ relies on these options existing -- they
+    # are of course not really used for anything in the module
+    OPTIONS = [
+            {'name': 'testkey'},
+            {'name': 'testlkey'},
+            {'name': 'testnewline'}
+    ]
+
     COMMANDS = [
             {
                 "cmd": "mgr self-test run",
index 128d457022005db57a97906640f12e0341c150d0..df319f7b05ca0e551d2bf5ce6d058529179f1e43 100644 (file)
@@ -52,13 +52,33 @@ class Module(MgrModule):
     config = dict()
     ceph_health_mapping = {'HEALTH_OK': 0, 'HEALTH_WARN': 1, 'HEALTH_ERR': 2}
 
-    config_keys = {
-        'zabbix_sender': '/usr/bin/zabbix_sender',
-        'zabbix_host': None,
-        'zabbix_port': 10051,
-        'identifier': "",
-        'interval': 60
-    }
+    @property
+    def config_keys(self):
+        return dict((o['name'], o.get('default', None))
+                for o in self.OPTIONS)
+
+    OPTIONS = [
+            {
+                'name': 'zabbix_sender',
+                'default': '/usr/bin/zabbix_sender'
+            },
+            {
+                'name': 'zabbix_host',
+                'default': None
+            },
+            {
+                'name': 'zabbix_port',
+                'default': 10051
+            },
+            {
+                'name': 'identifier',
+                'default': ""
+            },
+            {
+                'name': 'interval',
+                'default': 60
+            }
+    ]
 
     COMMANDS = [
         {