diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2012-03-15 10:25:26 +0000 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2012-03-15 16:15:44 +0000 |
commit | 79c4ecc0f398d4317a3713e0691df873a7d4b663 (patch) | |
tree | ac8f2507396c73f93e43cd85afa9e5b7f1244a7f | |
parent | 03d4345c8c8de4df1c9d4446b0817d85ff378aa9 (diff) | |
download | libguestfs-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.c | 30 | ||||
-rw-r--r-- | generator/generator_actions.ml | 18 | ||||
-rw-r--r-- | src/MAX_PROC_NR | 2 |
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 |