]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor: add plain output for "crush class ls-osd" command 17034/head
authorxie xingguo <xie.xingguo@zte.com.cn>
Tue, 15 Aug 2017 12:13:50 +0000 (20:13 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Tue, 15 Aug 2017 12:18:50 +0000 (20:18 +0800)
Was:
ceph osd crush rm-device-class `ceph osd crush class ls-osd pool_bar`
Error EINVAL: Expected option value to be integer, got '[', unable to parse osd id:"[".

Now:
ceph osd crush rm-device-class `ceph osd crush class ls-osd pool_bar`
done removing class of osd(s): 0,2,4

Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/mon/OSDMonitor.cc

index be6712caa77ed37662208bafd2101afa7b1eaf80..498c74ecb8ba8b165e83286474c30056d8698c9f 100644 (file)
@@ -5034,14 +5034,24 @@ bool OSDMonitor::preprocess_command(MonOpRequestRef op)
   } else if (prefix == "osd crush class ls-osd") {
     string name;
     cmd_getval(g_ceph_context, cmdmap, "class", name);
-    boost::scoped_ptr<Formatter> f(Formatter::create(format, "json-pretty", "json-pretty"));
     set<int> osds;
     osdmap.crush->get_devices_by_class(name, &osds);
-    f->open_array_section("osds");
-    for (auto& osd : osds)
-      f->dump_int("osd", osd);
-    f->close_section();
-    f->flush(rdata);
+    if (f) {
+      f->open_array_section("osds");
+      for (auto &osd: osds)
+        f->dump_int("osd", osd);
+      f->close_section();
+      f->flush(rdata);
+    } else {
+      bool first = true;
+      for (auto &osd : osds) {
+        if (!first)
+          ds << "\n";
+        first = false;
+        ds << osd;
+      }
+      rdata.append(ds);
+    }
   } else if (prefix == "osd erasure-code-profile ls") {
     const auto &profiles = osdmap.get_erasure_code_profiles();
     if (f)