From 7ff8fc739744e869d875a23339a3c13aa2022a17 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 26 Nov 2018 11:49:54 -0600 Subject: [PATCH] monmaptool: add --addv argument to pass in addrvec directly Signed-off-by: Sage Weil --- src/tools/monmaptool.cc | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/tools/monmaptool.cc b/src/tools/monmaptool.cc index 19a5fc6fa0f..222d5b144d8 100644 --- a/src/tools/monmaptool.cc +++ b/src/tools/monmaptool.cc @@ -187,6 +187,7 @@ int main(int argc, const char **argv) bool generate = false; bool filter = false; map add; + map addv; list rm; list features; @@ -221,6 +222,19 @@ int main(int argc, const char **argv) add[name] = addr; modified = true; i = args.erase(i); + } else if (ceph_argparse_flag(args, i, "--addv", (char*)NULL)) { + string name = *i; + i = args.erase(i); + if (i == args.end()) + usage(); + entity_addrvec_t addrs; + if (!addrs.parse(*i)) { + cerr << me << ": invalid ip:port '" << *i << "'" << std::endl; + return -1; + } + addv[name] = addrs; + modified = true; + i = args.erase(i); } else if (ceph_argparse_witharg(args, i, &val, "--rm", (char*)NULL)) { rm.push_back(val); modified = true; @@ -384,6 +398,17 @@ int main(int argc, const char **argv) } monmap.add(p.first, addrs); } + for (auto& p : addv) { + if (monmap.contains(p.first)) { + cerr << me << ": map already contains mon." << p.first << std::endl; + usage(); + } + if (monmap.contains(p.second)) { + cerr << me << ": map already contains " << p.second << std::endl; + usage(); + } + monmap.add(p.first, p.second); + } for (auto& p : rm) { cout << me << ": removing " << p << std::endl; if (!monmap.contains(p)) { -- 2.39.5