]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/tools/rbd/action/ImageMeta.cc
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / tools / rbd / action / ImageMeta.cc
index c0ae0b8ef1f5dba46d2baa3df89475db5e5263af..1ea7413d154341ad774fab4eabc01671d832af83 100644 (file)
@@ -24,11 +24,14 @@ void add_key_option(po::options_description *positional) {
     ("key", "image meta key");
 }
 
-int get_key(const po::variables_map &vm, std::string *key) {
-  *key = utils::get_positional_argument(vm, 1);
+int get_key(const po::variables_map &vm, size_t *arg_index,
+            std::string *key) {
+  *key = utils::get_positional_argument(vm, *arg_index);
   if (key->empty()) {
     std::cerr << "rbd: metadata key was not specified" << std::endl;
     return -EINVAL;
+  } else {
+    ++(*arg_index);
   }
   return 0;
 }
@@ -97,8 +100,8 @@ static int do_metadata_list(librbd::Image& image, Formatter *f)
   return 0;
 }
 
-static int do_metadata_set(librbd::Image& image, const char *key,
-                          const char *value)
+static int do_metadata_set(librbd::Image& image, std::string &key,
+                          std::string &value)
 {
   int r = image.metadata_set(key, value);
   if (r < 0) {
@@ -108,7 +111,7 @@ static int do_metadata_set(librbd::Image& image, const char *key,
   return r;
 }
 
-static int do_metadata_remove(librbd::Image& image, const char *key)
+static int do_metadata_remove(librbd::Image& image, std::string &key)
 {
   int r = image.metadata_remove(key);
   if (r == -ENOENT) {
@@ -121,7 +124,7 @@ static int do_metadata_remove(librbd::Image& image, const char *key)
   return r;
 }
 
-static int do_metadata_get(librbd::Image& image, const char *key)
+static int do_metadata_get(librbd::Image& image, std::string &key)
 {
   std::string s;
   int r = image.metadata_get(key, &s);
@@ -140,14 +143,17 @@ void get_list_arguments(po::options_description *positional,
   at::add_format_options(options);
 }
 
-int execute_list(const po::variables_map &vm) {
+int execute_list(const po::variables_map &vm,
+                 const std::vector<std::string> &ceph_global_init_args) {
   size_t arg_index = 0;
   std::string pool_name;
+  std::string namespace_name;
   std::string image_name;
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
-    vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
+    vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &namespace_name,
+    &image_name, &snap_name, true, utils::SNAPSHOT_PRESENCE_NONE,
+    utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
@@ -161,8 +167,8 @@ int execute_list(const po::variables_map &vm) {
   librados::Rados rados;
   librados::IoCtx io_ctx;
   librbd::Image image;
-  r = utils::init_and_open_image(pool_name, image_name, "", "", false,
-                                 &rados, &io_ctx, &image);
+  r = utils::init_and_open_image(pool_name, namespace_name, image_name, "", "",
+                                 false, &rados, &io_ctx, &image);
   if (r < 0) {
     return r;
   }
@@ -182,20 +188,23 @@ void get_get_arguments(po::options_description *positional,
   add_key_option(positional);
 }
 
-int execute_get(const po::variables_map &vm) {
+int execute_get(const po::variables_map &vm,
+                const std::vector<std::string> &ceph_global_init_args) {
   size_t arg_index = 0;
   std::string pool_name;
+  std::string namespace_name;
   std::string image_name;
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
-    vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
+    vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &namespace_name,
+    &image_name, &snap_name, true, utils::SNAPSHOT_PRESENCE_NONE,
+    utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
 
   std::string key;
-  r = get_key(vm, &key);
+  r = get_key(vm, &arg_index, &key);
   if (r < 0) {
     return r;
   }
@@ -203,13 +212,13 @@ int execute_get(const po::variables_map &vm) {
   librados::Rados rados;
   librados::IoCtx io_ctx;
   librbd::Image image;
-  r = utils::init_and_open_image(pool_name, image_name, "", "", false,
-                                 &rados, &io_ctx, &image);
+  r = utils::init_and_open_image(pool_name, namespace_name, image_name, "", "",
+                                 false, &rados, &io_ctx, &image);
   if (r < 0) {
     return r;
   }
 
-  r = do_metadata_get(image, key.c_str());
+  r = do_metadata_get(image, key);
   if (r < 0) {
     std::cerr << "rbd: getting metadata failed: " << cpp_strerror(r)
               << std::endl;
@@ -226,20 +235,23 @@ void get_set_arguments(po::options_description *positional,
     ("value", "image meta value");
 }
 
-int execute_set(const po::variables_map &vm) {
+int execute_set(const po::variables_map &vm,
+                const std::vector<std::string> &ceph_global_init_args) {
   size_t arg_index = 0;
   std::string pool_name;
+  std::string namespace_name;
   std::string image_name;
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
-    vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
+    vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &namespace_name,
+    &image_name, &snap_name, true, utils::SNAPSHOT_PRESENCE_NONE,
+    utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
 
   std::string key;
-  r = get_key(vm, &key);
+  r = get_key(vm, &arg_index, &key);
   if (r < 0) {
     return r;
   }
@@ -253,13 +265,13 @@ int execute_set(const po::variables_map &vm) {
   librados::Rados rados;
   librados::IoCtx io_ctx;
   librbd::Image image;
-  r = utils::init_and_open_image(pool_name, image_name, "", "", false,
-                                 &rados, &io_ctx, &image);
+  r = utils::init_and_open_image(pool_name, namespace_name, image_name, "", "",
+                                 false, &rados, &io_ctx, &image);
   if (r < 0) {
     return r;
   }
 
-  r = do_metadata_set(image, key.c_str(), value.c_str());
+  r = do_metadata_set(image, key, value);
   if (r < 0) {
     std::cerr << "rbd: setting metadata failed: " << cpp_strerror(r)
               << std::endl;
@@ -274,20 +286,23 @@ void get_remove_arguments(po::options_description *positional,
   add_key_option(positional);
 }
 
-int execute_remove(const po::variables_map &vm) {
+int execute_remove(const po::variables_map &vm,
+                   const std::vector<std::string> &ceph_global_init_args) {
   size_t arg_index = 0;
   std::string pool_name;
+  std::string namespace_name;
   std::string image_name;
   std::string snap_name;
   int r = utils::get_pool_image_snapshot_names(
-    vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &image_name,
-    &snap_name, utils::SNAPSHOT_PRESENCE_NONE, utils::SPEC_VALIDATION_NONE);
+    vm, at::ARGUMENT_MODIFIER_NONE, &arg_index, &pool_name, &namespace_name,
+    &image_name, &snap_name, true, utils::SNAPSHOT_PRESENCE_NONE,
+    utils::SPEC_VALIDATION_NONE);
   if (r < 0) {
     return r;
   }
 
   std::string key;
-  r = get_key(vm, &key);
+  r = get_key(vm, &arg_index, &key);
   if (r < 0) {
     return r;
   }
@@ -295,13 +310,13 @@ int execute_remove(const po::variables_map &vm) {
   librados::Rados rados;
   librados::IoCtx io_ctx;
   librbd::Image image;
-  r = utils::init_and_open_image(pool_name, image_name, "", "", false,
-                                 &rados, &io_ctx, &image);
+  r = utils::init_and_open_image(pool_name, namespace_name, image_name, "", "",
+                                 false, &rados, &io_ctx, &image);
   if (r < 0) {
     return r;
   }
 
-  r = do_metadata_remove(image, key.c_str());
+  r = do_metadata_remove(image, key);
   if (r < 0) {
     std::cerr << "rbd: removing metadata failed: " << cpp_strerror(r)
               << std::endl;
@@ -311,7 +326,7 @@ int execute_remove(const po::variables_map &vm) {
 }
 
 Shell::Action action_list(
-  {"image-meta", "list"}, {}, "Image metadata list keys with values.", "",
+  {"image-meta", "list"}, {"image-meta", "ls"}, "Image metadata list keys with values.", "",
   &get_list_arguments, &execute_list);
 Shell::Action action_get(
   {"image-meta", "get"}, {},
@@ -321,7 +336,7 @@ Shell::Action action_set(
   {"image-meta", "set"}, {}, "Image metadata set key with value.", "",
   &get_set_arguments, &execute_set);
 Shell::Action action_remove(
-  {"image-meta", "remove"}, {},
+  {"image-meta", "remove"}, {"image-meta", "rm"},
   "Image metadata remove the key and value associated.", "",
   &get_remove_arguments, &execute_remove);