From aec896bd0484372b0768256dca98b7518f88a027 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 14 Jul 2017 16:55:11 -0400 Subject: [PATCH] mon/OSDMonitor: 'osd crush rule ls' plaintext output More suitable for scripting. Signed-off-by: Sage Weil --- src/crush/CrushWrapper.cc | 9 +++++++++ src/crush/CrushWrapper.h | 1 + src/mon/OSDMonitor.cc | 20 ++++++++++---------- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/crush/CrushWrapper.cc b/src/crush/CrushWrapper.cc index 2a7b7832b7d..ad57dae1a5e 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 cd3d1f58f16..251357335fb 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 bd0acbed962..1bd6c949119 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); -- 2.39.5