diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2012-07-25 10:29:58 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2012-07-25 14:47:15 +0100 |
commit | e64bf3fb2945e552d74bde43fb2ff4e1180b976b (patch) | |
tree | 5229b59c5d13f1d65be82dc2a8d184dcd441c9af | |
parent | 2b59b5f1d2e36b0ef84b7c7c9ab2c4b602f2ad91 (diff) | |
download | libguestfs-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.c | 84 | ||||
-rw-r--r-- | generator/generator_actions.ml | 62 | ||||
-rw-r--r-- | src/MAX_PROC_NR | 2 |
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 |