struct rbd_args {
const char *osd_pool_name;
+ const char *rbd_user;
const char *rbd_name;
const char *size;
};
{
struct rbd_args *args = data;
- execlp("rbd", "rbd", "create", "--pool", args->osd_pool_name,
+ if (args->rbd_user){
+ execlp("rbd", "rbd", "create", "--id", args->rbd_user, "--pool",
+ args->osd_pool_name, args->rbd_name, "--size", args->size,
+ (char *)NULL);
+ } else {
+ execlp("rbd", "rbd", "create", "--pool", args->osd_pool_name,
args->rbd_name, "--size", args->size, (char *)NULL);
+ }
return -1;
}
{
struct rbd_args *args = data;
- execlp("rbd", "rbd", "map", "--pool", args->osd_pool_name,
+ if (args->rbd_user){
+ execlp("rbd", "rbd", "map", "--id", args->rbd_user, "--pool",
+ args->osd_pool_name, args->rbd_name, (char *)NULL);
+ } else {
+ execlp("rbd", "rbd", "map", "--pool", args->osd_pool_name,
args->rbd_name, (char *)NULL);
-
+ }
return -1;
}
{
struct rbd_args *args = data;
- execlp("rbd", "rbd", "unmap", args->rbd_name, (char *)NULL);
+ if (args->rbd_user){
+ execlp("rbd", "rbd", "unmap", "--id", args->rbd_user, args->rbd_name,
+ (char *)NULL);
+ } else {
+ execlp("rbd", "rbd", "unmap", args->rbd_name, (char *)NULL);
+ }
+
return -1;
}
{
struct rbd_args *args = data;
- execlp("rbd", "rbd", "rm", args->rbd_name, (char *)NULL);
+ if (args->rbd_user){
+ execlp("rbd", "rbd", "rm", "--id", args->rbd_user, args->rbd_name,
+ (char *)NULL);
+ } else {
+ execlp("rbd", "rbd", "rm", args->rbd_name, (char *)NULL);
+ }
return -1;
}
const char *cmd_args[2];
char cmd_output[PATH_MAX];
const char *rbdname = n;
+ const char *rbduser;
struct rbd_args args = {0};
if (!specs)
if (specs->rbd.rbdname)
rbdname = specs->rbd.rbdname;
+
+ rbduser = specs->rbd.rbduser;
+ if (!rbduser)
+ rbduser = lxc_global_config_value("lxc.bdev.rbd.rbduser");
/* source device /dev/rbd/lxc/ctn */
len = strlen(rbdpool) + strlen(rbdname) + 4 + 11;
args.osd_pool_name = rbdpool;
args.rbd_name = rbdname;
+ args.rbd_user = rbduser;
args.size = sz;
ret = run_command(cmd_output, sizeof(cmd_output), rbd_create_wrapper,
(void *)&args);
struct rbd_args args = {0};
size_t len;
+ args.rbd_user = lxc_global_config_value("lxc.bdev.rbd.rbduser");
+
src = lxc_storage_get_path(orig->src, orig->type);
if (file_exists(src)) {
args.rbd_name = src;
{"dir", required_argument, 0, '6'},
{"rbdname", required_argument, 0, '7'},
{"rbdpool", required_argument, 0, '8'},
+ {"rbduser", required_argument, 0, '9'},
LXC_COMMON_OPTIONS
};
(Default: container name)\n\
--rbdpool=POOL Use Ceph RBD pool name POOL\n\
(Default: lxc)\n\
+ --rbduser=RBDUSER Use Ceph user RBDUSER for auth\n\
+ (Default: admin)\n\
\n\
BDEV option for ZFS (with -B/--bdev zfs) :\n\
--zfsroot=PATH Create zfs under given zfsroot\n\
case '8':
args->rbdpool = arg;
break;
+ case '9':
+ args->rbduser = arg;
+ break;
}
return 0;
}
}
if (strncmp(args->bdevtype, "rbd", strlen(args->bdevtype)) != 0)
- if (args->rbdname || args->rbdpool) {
+ if (args->rbdname || args->rbdpool ) {
ERROR("--rbdname and --rbdpool are only valid with -B rbd");
return false;
}
if (my_args.rbdpool)
spec.rbd.rbdpool = my_args.rbdpool;
+
+ if(my_args.rbduser)
+ spec.rbd.rbduser = my_args.rbduser;
}
if (my_args.dir)