]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr: 'config show <who> <key>'
authorSage Weil <sage@redhat.com>
Tue, 9 Jan 2018 00:47:26 +0000 (18:47 -0600)
committerSage Weil <sage@redhat.com>
Tue, 6 Mar 2018 20:44:49 +0000 (14:44 -0600)
Signed-off-by: Sage Weil <sage@redhat.com>
src/mgr/DaemonServer.cc
src/mgr/DaemonState.h
src/mgr/MgrCommands.h

index 53b3d4edc3e0fb05515a68da110e6835d096d084..ea97198310270f2a3930e2487f1786858aac8fe2 100644 (file)
@@ -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;
index 4efd91b8770f74c3eaebb1140b81673106d6406a..9bd0ce2c6abc2e6976048e1a0116e4d28f247a49 100644 (file)
@@ -120,6 +120,18 @@ class DaemonState
     : perf_counters(types_)
   {
   }
+
+  const std::map<std::string,std::string>& 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<DaemonState> DaemonStatePtr;
index cbbeaaa0e08fc89b7e878cb03dca303080c0fbd0..464f37316fc9a1d56deedbafc30c2d042268b27d 100644 (file)
@@ -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 " \