From 9fbc083d6de0b24d872f5f18b7448fe89b2db976 Mon Sep 17 00:00:00 2001 From: David Zafman Date: Tue, 9 Sep 2014 11:10:16 -0700 Subject: [PATCH] rados command: Add format support for ls operation Signed-off-by: David Zafman --- src/tools/rados/rados.cc | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/src/tools/rados/rados.cc b/src/tools/rados/rados.cc index 6afcc0ed21016..ec793cc498714 100644 --- a/src/tools/rados/rados.cc +++ b/src/tools/rados/rados.cc @@ -1613,17 +1613,28 @@ static int rados_tool_common(const std::map < std::string, std::string > &opts, outstream = new ofstream(nargs[1]); { + if (formatter) + formatter->open_array_section("objects"); try { librados::NObjectIterator i = io_ctx.nobjects_begin(); librados::NObjectIterator i_end = io_ctx.nobjects_end(); for (; i != i_end; ++i) { - // Only include namespace in output when wildcard specified - if (wildcard) - *outstream << i->get_nspace() << "\t"; - *outstream << i->get_oid(); - if (i->get_locator().size()) - *outstream << "\t" << i->get_locator(); - *outstream << std::endl; + if (!formatter) { + // Only include namespace in output when wildcard specified + if (wildcard) + *outstream << i->get_nspace() << "\t"; + *outstream << i->get_oid(); + if (i->get_locator().size()) + *outstream << "\t" << i->get_locator(); + *outstream << std::endl; + } else { + formatter->open_object_section("object"); + formatter->dump_string("namespace", i->get_nspace()); + formatter->dump_string("name", i->get_oid()); + if (i->get_locator().size()) + formatter->dump_string("locator", i->get_locator()); + formatter->close_section(); //object + } } } catch (const std::runtime_error& e) { @@ -1632,6 +1643,13 @@ static int rados_tool_common(const std::map < std::string, std::string > &opts, goto out; } } + if (formatter) { + formatter->close_section(); //objects + formatter->flush(*outstream); + if (pretty_format) + *outstream << std::endl; + formatter->flush(*outstream); + } if (!stdout) delete outstream; } -- 2.39.5