From: Sage Weil Date: Fri, 14 Jul 2017 20:55:11 +0000 (-0400) Subject: mon/OSDMonitor: 'osd crush rule ls' plaintext output X-Git-Tag: v12.1.2~150^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=aec896bd0484372b0768256dca98b7518f88a027;p=ceph.git mon/OSDMonitor: 'osd crush rule ls' plaintext output More suitable for scripting. Signed-off-by: Sage Weil --- diff --git a/src/crush/CrushWrapper.cc b/src/crush/CrushWrapper.cc index 2a7b7832b7dc..ad57dae1a5e4 100644 --- a/src/crush/CrushWrapper.cc +++ b/src/crush/CrushWrapper.cc @@ -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 { public: typedef CrushTreeDumper::Dumper Parent; diff --git a/src/crush/CrushWrapper.h b/src/crush/CrushWrapper.h index cd3d1f58f164..251357335fb1 100644 --- a/src/crush/CrushWrapper.h +++ b/src/crush/CrushWrapper.h @@ -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) { diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index bd0acbed962c..1bd6c9491193 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -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 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);