fail_all_mds
+ set +e
+ # Check that rmfailed requires confirmation
+ expect_false ceph mds rmfailed 0
+ ceph mds rmfailed 0 --yes-i-really-mean-it
+ set -e
+
# Check that 'fs reset' runs
ceph fs reset cephfs --yes-i-really-mean-it
}
} else if (prefix == "mds rmfailed") {
mds_rank_t who;
+ string confirm;
+ if (!cmd_getval(g_ceph_context, cmdmap, "confirm", confirm) ||
+ confirm != "--yes-i-really-mean-it") {
+ ss << "WARNING: this can make your filesystem inaccessible! "
+ "Add --yes-i-really-mean-it if you are sure you wish to continue.";
+ return -EPERM;
+ }
if (!cmd_getval(g_ceph_context, cmdmap, "who", who)) {
ss << "error parsing 'who' value '"
<< cmd_vartype_stringify(cmdmap["who"]) << "'";
COMMAND("mds rm " \
"name=gid,type=CephInt,range=0", \
"remove nonactive mds", "mds", "rw", "cli,rest")
-COMMAND("mds rmfailed name=who,type=CephInt,range=0", "remove failed mds", \
- "mds", "rw", "cli,rest")
+COMMAND("mds rmfailed name=who,type=CephInt,range=0 name=confirm,type=CephString,req=false", \
+ "remove failed mds", "mds", "rw", "cli,rest")
COMMAND("mds cluster_down", "take MDS cluster down", "mds", "rw", "cli,rest")
COMMAND("mds cluster_up", "bring MDS cluster up", "mds", "rw", "cli,rest")
COMMAND("mds compat rm_compat " \
assert_equal({}, validate_command(sigdict, ['mds', 'rm', '1', 'mds.42']))
def test_rmfailed(self):
- self.check_1_natural_arg('mds', 'rmfailed')
+ self.assert_valid_command(['mds', 'rmfailed', '0'])
+ self.assert_valid_command(['mds', 'rmfailed', '0', '--yes-i-really-mean-it'])
+ assert_equal({}, validate_command(sigdict, ['mds', 'rmfailed',
+ '--yes-i-really-mean-it']))
+ assert_equal({}, validate_command(sigdict, ['mds', 'rmfailed', '-1',
+ '--yes-i-really-mean-it']))
+ assert_equal({}, validate_command(sigdict, ['mds', 'rmfailed', '0',
+ '--yes-i-really-mean-it',
+ 'toomany']))
def test_cluster_down(self):
self.check_no_arg('mds', 'cluster_down')