ruby-lxc 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/ext/lxc/lxc.c +61 -7
  2. data/lib/lxc/version.rb +1 -1
  3. metadata +2 -2
data/ext/lxc/lxc.c CHANGED
@@ -51,6 +51,20 @@ struct container_data {
51
51
  struct lxc_container *container;
52
52
  };
53
53
 
54
+ struct bdev_specs {
55
+ char *fstype;
56
+ uint64_t fssize; // fs size in bytes
57
+ struct {
58
+ char *zfsroot;
59
+ } zfs;
60
+ struct {
61
+ char *vg;
62
+ char *lv;
63
+ char *thinpool; // lvm thin pool to use, if any
64
+ } lvm;
65
+ char *dir;
66
+ };
67
+
54
68
  static char **
55
69
  ruby_to_c_string_array(VALUE rb_arr)
56
70
  {
@@ -1010,6 +1024,7 @@ struct container_create_without_gvl_args {
1010
1024
  struct container_data *data;
1011
1025
  char *template;
1012
1026
  char *bdevtype;
1027
+ struct bdev_specs *bdevspecs;
1013
1028
  int flags;
1014
1029
  char **args;
1015
1030
  };
@@ -1021,14 +1036,14 @@ container_create_without_gvl(void *args_void)
1021
1036
  (struct container_create_without_gvl_args *)args_void;
1022
1037
  RETURN_WITHOUT_GVL(
1023
1038
  args->data->container->create(args->data->container, args->template,
1024
- args->bdevtype, NULL, args->flags,
1039
+ args->bdevtype, args->bdevspecs, args->flags,
1025
1040
  args->args)
1026
1041
  );
1027
1042
  }
1028
1043
 
1029
1044
  /*
1030
1045
  * call-seq:
1031
- * container.create(template, bdevtype = nil, flags = 0, args = [])
1046
+ * container.create(template, bdevtype = nil, bdevspecs = {}, flags = 0, args = [])
1032
1047
  *
1033
1048
  * Creates a structure for the container according to the given template.
1034
1049
  * This usually consists of downloading and installing a Linux distribution
@@ -1040,17 +1055,57 @@ static VALUE
1040
1055
  container_create(int argc, VALUE *argv, VALUE self)
1041
1056
  {
1042
1057
  int ret;
1043
- VALUE rb_template, rb_bdevtype, rb_flags, rb_args;
1058
+ struct bdev_specs spec;
1044
1059
  struct container_create_without_gvl_args args;
1045
1060
  char **default_args = { NULL };
1061
+ VALUE rb_template, rb_bdevtype, rb_bdevspecs, rb_flags, rb_args;
1062
+ VALUE fstype, fssize, zfsroot, lvname, vgname, thinpool, dir;
1046
1063
 
1047
1064
  args.args = default_args;
1048
- rb_scan_args(argc, argv, "13",
1049
- &rb_template, &rb_bdevtype, &rb_flags, &rb_args);
1065
+ rb_scan_args(argc, argv, "14",
1066
+ &rb_template, &rb_bdevtype, &rb_bdevspecs, &rb_flags,
1067
+ &rb_args);
1068
+
1069
+ if (!NIL_P(rb_bdevspecs)) {
1070
+ memset(&spec, 0, sizeof(spec));
1071
+
1072
+ fstype = rb_hash_aref(rb_bdevspecs, SYMBOL("fstype"));
1073
+ if (!NIL_P(fstype))
1074
+ spec.fstype = StringValuePtr(fstype);
1075
+
1076
+ fssize = rb_hash_aref(rb_bdevspecs, SYMBOL("fssize"));
1077
+ if (!NIL_P(fssize))
1078
+ spec.fssize = NUM2ULONG(fssize);
1079
+
1080
+ zfsroot = rb_hash_aref(rb_bdevspecs, SYMBOL("zfsroot"));
1081
+ if (!NIL_P(zfsroot))
1082
+ spec.zfs.zfsroot = StringValuePtr(zfsroot);
1083
+
1084
+ lvname = rb_hash_aref(rb_bdevspecs, SYMBOL("lvname"));
1085
+ if (!NIL_P(lvname))
1086
+ spec.lvm.lv = StringValuePtr(lvname);
1087
+
1088
+ vgname = rb_hash_aref(rb_bdevspecs, SYMBOL("vgname"));
1089
+ if (!NIL_P(vgname))
1090
+ spec.lvm.vg = StringValuePtr(vgname);
1091
+
1092
+ thinpool = rb_hash_aref(rb_bdevspecs, SYMBOL("thinpool"));
1093
+ if (!NIL_P(thinpool))
1094
+ spec.lvm.thinpool = StringValuePtr(thinpool);
1095
+
1096
+ dir = rb_hash_aref(rb_bdevspecs, SYMBOL("dir"));
1097
+ if (!NIL_P(dir))
1098
+ spec.dir = StringValuePtr(dir);
1099
+
1100
+ args.bdevspecs = &spec;
1101
+
1102
+ } else {
1103
+ args.bdevspecs = NULL;
1104
+ }
1050
1105
 
1051
1106
  args.template = StringValuePtr(rb_template);
1052
1107
  args.bdevtype = NIL_P(rb_bdevtype) ? NULL : StringValuePtr(rb_bdevtype);
1053
- args.flags = NIL_P(rb_flags) ? 0 : NUM2INT(rb_flags);
1108
+ args.flags = NIL_P(rb_flags) ? 0 : NUM2INT(rb_flags);
1054
1109
  if (!NIL_P(rb_args))
1055
1110
  args.args = ruby_to_c_string_array(rb_args);
1056
1111
 
@@ -1067,7 +1122,6 @@ container_create(int argc, VALUE *argv, VALUE self)
1067
1122
  return self;
1068
1123
  }
1069
1124
 
1070
-
1071
1125
  static RETURN_WITHOUT_GVL_TYPE
1072
1126
  destroy_without_gvl(void *data_void)
1073
1127
  {
data/lib/lxc/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module LXC
2
- VERSION = '1.0.2'
2
+ VERSION = '1.1.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-lxc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-03-29 00:00:00.000000000 Z
12
+ date: 2014-05-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake-compiler