rbd group snap remove $group_name@$snap_name
}
+rename_snapshot()
+{
+ local group_name=$1
+ local snap_name=$2
+ local new_snap_name=$3
+ rbd group snap rename $group_name@$snap_name $new_snap_name
+}
+
list_snapshots()
{
local group_name=$1
image="test_image"
group="test_consistency_group"
snap="group_snap"
+new_snap="new_group_snap"
create_image $image
create_group $group
add_image_to_group $image $group
create_snapshot $group $snap
check_snapshot_in_group $group $snap
-remove_snapshot $group $snap
+rename_snapshot $group $snap $new_snap
check_snapshot_not_in_group $group $snap
+remove_snapshot $group $new_snap
+check_snapshot_not_in_group $group $new_snap
remove_group $group
remove_image $image
echo "PASSED"
group snap create Make a snapshot of a group.
group snap list List snapshots of a group.
group snap remove (group snap rm) Remove a snapshot from a group.
+ group snap rename Rename group's snapshot.
image-meta get Image metadata get the value associated
with the key.
image-meta list (image-meta ls) Image metadata list keys with values.
--group arg group name
--snap arg snapshot name
+ rbd help group snap rename
+ usage: rbd group snap rename [--pool <pool>] [--group <group>] [--snap <snap>]
+ [--dest-snap <dest-snap>]
+ <group-spec> <dest-snap>
+
+ Rename group's snapshot.
+
+ Positional arguments
+ <group-spec> group specification
+ (example: [<pool-name>/]<group-name>@<snap-name>)
+ <dest-snap> destination snapshot name
+ (example: <snapshot-name>)
+
+ Optional arguments
+ -p [ --pool ] arg pool name
+ --group arg group name
+ --snap arg snapshot name
+ --dest-snap arg destination snapshot name
+
rbd help image-meta get
usage: rbd image-meta get [--pool <pool>] [--image <image>]
<image-spec> <key>
return r;
}
+int execute_group_snap_rename(const po::variables_map &vm) {
+ size_t arg_index = 0;
+
+ std::string group_name;
+ std::string pool_name;
+ std::string source_snap_name;
+
+ int r = utils::get_pool_group_names(vm, at::ARGUMENT_MODIFIER_NONE,
+ &arg_index, &pool_name, &group_name,
+ &source_snap_name);
+ if (r < 0) {
+ return r;
+ }
+
+ std::string dest_snap_name;
+ if (vm.count(at::DEST_SNAPSHOT_NAME)) {
+ dest_snap_name = vm[at::DEST_SNAPSHOT_NAME].as<std::string>();
+ }
+
+ if (dest_snap_name.empty()) {
+ dest_snap_name = utils::get_positional_argument(vm, arg_index++);
+ }
+
+ if (dest_snap_name.empty()) {
+ std::cerr << "rbd: destination snapshot name was not specified"
+ << std::endl;
+ return -EINVAL;
+ }
+
+ librados::Rados rados;
+ librados::IoCtx io_ctx;
+ r = utils::init(pool_name, &rados, &io_ctx);
+ if (r < 0) {
+ return r;
+ }
+
+ librbd::RBD rbd;
+ r = rbd.group_snap_rename(io_ctx, group_name.c_str(),
+ source_snap_name.c_str(), dest_snap_name.c_str());
+
+ if (r < 0) {
+ std::cerr << "rbd: failed to rename snapshot" << std::endl;
+ return r;
+ }
+
+ return 0;
+}
+
int execute_group_snap_list(const po::variables_map &vm) {
size_t arg_index = 0;
std::string group_name;
return 0;
}
-
void get_create_arguments(po::options_description *positional,
po::options_description *options) {
at::add_group_spec_options(positional, options, at::ARGUMENT_MODIFIER_NONE,
true);
}
+void get_group_snap_rename_arguments(po::options_description *positional,
+ po::options_description *options) {
+ at::add_group_spec_options(positional, options, at::ARGUMENT_MODIFIER_NONE,
+ true);
+
+ positional->add_options()
+ (at::DEST_SNAPSHOT_NAME.c_str(),
+ "destination snapshot name\n(example: <snapshot-name>)");
+ at::add_snap_option(options, at::ARGUMENT_MODIFIER_DEST);
+}
+
void get_group_snap_list_arguments(po::options_description *positional,
po::options_description *options) {
at::add_format_options(options);
Shell::Action action_group_snap_remove(
{"group", "snap", "remove"}, {"group", "snap", "rm"}, "Remove a snapshot from a group.",
"", &get_group_snap_remove_arguments, &execute_group_snap_remove);
+Shell::Action action_group_snap_rename(
+ {"group", "snap", "rename"}, {}, "Rename group's snapshot.",
+ "", &get_group_snap_rename_arguments, &execute_group_snap_rename);
Shell::Action action_group_snap_list(
{"group", "snap", "list"}, {}, "List snapshots of a group.",
"", &get_group_snap_list_arguments, &execute_group_snap_list);