]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: support radosgw-admin zone/zonegroup placement get command
authorjiahuizeng <jhzeng93@foxmail.com>
Sat, 12 Oct 2019 12:14:21 +0000 (20:14 +0800)
committerjiahuizeng <jhzeng93@foxmail.com>
Tue, 22 Oct 2019 03:58:42 +0000 (11:58 +0800)
Signed-off-by: jiahuizeng <jhzeng93@foxmail.com>
src/rgw/rgw_admin.cc
src/test/cli/radosgw-admin/help.t

index 4a9dadae7d5780452bd4263327af8e8d1a650095..f84955f785590e12aafc0e6c1aece55ff224303f 100644 (file)
@@ -165,6 +165,7 @@ void usage()
   cout << "  zonegroup rename           rename a zone group\n";
   cout << "  zonegroup list             list all zone groups set on this cluster\n";
   cout << "  zonegroup placement list   list zonegroup's placement targets\n";
+  cout << "  zonegroup placement get    get a placement target of a specific zonegroup\n";
   cout << "  zonegroup placement add    add a placement target id to a zonegroup\n";
   cout << "  zonegroup placement modify modify a placement target of a specific zonegroup\n";
   cout << "  zonegroup placement rm     remove a placement target from a zonegroup\n";
@@ -177,6 +178,7 @@ void usage()
   cout << "  zone list                  list all zones set on this cluster\n";
   cout << "  zone rename                rename a zone\n";
   cout << "  zone placement list        list zone's placement targets\n";
+  cout << "  zone placement get         get a zone placement target\n";
   cout << "  zone placement add         add a zone placement target\n";
   cout << "  zone placement modify      modify a zone placement target\n";
   cout << "  zone placement rm          remove a zone placement target\n";
@@ -478,6 +480,7 @@ enum {
   OPT_ZONEGROUP_PLACEMENT_MODIFY,
   OPT_ZONEGROUP_PLACEMENT_RM,
   OPT_ZONEGROUP_PLACEMENT_LIST,
+  OPT_ZONEGROUP_PLACEMENT_GET,
   OPT_ZONEGROUP_PLACEMENT_DEFAULT,
   OPT_ZONE_CREATE,
   OPT_ZONE_DELETE,
@@ -491,6 +494,7 @@ enum {
   OPT_ZONE_PLACEMENT_MODIFY,
   OPT_ZONE_PLACEMENT_RM,
   OPT_ZONE_PLACEMENT_LIST,
+  OPT_ZONE_PLACEMENT_GET,
   OPT_CAPS_ADD,
   OPT_CAPS_RM,
   OPT_METADATA_GET,
@@ -850,6 +854,8 @@ static int get_cmd(const char *cmd, const char *prev_cmd, const char *prev_prev_
       return OPT_ZONEGROUP_PLACEMENT_RM;
     if (strcmp(cmd, "list") == 0)
       return OPT_ZONEGROUP_PLACEMENT_LIST;
+    if (strcmp(cmd, "get") == 0)
+      return OPT_ZONEGROUP_PLACEMENT_GET;
     if (strcmp(cmd, "default") == 0)
       return OPT_ZONEGROUP_PLACEMENT_DEFAULT;
   } else if (strcmp(prev_cmd, "zonegroup") == 0) {
@@ -893,6 +899,8 @@ static int get_cmd(const char *cmd, const char *prev_cmd, const char *prev_prev_
       return OPT_ZONE_PLACEMENT_RM;
     if (strcmp(cmd, "list") == 0)
       return OPT_ZONE_PLACEMENT_LIST;
+    if (strcmp(cmd, "get") == 0)
+      return OPT_ZONE_PLACEMENT_GET;
   } else if (strcmp(prev_cmd, "zone") == 0) {
     if (match_str(cmd, "rm", "delete"))
       return OPT_ZONE_DELETE;
@@ -3330,12 +3338,14 @@ int main(int argc, const char **argv)
                         OPT_ZONEGROUP_REMOVE,
                         OPT_ZONEGROUP_PLACEMENT_ADD, OPT_ZONEGROUP_PLACEMENT_RM,
                         OPT_ZONEGROUP_PLACEMENT_MODIFY, OPT_ZONEGROUP_PLACEMENT_LIST,
+                        OPT_ZONEGROUP_PLACEMENT_GET,
                         OPT_ZONEGROUP_PLACEMENT_DEFAULT,
                         OPT_ZONE_CREATE, OPT_ZONE_DELETE,
                          OPT_ZONE_GET, OPT_ZONE_SET, OPT_ZONE_RENAME,
                          OPT_ZONE_LIST, OPT_ZONE_MODIFY, OPT_ZONE_DEFAULT,
                         OPT_ZONE_PLACEMENT_ADD, OPT_ZONE_PLACEMENT_RM,
                         OPT_ZONE_PLACEMENT_MODIFY, OPT_ZONE_PLACEMENT_LIST,
+                        OPT_ZONE_PLACEMENT_GET,
                         OPT_REALM_CREATE,
                         OPT_PERIOD_DELETE, OPT_PERIOD_GET,
                         OPT_PERIOD_PULL,
@@ -3370,9 +3380,11 @@ int main(int argc, const char **argv)
                         OPT_ZONEGROUP_GET,
                         OPT_ZONEGROUP_LIST,
                         OPT_ZONEGROUP_PLACEMENT_LIST,
+                        OPT_ZONEGROUP_PLACEMENT_GET,
                         OPT_ZONE_GET,
                         OPT_ZONE_LIST,
                         OPT_ZONE_PLACEMENT_LIST,
+                        OPT_ZONE_PLACEMENT_GET,
                         OPT_METADATA_GET,
                         OPT_METADATA_LIST,
                         OPT_METADATA_SYNC_STATUS,
@@ -4292,6 +4304,30 @@ int main(int argc, const char **argv)
        formatter->flush(cout);
       }
       break;
+    case OPT_ZONEGROUP_PLACEMENT_GET:
+      {
+       if (placement_id.empty()) {
+         cerr << "ERROR: --placement-id not specified" << std::endl;
+         return EINVAL;
+       }
+
+       RGWZoneGroup zonegroup(zonegroup_id, zonegroup_name);
+       int ret = zonegroup.init(g_ceph_context, store);
+       if (ret < 0) {
+         cerr << "failed to init zonegroup: " << cpp_strerror(-ret) << std::endl;
+         return -ret;
+       }
+
+       auto p = zonegroup.placement_targets.find(placement_id);
+       if (p == zonegroup.placement_targets.end()) {
+         cerr << "failed to find a zonegroup placement target named '" << placement_id << "'" << std::endl;
+         return -ENOENT;
+       }
+       encode_json("placement_targets", p->second, formatter);
+       formatter->flush(cout);
+       cout << std::endl;
+      }
+      break;
     case OPT_ZONEGROUP_PLACEMENT_ADD:
     case OPT_ZONEGROUP_PLACEMENT_MODIFY:
     case OPT_ZONEGROUP_PLACEMENT_RM:
@@ -4868,6 +4904,28 @@ int main(int argc, const char **argv)
        formatter->flush(cout);
       }
       break;
+    case OPT_ZONE_PLACEMENT_GET:
+      {
+       if (placement_id.empty()) {
+         cerr << "ERROR: --placement-id not specified" << std::endl;
+         return EINVAL;
+       }
+
+       RGWZoneParams zone(zone_id, zone_name);
+       int ret = zone.init(g_ceph_context, store);
+       if (ret < 0) {
+         cerr << "unable to initialize zone: " << cpp_strerror(-ret) << std::endl;
+         return -ret;
+       }
+       auto p = zone.placement_pools.find(placement_id);
+       if (p == zone.placement_pools.end()) {
+         cerr << "ERROR: zone placement target '" << placement_id << "' not found" << std::endl;
+         return -ENOENT;
+       }
+       encode_json("placement_pools", p->second, formatter);
+       formatter->flush(cout);
+      }
+      break;
     }
     return 0;
   }
index 23bb85cf472bee83b102e2cce0bac94f01d7c7ae..b41caf193898218f238d837a0908faf6279a2b51 100644 (file)
@@ -79,6 +79,7 @@
     zonegroup rename           rename a zone group
     zonegroup list             list all zone groups set on this cluster
     zonegroup placement list   list zonegroup's placement targets
+    zonegroup placement get    get a placement target of a specific zonegroup
     zonegroup placement add    add a placement target id to a zonegroup
     zonegroup placement modify modify a placement target of a specific zonegroup
     zonegroup placement rm     remove a placement target from a zonegroup
@@ -91,6 +92,7 @@
     zone list                  list all zones set on this cluster
     zone rename                rename a zone
     zone placement list        list zone's placement targets
+    zone placement get         get a zone placement target
     zone placement add         add a zone placement target
     zone placement modify      modify a zone placement target
     zone placement rm          remove a zone placement target