mon: add ruleset name to crush rule dump

The crush rule name is made an optional first argument. If not provided, it
defaults to dumping all rules.

Signed-off-by: Loic Dachary <loic@dachary.org>
This commit is contained in:
Loic Dachary 2014-02-11 18:25:51 +01:00
parent fce4d68404
commit 4784a687c1
3 changed files with 21 additions and 6 deletions

View File

@ -364,8 +364,9 @@ COMMAND("osd blacklist ls", "show blacklisted clients", "osd", "r", "cli,rest")
COMMAND("osd crush rule list", "list crush rules", "osd", "r", "cli,rest")
COMMAND("osd crush rule ls", "list crush rules", "osd", "r", "cli,rest")
COMMAND("osd crush rule dump " \
"name=name,type=CephString,goodchars=[A-Za-z0-9-_.],req=false " \
"name=format,type=CephChoices,strings=json|json-pretty|xml|xml-pretty,req=false", \
"dump crush rules formatted as <format> (default json-pretty)", \
"dump crush rule <name> (default all) formatted as <format> (default json-pretty)", \
"osd", "r", "cli,rest")
COMMAND("osd crush dump " \
"name=format,type=CephChoices,strings=json|json-pretty|xml|xml-pretty,req=false", \

View File

@ -2529,15 +2529,27 @@ stats_out:
rs << "\n";
rdata.append(rs.str());
} else if (prefix == "osd crush rule dump") {
string name;
cmd_getval(g_ceph_context, cmdmap, "name", name);
string format;
cmd_getval(g_ceph_context, cmdmap, "format", format, string("json-pretty"));
Formatter *fp = new_formatter(format);
if (!fp)
fp = new_formatter("json-pretty");
boost::scoped_ptr<Formatter> f(fp);
f->open_array_section("rules");
osdmap.crush->dump_rules(f.get());
f->close_section();
if (name == "") {
f->open_array_section("rules");
osdmap.crush->dump_rules(f.get());
f->close_section();
} else {
int ruleset = osdmap.crush->get_rule_id(name);
if (ruleset < 0) {
ss << "unknown crush ruleset '" << name << "'";
r = ruleset;
goto reply;
}
osdmap.crush->dump_rule(ruleset, f.get());
}
ostringstream rs;
f->flush(rs);
rs << "\n";

View File

@ -576,11 +576,13 @@ class TestOSD(TestArgparse):
def test_crush_rule_dump(self):
self.assert_valid_command(['osd', 'crush', 'rule', 'dump'])
self.assert_valid_command(['osd', 'crush', 'rule', 'dump', 'RULE'])
for format in ('json', 'json-pretty', 'xml', 'xml-pretty'):
self.assert_valid_command(['osd', 'crush', 'rule', 'dump', format])
self.assert_valid_command(['osd', 'crush', 'rule',
'dump', 'RULE', format])
assert_equal({}, validate_command(sigdict, ['osd', 'crush',
'rule', 'dump',
'json',
'RULE', 'json',
'toomany']))
def test_crush_dump(self):