From: jiahuizeng Date: Sat, 12 Oct 2019 12:14:21 +0000 (+0800) Subject: rgw: support radosgw-admin zone/zonegroup placement get command X-Git-Tag: v15.1.0~81^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5601517c3b4ea0ad9e5debf758fedd75a00c5c7c;p=ceph.git rgw: support radosgw-admin zone/zonegroup placement get command Signed-off-by: jiahuizeng --- diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 4a9dadae7d57..f84955f78559 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -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; } diff --git a/src/test/cli/radosgw-admin/help.t b/src/test/cli/radosgw-admin/help.t index 23bb85cf472b..b41caf193898 100644 --- a/src/test/cli/radosgw-admin/help.t +++ b/src/test/cli/radosgw-admin/help.t @@ -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