summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2012-03-15 10:25:26 +0000
committerRichard W.M. Jones <rjones@redhat.com>2012-03-15 16:15:44 +0000
commit79c4ecc0f398d4317a3713e0691df873a7d4b663 (patch)
treeac8f2507396c73f93e43cd85afa9e5b7f1244a7f
parent03d4345c8c8de4df1c9d4446b0817d85ff378aa9 (diff)
downloadlibguestfs-79c4ecc0f398d4317a3713e0691df873a7d4b663.tar.gz
libguestfs-79c4ecc0f398d4317a3713e0691df873a7d4b663.tar.xz
libguestfs-79c4ecc0f398d4317a3713e0691df873a7d4b663.zip
New API: lvcreate-free: Create logical volume as % of free space.
-rw-r--r--daemon/lvm.c30
-rw-r--r--generator/generator_actions.ml18
-rw-r--r--src/MAX_PROC_NR2
3 files changed, 49 insertions, 1 deletions
diff --git a/daemon/lvm.c b/daemon/lvm.c
index 75197564..b0148e48 100644
--- a/daemon/lvm.c
+++ b/daemon/lvm.c
@@ -263,6 +263,36 @@ do_lvcreate (const char *logvol, const char *volgroup, int mbytes)
}
int
+do_lvcreate_free (const char *logvol, const char *volgroup, int percent)
+{
+ char *err;
+ int r;
+
+ if (percent < 0 || percent > 100) {
+ reply_with_error ("percentage must be [0..100] (was %d)", percent);
+ return -1;
+ }
+
+ char size[64];
+ snprintf (size, sizeof size, "%d%%FREE", percent);
+
+ r = command (NULL, &err,
+ "lvm", "lvcreate",
+ "-L", size, "-n", logvol, volgroup, NULL);
+ if (r == -1) {
+ reply_with_error ("%s", err);
+ free (err);
+ return -1;
+ }
+
+ free (err);
+
+ udev_settle ();
+
+ return 0;
+}
+
+int
do_lvresize (const char *logvol, int mbytes)
{
char *err;
diff --git a/generator/generator_actions.ml b/generator/generator_actions.ml
index 4b4e5ffe..454f5758 100644
--- a/generator/generator_actions.ml
+++ b/generator/generator_actions.ml
@@ -6762,6 +6762,24 @@ in the filesystem is freed.
In future (but not currently) these zeroed blocks will be
\"sparsified\" - that is, given back to the host.");
+ ("lvcreate_free", (RErr, [String "logvol"; String "volgroup"; Int "percent"], []), 312, [Optional "lvm2"],
+ [InitEmpty, Always, TestOutputList (
+ [["part_disk"; "/dev/sda"; "mbr"];
+ ["pvcreate"; "/dev/sda1"];
+ ["vgcreate"; "VG"; "/dev/sda1"];
+ ["lvcreate_free"; "LV1"; "VG"; "50"];
+ ["lvcreate_free"; "LV2"; "VG"; "50"];
+ ["lvcreate_free"; "LV3"; "VG"; "50"];
+ ["lvcreate_free"; "LV4"; "VG"; "100"];
+ ["lvs"]],
+ ["/dev/VG/LV1"; "/dev/VG/LV2"; "/dev/VG/LV3"; "/dev/VG/LV4"])],
+ "create an LVM logical volume in % remaining free space",
+ "\
+Create an LVM logical volume called C</dev/volgroup/logvol>,
+using approximately C<percent> % of the free space remaining
+in the volume group. Most usefully, when C<percent> is C<100>
+this will create the largest possible LV.");
+
]
let all_functions = non_daemon_functions @ daemon_functions
diff --git a/src/MAX_PROC_NR b/src/MAX_PROC_NR
index b661fff6..a1e0432c 100644
--- a/src/MAX_PROC_NR
+++ b/src/MAX_PROC_NR
@@ -1 +1 @@
-311
+312