]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
common: ceph_context: add admin socket command 'config diff' 2312/head
authorJoao Eduardo Luis <joao.luis@inktank.com>
Tue, 26 Aug 2014 22:31:06 +0000 (23:31 +0100)
committerJoao Eduardo Luis <joao.luis@inktank.com>
Tue, 26 Aug 2014 22:31:37 +0000 (23:31 +0100)
Outputs a diff between the current config and what the daemon believes
to be its default config.

Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
src/common/ceph_context.cc

index 71b6fcb1aee58e07952581a94d3fedce5a20f7ba..4816acb334d7e8a9328882485fd8de682afd8678 100644 (file)
@@ -229,6 +229,38 @@ void CephContext::do_command(std::string command, cmdmap_t& cmdmap,
            f->dump_string(var.c_str(), buf);
        }
       }
+    } else if (command == "config diff") {
+      md_config_t def_conf;
+      def_conf.set_val("cluster", _conf->cluster);
+      def_conf.name = _conf->name;
+      def_conf.set_val("host", _conf->host);
+      def_conf.apply_changes(NULL);
+
+      map<string,pair<string,string> > diff;
+      set<string> unknown;
+      def_conf.diff(_conf, &diff, &unknown);
+      f->open_object_section("diff");
+
+      f->open_object_section("current");
+      for (map<string,pair<string,string> >::iterator p = diff.begin();
+           p != diff.end(); ++p) {
+        f->dump_string(p->first.c_str(), p->second.second);
+      }
+      f->close_section(); // current
+      f->open_object_section("defaults");
+      for (map<string,pair<string,string> >::iterator p = diff.begin();
+           p != diff.end(); ++p) {
+        f->dump_string(p->first.c_str(), p->second.first);
+      }
+      f->close_section(); // defaults
+      f->close_section(); // diff
+
+      f->open_array_section("unknown");
+      for (set<string>::iterator p = unknown.begin();
+           p != unknown.end(); ++p) {
+        f->dump_string("option", *p);
+      }
+      f->close_section(); // unknown
     } else if (command == "log flush") {
       _log->flush();
     }
@@ -286,6 +318,9 @@ CephContext::CephContext(uint32_t module_type_)
   _admin_socket->register_command("config show", "config show", _admin_hook, "dump current config settings");
   _admin_socket->register_command("config set", "config set name=var,type=CephString name=val,type=CephString,n=N",  _admin_hook, "config set <field> <val> [<val> ...]: set a config variable");
   _admin_socket->register_command("config get", "config get name=var,type=CephString", _admin_hook, "config get <field>: get the config value");
+  _admin_socket->register_command("config diff",
+      "config diff", _admin_hook,
+      "dump diff of current config and default config");
   _admin_socket->register_command("log flush", "log flush", _admin_hook, "flush log entries to log file");
   _admin_socket->register_command("log dump", "log dump", _admin_hook, "dump recent log entries to log file");
   _admin_socket->register_command("log reopen", "log reopen", _admin_hook, "reopen log file");
@@ -311,6 +346,7 @@ CephContext::~CephContext()
   _admin_socket->unregister_command("config show");
   _admin_socket->unregister_command("config set");
   _admin_socket->unregister_command("config get");
+  _admin_socket->unregister_command("config diff");
   _admin_socket->unregister_command("log flush");
   _admin_socket->unregister_command("log dump");
   _admin_socket->unregister_command("log reopen");