rbd help group image remove
usage: rbd group image remove [--group-pool <group-pool>] [--group <group>]
[--image-pool <image-pool>] [--image <image>]
- [--pool <pool>]
+ [--pool <pool>] [--image-id <image-id>]
<group-spec> <image-spec>
Remove an image from a consistency group.
--image-pool arg image pool name
--image arg image name
-p [ --pool ] arg pool name unless overridden
+ --image-id arg image id
rbd help group list
usage: rbd group list [--pool <pool>] [--format <format>] [--pretty-format]
return boost::lexical_cast<uint64_t>(features);
}
+bool check_if_image_spec_present(const po::variables_map &vm,
+ at::ArgumentModifier mod,
+ size_t spec_arg_index) {
+ std::string image_key = (mod == at::ARGUMENT_MODIFIER_DEST ?
+ at::DEST_IMAGE_NAME : at::IMAGE_NAME);
+
+ if (vm.count(image_key)) {
+ return true;
+ }
+
+ std::string spec = get_positional_argument(vm, spec_arg_index);
+ if (!spec.empty()) {
+ return true;
+ }
+
+ return false;
+}
+
} // namespace utils
} // namespace rbd
size_t *write_length,
size_t *offset);
+bool check_if_image_spec_present(const boost::program_options::variables_map &vm,
+ argument_types::ArgumentModifier mod,
+ size_t spec_arg_index);
+
std::string image_id(librbd::Image& image);
std::string mirror_image_state(librbd::mirror_image_state_t mirror_image_state);
std::string image_name;
std::string image_pool_name;
+ std::string image_id;
- r = utils::get_special_pool_image_names(vm, &arg_index,
- &image_pool_name,
- &image_name);
+ if (vm.count(at::IMAGE_ID)) {
+ image_id = vm[at::IMAGE_ID].as<std::string>();
+ }
+
+ bool has_image_spec = utils::check_if_image_spec_present(
+ vm, at::ARGUMENT_MODIFIER_NONE, arg_index);
+
+ if (!image_id.empty() && has_image_spec) {
+ std::cerr << "rbd: trying to access image using both name and id. "
+ << std::endl;
+ return -EINVAL;
+ }
+
+ if (image_id.empty()) {
+ r = utils::get_special_pool_image_names(vm, &arg_index, &image_pool_name,
+ &image_name);
+ } else {
+ image_pool_name = utils::get_pool_name(vm, &arg_index);
+ }
if (r < 0) {
std::cerr << "rbd: image remove error: " << cpp_strerror(r) << std::endl;
}
librbd::RBD rbd;
- r = rbd.group_image_remove(cg_io_ctx, group_name.c_str(),
- image_io_ctx, image_name.c_str());
+ if (image_id.empty()) {
+ r = rbd.group_image_remove(cg_io_ctx, group_name.c_str(),
+ image_io_ctx, image_name.c_str());
+ } else {
+ r = rbd.group_image_remove_by_id(cg_io_ctx, group_name.c_str(),
+ image_io_ctx, image_id.c_str());
+ }
if (r < 0) {
std::cerr << "rbd: remove image error: " << cpp_strerror(r) << std::endl;
return r;
at::add_pool_option(options, at::ARGUMENT_MODIFIER_NONE,
" unless overridden");
+ at::add_image_id_option(options);
}
void get_list_images_arguments(po::options_description *positional,