]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor: 'osd crush rule ls' plaintext output
authorSage Weil <sage@redhat.com>
Fri, 14 Jul 2017 20:55:11 +0000 (16:55 -0400)
committerSage Weil <sage@redhat.com>
Fri, 21 Jul 2017 17:50:55 +0000 (13:50 -0400)
More suitable for scripting.

Signed-off-by: Sage Weil <sage@redhat.com>
src/crush/CrushWrapper.cc
src/crush/CrushWrapper.h
src/mon/OSDMonitor.cc

index 2a7b7832b7dc5bb37a70fd049a6d1e4a5690cdcb..ad57dae1a5e4470a99bf8e03cefb3f6dc814da61 100644 (file)
@@ -2569,6 +2569,15 @@ void CrushWrapper::list_rules(Formatter *f) const
   }
 }
 
+void CrushWrapper::list_rules(ostream *ss) const
+{
+  for (int rule = 0; rule < get_max_rules(); rule++) {
+    if (!rule_exists(rule))
+      continue;
+    *ss << get_rule_name(rule) << "\n";
+  }
+}
+
 class CrushTreePlainDumper : public CrushTreeDumper::Dumper<TextTable> {
 public:
   typedef CrushTreeDumper::Dumper<TextTable> Parent;
index cd3d1f58f164e396a1986c9f64e3f3d2ba6a2813..251357335fb18003db539bc88487ca27079b55b8 100644 (file)
@@ -1479,6 +1479,7 @@ public:
   void dump_tunables(Formatter *f) const;
   void dump_choose_args(Formatter *f) const;
   void list_rules(Formatter *f) const;
+  void list_rules(ostream *ss) const;
   void dump_tree(ostream *out, Formatter *f,
                 const CrushTreeDumper::name_map_t& ws) const;
   void dump_tree(ostream *out, Formatter *f) {
index bd0acbed962c79a5dcd7deeba0c90fd3f78e7ffb..1bd6c94911936e2e8d0b1b9d01c3fdf9ef699cf2 100644 (file)
@@ -5023,16 +5023,16 @@ bool OSDMonitor::preprocess_command(MonOpRequestRef op)
     r = 0;
   } else if (prefix == "osd crush rule list" ||
             prefix == "osd crush rule ls") {
-    string format;
-    cmd_getval(g_ceph_context, cmdmap, "format", format);
-    boost::scoped_ptr<Formatter> f(Formatter::create(format, "json-pretty", "json-pretty"));
-    f->open_array_section("rules");
-    osdmap.crush->list_rules(f.get());
-    f->close_section();
-    ostringstream rs;
-    f->flush(rs);
-    rs << "\n";
-    rdata.append(rs.str());
+    if (f) {
+      f->open_array_section("rules");
+      osdmap.crush->list_rules(f.get());
+      f->close_section();
+      f->flush(rdata);
+    } else {
+      ostringstream ss;
+      osdmap.crush->list_rules(&ss);
+      rdata.append(ss.str());
+    }
   } else if (prefix == "osd crush rule dump") {
     string name;
     cmd_getval(g_ceph_context, cmdmap, "name", name);