From 4af9c9677b0091ad3a5f99289230b83ebd42b53a Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 8 Jan 2018 18:47:26 -0600 Subject: [PATCH] mgr: 'config show ' Signed-off-by: Sage Weil --- src/mgr/DaemonServer.cc | 34 +++++++++++++++++++++------------- src/mgr/DaemonState.h | 12 ++++++++++++ src/mgr/MgrCommands.h | 2 +- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/src/mgr/DaemonServer.cc b/src/mgr/DaemonServer.cc index 53b3d4edc3e..ea971983102 100644 --- a/src/mgr/DaemonServer.cc +++ b/src/mgr/DaemonServer.cc @@ -1355,8 +1355,25 @@ bool DaemonServer::handle_command(MCommand *m) key.first = who.substr(0, dot); key.second = who.substr(dot + 1); DaemonStatePtr daemon = daemon_state.get(key); - if (daemon && - daemon->config_defaults_bl.length() > 0) { + string name; + if (!daemon) { + ss << "no config state for daemon " << who; + r = -ENOENT; + } else if (cmd_getval(g_ceph_context, cmdctx->cmdmap, "key", name)) { + auto p = daemon->config.find(name); + if (p != daemon->config.end() && + !p->second.empty()) { + cmdctx->odata.append(p->second.rbegin()->second + "\n"); + } else { + auto& defaults = daemon->get_config_defaults(); + auto q = defaults.find(name); + if (q != defaults.end()) { + cmdctx->odata.append(q->second + "\n"); + } else { + r = -ENOENT; + } + } + } else if (daemon->config_defaults_bl.length() > 0) { Mutex::Locker l(daemon->lock); TextTable tbl; if (f) { @@ -1414,14 +1431,8 @@ bool DaemonServer::handle_command(MCommand *m) } } else { // show-with-defaults - if (daemon->config_defaults.empty()) { - auto p = daemon->config_defaults_bl.begin(); - try { - ::decode(daemon->config_defaults, p); - } catch (buffer::error e) { - } - } - for (auto& i : daemon->config_defaults) { + auto& defaults = daemon->get_config_defaults(); + for (auto& i : defaults) { if (f) { f->open_object_section("value"); f->dump_string("name", i.first); @@ -1486,9 +1497,6 @@ bool DaemonServer::handle_command(MCommand *m) } else { cmdctx->odata.append(stringify(tbl)); } - } else { - ss << "no config state for daemon " << who; - r = -ENOENT; } cmdctx->reply(r, ss); return true; diff --git a/src/mgr/DaemonState.h b/src/mgr/DaemonState.h index 4efd91b8770..9bd0ce2c6ab 100644 --- a/src/mgr/DaemonState.h +++ b/src/mgr/DaemonState.h @@ -120,6 +120,18 @@ class DaemonState : perf_counters(types_) { } + + const std::map& get_config_defaults() { + if (config_defaults.empty() && + config_defaults_bl.length()) { + auto p = config_defaults_bl.begin(); + try { + ::decode(config_defaults, p); + } catch (buffer::error e) { + } + } + return config_defaults; + } }; typedef std::shared_ptr DaemonStatePtr; diff --git a/src/mgr/MgrCommands.h b/src/mgr/MgrCommands.h index cbbeaaa0e08..464f37316fc 100644 --- a/src/mgr/MgrCommands.h +++ b/src/mgr/MgrCommands.h @@ -133,7 +133,7 @@ COMMAND("service status", "dump service state", "service", "r", "cli,rest") COMMAND("config show " \ - "name=who,type=CephString", + "name=who,type=CephString name=key,type=CephString,req=False", "Show running configuration", "mgr", "r", "cli,rest") COMMAND("config show-with-defaults " \