]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-nbd: allow user to specify cookie at map
authorPrasanna Kumar Kalever <prasanna.kalever@redhat.com>
Wed, 11 Aug 2021 10:02:25 +0000 (15:32 +0530)
committerIlya Dryomov <idryomov@gmail.com>
Wed, 23 Mar 2022 12:31:59 +0000 (13:31 +0100)
Allow user to specify cookie of choice at the time of map

$ rbd device attach rbd-pool/image --device /dev/nbd0 \
--cookie 6f85d970-10b2-456b-8baf-676aa4d782e4 --options try-netlink

Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
(cherry picked from commit 16404dede832f3908d48fc36c7714891bfcfde20)

doc/man/8/rbd.rst
src/test/cli/rbd/help.t
src/tools/rbd/action/Device.cc
src/tools/rbd/action/Nbd.cc
src/tools/rbd_nbd/rbd-nbd.cc

index 5010d535cd3e86011e1c11ea84282bb2d28b4374..e50086bfbaeb509842861049b8a0a5775d4482f1 100644 (file)
@@ -253,7 +253,7 @@ Commands
   Show the rbd images that are mapped via the rbd kernel module
   (default) or other supported device.
 
-:command:`device map` [-t | --device-type *device-type*] [--show-cookie] [--read-only] [--exclusive] [-o | --options *device-options*] *image-spec* | *snap-spec*
+:command:`device map` [-t | --device-type *device-type*] [--cookie *device-cookie*] [--show-cookie] [--read-only] [--exclusive] [-o | --options *device-options*] *image-spec* | *snap-spec*
   Map the specified image to a block device via the rbd kernel module
   (default) or other supported device (*nbd* on Linux or *ggate* on
   FreeBSD).
@@ -268,7 +268,7 @@ Commands
   The --options argument is a comma separated list of device type
   specific options (opt1,opt2=val,...).
 
-:command:`device attach` [-t | --device-type *device-type*] --device *device-path* [--cookie *device-cookie*] [--read-only] [--exclusive] [--force] [-o | --options *device-options*] *image-spec* | *snap-spec*
+:command:`device attach` [-t | --device-type *device-type*] --device *device-path* [--cookie *device-cookie*] [--show-cookie] [--read-only] [--exclusive] [--force] [-o | --options *device-options*] *image-spec* | *snap-spec*
   Attach the specified image to the specified block device (currently only
   `nbd` on Linux). This operation is unsafe and should not be normally used.
   In particular, specifying the wrong image or the wrong block device may
index fb419da45fa95804c422e729bedfb8f6a467c249..2b4c14eeacecdd167967989ad1f49b258642e478 100644 (file)
   rbd help device attach
   usage: rbd device attach [--device-type <device-type>] [--pool <pool>] 
                            [--namespace <namespace>] [--image <image>] 
-                           [--snap <snap>] --device <device> [--cookie <cookie>] 
-                           [--read-only] [--force] [--exclusive] [--quiesce] 
+                           [--snap <snap>] --device <device> [--show-cookie] 
+                           [--cookie <cookie>] [--read-only] [--force] 
+                           [--exclusive] [--quiesce] 
                            [--quiesce-hook <quiesce-hook>] [--options <options>] 
                            <image-or-snap-spec> 
   
     --image arg              image name
     --snap arg               snapshot name
     --device arg             specify device path
+    --show-cookie            show device cookie
     --cookie arg             specify device cookie
     --read-only              attach read-only
     --force                  force attach
   rbd help device map
   usage: rbd device map [--device-type <device-type>] [--pool <pool>] 
                         [--namespace <namespace>] [--image <image>] 
-                        [--snap <snap>] [--show-cookie] [--read-only
-                        [--exclusive] [--quiesce] 
+                        [--snap <snap>] [--show-cookie] [--cookie <cookie>
+                        [--read-only] [--exclusive] [--quiesce] 
                         [--quiesce-hook <quiesce-hook>] [--options <options>] 
                         <image-or-snap-spec> 
   
     --image arg              image name
     --snap arg               snapshot name
     --show-cookie            show device cookie
+    --cookie arg             specify device cookie
     --read-only              map read-only
     --exclusive              disable automatic exclusive lock transitions
     --quiesce                use quiesce hooks
index 99746e0f4951169043657584f95e126742660bb1..bfe60c273df79728b63de6fcd9d59cb05c2fa306 100644 (file)
@@ -176,6 +176,7 @@ void get_map_arguments(po::options_description *positional,
                                      at::ARGUMENT_MODIFIER_NONE);
   options->add_options()
     ("show-cookie", po::bool_switch(), "show device cookie")
+    ("cookie", po::value<std::string>(), "specify device cookie")
     ("read-only", po::bool_switch(), "map read-only")
     ("exclusive", po::bool_switch(), "disable automatic exclusive lock transitions")
     ("quiesce", po::bool_switch(), "use quiesce hooks")
@@ -213,6 +214,7 @@ void get_attach_arguments(po::options_description *positional,
                                      at::ARGUMENT_MODIFIER_NONE);
   options->add_options()
     ("device", po::value<std::string>()->required(), "specify device path")
+    ("show-cookie", po::bool_switch(), "show device cookie")
     ("cookie", po::value<std::string>(), "specify device cookie")
     ("read-only", po::bool_switch(), "attach read-only")
     ("force", po::bool_switch(), "force attach")
index b6662e0842e595e80c452e2fcd49462877bcf24b..68345f43dd6c5228ea635928aae2002a701d489a 100644 (file)
@@ -163,6 +163,10 @@ int execute_attach(const po::variables_map &vm,
     return -EINVAL;
   }
 
+  if (vm["show-cookie"].as<bool>()) {
+    args.push_back("--show-cookie");
+  }
+
   if (vm.count("cookie")) {
     args.push_back("--cookie");
     args.push_back(vm["cookie"].as<std::string>());
@@ -266,6 +270,11 @@ int execute_map(const po::variables_map &vm,
     args.push_back("--show-cookie");
   }
 
+  if (vm.count("cookie")) {
+    args.push_back("--cookie");
+    args.push_back(vm["cookie"].as<std::string>());
+  }
+
   if (vm["read-only"].as<bool>()) {
     args.push_back("--read-only");
   }
index 9d146ac806d6d9129e37ea60af361d1645f49eeb..eb9e858f4afe804188e6625ea262cc140dd2f74b 100644 (file)
@@ -163,7 +163,7 @@ static void usage()
             << "                                (default: " << Config().reattach_timeout << ")\n"
             << "  --try-netlink                 Use the nbd netlink interface\n"
             << "  --show-cookie                 Show device cookie\n"
-            << "  --cookie                      Specify device cookie for attach\n"
+            << "  --cookie                      Specify device cookie\n"
             << "\n"
             << "List options:\n"
             << "  --format plain|json|xml Output format (default: plain)\n"
@@ -1746,7 +1746,8 @@ static int do_map(int argc, const char *argv[], Config *cfg, bool reconnect)
 
   use_netlink = cfg->try_netlink || reconnect;
   if (use_netlink) {
-    if (!reconnect) {
+    // generate when the cookie is not supplied at CLI
+    if (!reconnect && cfg->cookie.empty()) {
       uuid_d uuid_gen;
       uuid_gen.generate_random();
       cfg->cookie = uuid_gen.to_string();
@@ -1794,9 +1795,9 @@ static int do_map(int argc, const char *argv[], Config *cfg, bool reconnect)
       goto close_nbd;
 
     std::string cookie;
-    if (use_netlink && !cfg->cookie.empty()) {
+    if (use_netlink) {
       cookie = get_cookie(cfg->devpath);
-      ceph_assert(cookie == cfg->cookie);
+      ceph_assert(cookie == cfg->cookie || cookie.empty());
     }
     if (cfg->show_cookie && !cookie.empty()) {
       cout << cfg->devpath << " " << cookie << std::endl;