From 9872dcc7e702ef5c58cccc1c374a089969b1f197 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Wed, 23 Mar 2016 15:34:17 -0400 Subject: [PATCH] rbd: allow librados to prune the command-line for config overrides Fixes: #15250 Signed-off-by: Jason Dillaman --- src/tools/rbd/Shell.cc | 33 +++------------------------------ src/tools/rbd/Shell.h | 5 ++--- src/tools/rbd/rbd.cc | 2 +- 3 files changed, 6 insertions(+), 34 deletions(-) diff --git a/src/tools/rbd/Shell.cc b/src/tools/rbd/Shell.cc index 76aa8ed52a14a..5fba993ae4d46 100644 --- a/src/tools/rbd/Shell.cc +++ b/src/tools/rbd/Shell.cc @@ -78,11 +78,10 @@ std::set& Shell::get_switch_arguments() { return switch_arguments; } -int Shell::execute(int arg_count, const char **arg_values) { - - std::vector arguments; - prune_command_line_arguments(arg_count, arg_values, &arguments); +int Shell::execute(const Arguments& cmdline_arguments) { + std::vector arguments(cmdline_arguments.begin(), + cmdline_arguments.end()); std::vector command_spec; get_command_spec(arguments, &command_spec); @@ -255,32 +254,6 @@ void Shell::get_global_options(po::options_description *opts) { ("keyring,k", po::value(), "path to keyring"); } -void Shell::prune_command_line_arguments(int arg_count, const char **arg_values, - std::vector *args) { - - std::vector config_keys; - g_conf->get_all_keys(&config_keys); - std::set config_key_set(config_keys.begin(), config_keys.end()); - - args->reserve(arg_count); - for (int i = 1; i < arg_count; ++i) { - std::string arg(arg_values[i]); - if (arg.size() > 2 && arg.substr(0, 2) == "--") { - std::string option_name(arg.substr(2)); - std::string alt_option_name(option_name); - std::replace(alt_option_name.begin(), alt_option_name.end(), '-', '_'); - if (config_key_set.count(option_name) || - config_key_set.count(alt_option_name)) { - // Ceph config override -- skip since it's handled by CephContext - ++i; - continue; - } - } - - args->push_back(arg); - } -} - void Shell::print_help() { std::cout << "usage: " << APP_NAME << " ..." << std::endl << std::endl diff --git a/src/tools/rbd/Shell.h b/src/tools/rbd/Shell.h index b65483eee4839..679213051f064 100644 --- a/src/tools/rbd/Shell.h +++ b/src/tools/rbd/Shell.h @@ -14,6 +14,7 @@ namespace rbd { class Shell { public: + typedef std::vector Arguments; typedef std::vector CommandSpec; struct Action { @@ -47,7 +48,7 @@ public: } }; - int execute(int arg_count, const char **arg_values); + int execute(const Arguments &argument); private: static std::vector& get_actions(); @@ -59,8 +60,6 @@ private: CommandSpec **matching_spec); void get_global_options(boost::program_options::options_description *opts); - void prune_command_line_arguments(int arg_count, const char **arg_values, - std::vector *args); void print_help(); void print_action_help(Action *action); diff --git a/src/tools/rbd/rbd.cc b/src/tools/rbd/rbd.cc index a83db249aa75b..bfa18d345b68f 100644 --- a/src/tools/rbd/rbd.cc +++ b/src/tools/rbd/rbd.cc @@ -16,5 +16,5 @@ int main(int argc, const char **argv) global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_UTILITY, 0); rbd::Shell shell; - return shell.execute(argc, argv); + return shell.execute(args); } -- 2.39.5