Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions doc/lxc-create.sgml.in
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@
You can specify the following options :
<replaceable>--rbdname RBDNAME</replaceable> will create a blockdevice named RBDNAME rather than the default, which is the container name.
<replaceable>--rbdpool POOL</replaceable> will create the blockdevice in the pool named POOL, rather than the default, which is 'lxc'.
<replaceable>--rbduser RBDUSER</replaceable> will specify the ceph user RBDUSER creating the blockdevice, rather than the default, which is 'admin'.
</para>
<para>
If backingstore is 'best', then lxc will try, in order, btrfs,
Expand Down
1 change: 1 addition & 0 deletions src/lxc/initutils.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ const char *lxc_global_config_value(const char *option_name)
{ "lxc.bdev.lvm.thin_pool", DEFAULT_THIN_POOL },
{ "lxc.bdev.zfs.root", DEFAULT_ZFSROOT },
{ "lxc.bdev.rbd.rbdpool", DEFAULT_RBDPOOL },
{ "lxc.bdev.rbd.rbduser", DEFAULT_RBDUSER },
{ "lxc.lxcpath", NULL },
{ "lxc.default_config", NULL },
{ "lxc.cgroup.pattern", NULL },
Expand Down
1 change: 1 addition & 0 deletions src/lxc/initutils.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#define DEFAULT_THIN_POOL "lxc"
#define DEFAULT_ZFSROOT "lxc"
#define DEFAULT_RBDPOOL "lxc"
#define DEFAULT_RBDUSER NULL

#ifndef PR_SET_MM
#define PR_SET_MM 35
Expand Down
1 change: 1 addition & 0 deletions src/lxc/lxccontainer.h
Original file line number Diff line number Diff line change
Expand Up @@ -936,6 +936,7 @@ struct bdev_specs {
struct {
char *rbdname; /*!< RBD image name */
char *rbdpool; /*!< Ceph pool name */
char *rbduser; /*!< Ceph user name*/
} rbd;
};

Expand Down
40 changes: 35 additions & 5 deletions src/lxc/storage/rbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ lxc_log_define(rbd, lxc);

struct rbd_args {
const char *osd_pool_name;
const char *rbd_user;
const char *rbd_name;
const char *size;
};
Expand All @@ -30,8 +31,14 @@ static int rbd_create_wrapper(void *data)
{
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;
}
Expand All @@ -40,17 +47,27 @@ static int rbd_map_wrapper(void *data)
{
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;
}

static int rbd_unmap_wrapper(void *data)
{
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;
}
Expand All @@ -59,7 +76,12 @@ static int rbd_delete_wrapper(void *data)
{
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;
}
Expand All @@ -83,6 +105,7 @@ int rbd_create(struct lxc_storage *bdev, const char *dest, const char *n,
const char *cmd_args[2];
char cmd_output[PATH_MAX];
const char *rbdname = n;
const char *rbduser;
struct rbd_args args = {0};

if (!specs)
Expand All @@ -94,6 +117,10 @@ int rbd_create(struct lxc_storage *bdev, const char *dest, const char *n,

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;
Expand Down Expand Up @@ -123,6 +150,7 @@ int rbd_create(struct lxc_storage *bdev, const char *dest, const char *n,

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);
Expand Down Expand Up @@ -179,6 +207,8 @@ int rbd_destroy(struct lxc_storage *orig)
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;
Expand Down
2 changes: 1 addition & 1 deletion src/lxc/tools/arguments.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ struct lxc_arguments {
char *fstype;
uint64_t fssize;
char *lvname, *vgname, *thinpool;
char *rbdname, *rbdpool;
char *rbdname, *rbdpool, *rbduser;
char *zfsroot, *lowerdir, *dir;

/* lxc-execute and lxc-unshare */
Expand Down
11 changes: 10 additions & 1 deletion src/lxc/tools/lxc_create.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ static const struct option my_longopts[] = {
{"dir", required_argument, 0, '6'},
{"rbdname", required_argument, 0, '7'},
{"rbdpool", required_argument, 0, '8'},
{"rbduser", required_argument, 0, '9'},
LXC_COMMON_OPTIONS
};

Expand Down Expand Up @@ -67,6 +68,8 @@ Options :\n\
(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\
Expand Down Expand Up @@ -128,6 +131,9 @@ static int my_parser(struct lxc_arguments *args, int c, char *arg)
case '8':
args->rbdpool = arg;
break;
case '9':
args->rbduser = arg;
break;
}
return 0;
}
Expand Down Expand Up @@ -175,7 +181,7 @@ static bool validate_bdev_args(struct lxc_arguments *args)
}

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;
}
Expand Down Expand Up @@ -303,6 +309,9 @@ int lxc_create_main(int argc, char *argv[])

if (my_args.rbdpool)
spec.rbd.rbdpool = my_args.rbdpool;

if(my_args.rbduser)
spec.rbd.rbduser = my_args.rbduser;
}

if (my_args.dir)
Expand Down