From 3c847c5a031d819c8326138865860587982f50b6 Mon Sep 17 00:00:00 2001 From: Joao Eduardo Luis Date: Tue, 26 Aug 2014 23:31:06 +0100 Subject: [PATCH] common: ceph_context: add admin socket command 'config diff' Outputs a diff between the current config and what the daemon believes to be its default config. Signed-off-by: Joao Eduardo Luis --- src/common/ceph_context.cc | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/common/ceph_context.cc b/src/common/ceph_context.cc index 71b6fcb1aee58..4816acb334d7e 100644 --- a/src/common/ceph_context.cc +++ b/src/common/ceph_context.cc @@ -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 > diff; + set unknown; + def_conf.diff(_conf, &diff, &unknown); + f->open_object_section("diff"); + + f->open_object_section("current"); + for (map >::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 >::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::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 [ ...]: set a config variable"); _admin_socket->register_command("config get", "config get name=var,type=CephString", _admin_hook, "config get : 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"); -- 2.39.5