From: Patrick Nawracay Date: Tue, 29 May 2018 13:45:35 +0000 (+0200) Subject: mgr/dashboard: Fix get/set for boolean settings X-Git-Tag: v14.0.1~1141^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a427a8f29939ef2d021a1ad6c0b9d9d90f676a18;p=ceph-ci.git mgr/dashboard: Fix get/set for boolean settings Signed-off-by: Patrick Nawracay --- diff --git a/src/pybind/mgr/dashboard/settings.py b/src/pybind/mgr/dashboard/settings.py index c9cdfd668c8..c060501224f 100644 --- a/src/pybind/mgr/dashboard/settings.py +++ b/src/pybind/mgr/dashboard/settings.py @@ -38,7 +38,12 @@ class Options(object): class SettingsMeta(type): def __getattr__(cls, attr): default, stype = getattr(Options, attr) - return stype(mgr.get_config(attr, default)) + if stype == bool and str(mgr.get_config(attr, + default)).lower() == 'false': + value = False + else: + value = stype(mgr.get_config(attr, default)) + return value def __setattr__(cls, attr, value): if not attr.startswith('_') and hasattr(Options, attr): @@ -141,5 +146,8 @@ def handle_option_command(cmd): elif cmd['prefix'].startswith('dashboard get'): return 0, str(getattr(Settings, opt['name'])), '' elif cmd['prefix'].startswith('dashboard set'): - setattr(Settings, opt['name'], opt['type'](cmd['value'])) + value = opt['type'](cmd['value']) + if opt['type'] == bool and cmd['value'].lower() == 'false': + value = False + setattr(Settings, opt['name'], value) return 0, 'Option {} updated'.format(opt['name']), '' diff --git a/src/pybind/mgr/dashboard/tests/test_settings.py b/src/pybind/mgr/dashboard/tests/test_settings.py index 13c569e520a..0087f7e6d59 100644 --- a/src/pybind/mgr/dashboard/tests/test_settings.py +++ b/src/pybind/mgr/dashboard/tests/test_settings.py @@ -17,6 +17,7 @@ class SettingsTest(unittest.TestCase): # pylint: disable=protected-access settings.Options.GRAFANA_API_HOST = ('localhost', str) settings.Options.GRAFANA_API_PORT = (3000, int) + settings.Options.GRAFANA_ENABLED = (False, bool) settings._OPTIONS_COMMAND_MAP = settings._options_command_map() @classmethod @@ -38,11 +39,19 @@ class SettingsTest(unittest.TestCase): def test_get_setting(self): self.assertEqual(Settings.GRAFANA_API_HOST, 'localhost') + self.assertEqual(Settings.GRAFANA_API_PORT, 3000) + self.assertEqual(Settings.GRAFANA_ENABLED, False) def test_set_setting(self): Settings.GRAFANA_API_HOST = 'grafanahost' self.assertEqual(Settings.GRAFANA_API_HOST, 'grafanahost') + Settings.GRAFANA_API_PORT = 50 + self.assertEqual(Settings.GRAFANA_API_PORT, 50) + + Settings.GRAFANA_ENABLED = True + self.assertEqual(Settings.GRAFANA_ENABLED, True) + def test_get_cmd(self): r, out, err = handle_option_command( {'prefix': 'dashboard get-grafana-api-port'})