]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/ConfigKeyService: add 'config-key dump' to show keys and vals
authorDan Mick <dan.mick@redhat.com>
Fri, 28 Apr 2017 02:41:11 +0000 (19:41 -0700)
committerDan Mick <dan.mick@redhat.com>
Fri, 28 Apr 2017 03:09:24 +0000 (20:09 -0700)
Signed-off-by: Dan Mick <dan.mick@redhat.com>
doc/man/8/ceph.rst
src/mon/ConfigKeyService.cc
src/mon/ConfigKeyService.h
src/mon/MonCommands.h
src/test/pybind/test_ceph_argparse.py

index b248912684810d31b7cf10e1e25fc06c26e7e52b..04beea6421eb3bf5a843fc11350f024b8363094e 100644 (file)
@@ -13,7 +13,7 @@ Synopsis
 
 | **ceph** **compact**
 
-| **ceph** **config-key** [ *del* | *exists* | *get* | *list* | *put* ] ...
+| **ceph** **config-key** [ *del* | *exists* | *get* | *list* | *dump* | *put* ] ...
 
 | **ceph** **daemon** *<name>* \| *<path>* *<command>* ...
 
@@ -201,7 +201,13 @@ Usage::
 
        ceph config-key list
 
-Subcommand ``put`` puts configuration key and values.
+Subcommand ``dump`` dumps configuration keys and values.
+
+Usage::
+
+       ceph config-key dump
+
+Subcommand ``put`` puts configuration key and value.
 
 Usage::
 
index 8d083199331edb0ec6560759984043b56071227d..f685daa05a66a2b2d06c9bd3c4e2bc33a60260e5 100644 (file)
@@ -83,6 +83,21 @@ void ConfigKeyService::store_list(stringstream &ss)
   f.flush(ss);
 }
 
+void ConfigKeyService::store_dump(stringstream &ss)
+{
+  KeyValueDB::Iterator iter =
+    mon->store->get_iterator(STORE_PREFIX);
+
+  JSONFormatter f(true);
+  f.open_object_section("config-key store");
+
+  while (iter->valid()) {
+    f.dump_string(iter->key().c_str(), iter->value().to_str());
+    iter->next();
+  }
+  f.close_section();
+  f.flush(ss);
+}
 
 bool ConfigKeyService::service_dispatch(MonOpRequestRef op)
 {
@@ -187,6 +202,12 @@ bool ConfigKeyService::service_dispatch(MonOpRequestRef op)
     store_list(tmp_ss);
     rdata.append(tmp_ss);
     ret = 0;
+
+  } else if (prefix == "config-key dump") {
+    stringstream tmp_ss;
+    store_dump(tmp_ss);
+    rdata.append(tmp_ss);
+    ret = 0;
   }
 
 out:
index 523bafbdf31c15bf6eb7685f2c5d8057cd50fe58..34c70342a981cd25617dbeb90bfd03b209d34ccf 100644 (file)
@@ -30,6 +30,7 @@ class ConfigKeyService : public QuorumService
   void store_put(const string &key, bufferlist &bl, Context *cb = NULL);
   void store_delete(const string &key, Context *cb = NULL);
   void store_list(stringstream &ss);
+  void store_dump(stringstream &ss);
   bool store_exists(const string &key);
 
   static const string STORE_PREFIX;
index b64ba8d5ff1cfe8709e02ea5bdfc87360ff7c66a..5857db47a4a872f9bce3adf4ae7051403a735a53 100644 (file)
@@ -824,6 +824,7 @@ COMMAND("config-key exists " \
        "name=key,type=CephString", \
        "check for <key>'s existence", "config-key", "r", "cli,rest")
 COMMAND("config-key list ", "list keys", "config-key", "r", "cli,rest")
+COMMAND("config-key dump", "dump keys and values", "config-key", "r", "cli,rest")
 
 
 /*
index 0c9cc7524c57a760bcfab07bc7401d2e9eff1130..33de0b3a4f5c04973146ff5831dde6eab5dae374 100755 (executable)
@@ -1178,6 +1178,9 @@ class TestConfigKey(TestArgparse):
     def test_exists(self):
         self.check_1_string_arg('config-key', 'exists')
 
+    def test_dump(self):
+        self.check_no_arg('config-key', 'dump')
+
     def test_list(self):
         self.check_no_arg('config-key', 'list')
 # Local Variables: