summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2012-07-25 10:29:58 +0100
committerRichard W.M. Jones <rjones@redhat.com>2012-07-25 14:47:15 +0100
commite64bf3fb2945e552d74bde43fb2ff4e1180b976b (patch)
tree5229b59c5d13f1d65be82dc2a8d184dcd441c9af
parent2b59b5f1d2e36b0ef84b7c7c9ab2c4b602f2ad91 (diff)
downloadlibguestfs-e64bf3fb2945e552d74bde43fb2ff4e1180b976b.tar.gz
libguestfs-e64bf3fb2945e552d74bde43fb2ff4e1180b976b.tar.xz
libguestfs-e64bf3fb2945e552d74bde43fb2ff4e1180b976b.zip
New APIs: pvchange-uuid, pvchange-uuid-all, vgchange-uuid, vgchange-uuid-all.
These APIs will allow sysprep to change the UUIDs of all PVs and VGs in the system. LVs don't have UUIDs AFAICT, or at least there seems to be no way to change them if they do have them.
-rw-r--r--daemon/lvm.c84
-rw-r--r--generator/generator_actions.ml62
-rw-r--r--src/MAX_PROC_NR2
3 files changed, 147 insertions, 1 deletions
diff --git a/daemon/lvm.c b/daemon/lvm.c
index 06fdbff0..5f0c3a69 100644
--- a/daemon/lvm.c
+++ b/daemon/lvm.c
@@ -960,3 +960,87 @@ do_vgmeta (const char *vg, size_t *size_r)
return buf; /* caller will free */
}
+
+int
+do_pvchange_uuid (const char *device)
+{
+ char *err;
+ int r;
+
+ r = command (NULL, &err,
+ "lvm", "pvchange", "-u", device, NULL);
+ if (r == -1) {
+ reply_with_error ("%s: %s", device, err);
+ free (err);
+ return -1;
+ }
+
+ free (err);
+
+ udev_settle ();
+
+ return 0;
+}
+
+int
+do_pvchange_uuid_all (void)
+{
+ char *err;
+ int r;
+
+ r = command (NULL, &err,
+ "lvm", "pvchange", "-u", "-a", NULL);
+ if (r == -1) {
+ reply_with_error ("%s", err);
+ free (err);
+ return -1;
+ }
+
+ free (err);
+
+ udev_settle ();
+
+ return 0;
+}
+
+int
+do_vgchange_uuid (const char *vg)
+{
+ char *err;
+ int r;
+
+ r = command (NULL, &err,
+ "lvm", "vgchange", "-u", vg, NULL);
+ if (r == -1) {
+ reply_with_error ("%s: %s", vg, err);
+ free (err);
+ return -1;
+ }
+
+ free (err);
+
+ udev_settle ();
+
+ return 0;
+}
+
+int
+do_vgchange_uuid_all (void)
+{
+ char *err;
+ int r;
+
+ r = command (NULL, &err,
+ "lvm", "vgchange", "-u", NULL);
+ if (r == -1) {
+ reply_with_error ("%s", err);
+ free (err);
+ return -1;
+ }
+
+ free (err);
+
+ udev_settle ();
+
+ return 0;
+}
diff --git a/generator/generator_actions.ml b/generator/generator_actions.ml
index ecb2e8cd..a07fce96 100644
--- a/generator/generator_actions.ml
+++ b/generator/generator_actions.ml
@@ -8975,6 +8975,68 @@ The returned struct contains geometry information. Missing
fields are returned as C<-1> (for numeric fields) or empty
string." };
+ { defaults with
+ name = "pvchange_uuid";
+ style = RErr, [Device "device"], [];
+ proc_nr = Some 338;
+ optional = Some "lvm2";
+ tests = [
+ InitEmpty, IfAvailable "lvm2", TestRun (
+ [["part_disk"; "/dev/sda"; "mbr"];
+ ["pvcreate"; "/dev/sda1"];
+ ["pvchange_uuid"; "/dev/sda1"]])
+ ];
+ shortdesc = "generate a new random UUID for a physical volume";
+ longdesc = "\
+Generate a new random UUID for the physical volume C<device>." };
+
+ { defaults with
+ name = "pvchange_uuid_all";
+ style = RErr, [], [];
+ proc_nr = Some 339;
+ optional = Some "lvm2";
+ tests = [
+ InitEmpty, IfAvailable "lvm2", TestRun (
+ [["part_disk"; "/dev/sda"; "mbr"];
+ ["pvcreate"; "/dev/sda1"];
+ ["pvchange_uuid_all"]])
+ ];
+ shortdesc = "generate new random UUIDs for all physical volumes";
+ longdesc = "\
+Generate new random UUIDs for all physical volumes." };
+
+ { defaults with
+ name = "vgchange_uuid";
+ style = RErr, [String "vg"], [];
+ proc_nr = Some 340;
+ optional = Some "lvm2";
+ tests = [
+ InitEmpty, IfAvailable "lvm2", TestRun (
+ [["part_disk"; "/dev/sda"; "mbr"];
+ ["pvcreate"; "/dev/sda1"];
+ ["vgcreate"; "VG"; "/dev/sda1"];
+ ["vgchange_uuid"; "/dev/VG"]])
+ ];
+ shortdesc = "generate a new random UUID for a volume group";
+ longdesc = "\
+Generate a new random UUID for the volume group C<vg>." };
+
+ { defaults with
+ name = "vgchange_uuid_all";
+ style = RErr, [], [];
+ proc_nr = Some 341;
+ optional = Some "lvm2";
+ tests = [
+ InitEmpty, IfAvailable "lvm2", TestRun (
+ [["part_disk"; "/dev/sda"; "mbr"];
+ ["pvcreate"; "/dev/sda1"];
+ ["vgcreate"; "VG"; "/dev/sda1"];
+ ["vgchange_uuid_all"]])
+ ];
+ shortdesc = "generate new random UUIDs for all volume groups";
+ longdesc = "\
+Generate new random UUIDs for all volume groups." };
+
]
(* Non-API meta-commands available only in guestfish.
diff --git a/src/MAX_PROC_NR b/src/MAX_PROC_NR
index f59a90f3..947e93bc 100644
--- a/src/MAX_PROC_NR
+++ b/src/MAX_PROC_NR
@@ -1 +1 @@
-337
+341