ruby-lxc 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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