]>
git.proxmox.com Git - ceph.git/blob - ceph/src/tools/rbd/action/Rename.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #include "tools/rbd/ArgumentTypes.h"
5 #include "tools/rbd/Shell.h"
6 #include "tools/rbd/Utils.h"
7 #include "common/errno.h"
9 #include <boost/program_options.hpp>
15 namespace at
= argument_types
;
16 namespace po
= boost::program_options
;
18 static int do_rename(librbd::RBD
&rbd
, librados::IoCtx
& io_ctx
,
19 const char *imgname
, const char *destname
)
21 int r
= rbd
.rename(io_ctx
, imgname
, destname
);
27 void get_arguments(po::options_description
*positional
,
28 po::options_description
*options
) {
29 at::add_image_spec_options(positional
, options
, at::ARGUMENT_MODIFIER_SOURCE
);
30 at::add_image_spec_options(positional
, options
, at::ARGUMENT_MODIFIER_DEST
);
33 int execute(const po::variables_map
&vm
) {
35 std::string pool_name
;
36 std::string image_name
;
37 std::string snap_name
;
38 int r
= utils::get_pool_image_snapshot_names(
39 vm
, at::ARGUMENT_MODIFIER_SOURCE
, &arg_index
, &pool_name
, &image_name
,
40 &snap_name
, utils::SNAPSHOT_PRESENCE_NONE
, utils::SPEC_VALIDATION_NONE
);
45 std::string dst_image_name
;
46 std::string dst_snap_name
;
47 std::string dst_pool_name
= pool_name
;
48 r
= utils::get_pool_image_snapshot_names(
49 vm
, at::ARGUMENT_MODIFIER_DEST
, &arg_index
, &dst_pool_name
, &dst_image_name
,
50 &dst_snap_name
, utils::SNAPSHOT_PRESENCE_NONE
, utils::SPEC_VALIDATION_FULL
);
55 if (pool_name
!= dst_pool_name
) {
56 std::cerr
<< "rbd: mv/rename across pools not supported" << std::endl
57 << "source pool: " << pool_name
<< " dest pool: " << dst_pool_name
62 librados::Rados rados
;
63 librados::IoCtx io_ctx
;
64 r
= utils::init(pool_name
, &rados
, &io_ctx
);
70 r
= do_rename(rbd
, io_ctx
, image_name
.c_str(), dst_image_name
.c_str());
72 std::cerr
<< "rbd: rename error: " << cpp_strerror(r
) << std::endl
;
79 {"rename"}, {"mv"}, "Rename image within pool.", "", &get_arguments
,