From a427a8f29939ef2d021a1ad6c0b9d9d90f676a18 Mon Sep 17 00:00:00 2001 From: Patrick Nawracay Date: Tue, 29 May 2018 15:45:35 +0200 Subject: [PATCH] mgr/dashboard: Fix get/set for boolean settings Signed-off-by: Patrick Nawracay --- src/pybind/mgr/dashboard/settings.py | 12 ++++++++++-- src/pybind/mgr/dashboard/tests/test_settings.py | 9 +++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/pybind/mgr/dashboard/settings.py b/src/pybind/mgr/dashboard/settings.py index c9cdfd668c8ca..c060501224fd1 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 13c569e520a39..0087f7e6d59e9 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'}) -- 2.39.5