[Libguestfs] [PATCH v3.1 9/9] New API: set_uuid_random

Chen Hanxiao chenhanxiao at cn.fujitsu.com
Fri Jun 26 09:35:44 UTC 2015


Signed-off-by: Chen Hanxiao <chenhanxiao at cn.fujitsu.com>
---
 daemon/uuids.c                 | 31 +++++++++++++++++++++++++++++++
 generator/actions.ml           | 16 ++++++++++++++++
 src/MAX_PROC_NR                |  2 +-
 tests/btrfs/test-btrfs-misc.pl | 11 +++++++++++
 4 files changed, 59 insertions(+), 1 deletion(-)

diff --git a/daemon/uuids.c b/daemon/uuids.c
index 5238f3e..4530491 100644
--- a/daemon/uuids.c
+++ b/daemon/uuids.c
@@ -85,3 +85,34 @@ do_set_uuid (const char *device, const char *uuid)
 
   return r;
 }
+
+int
+do_set_uuid_random (const char *device)
+{
+  int r;
+
+  /* How we set the UUID depends on the filesystem type. */
+  CLEANUP_FREE char *vfs_type = get_blkid_tag (device, "TYPE");
+  if (vfs_type == NULL)
+    return -1;
+
+  if (fstype_is_extfs (vfs_type))
+    r = set_e2uuid_random (device);
+
+  else if (STREQ (vfs_type, "xfs"))
+    r = xfs_set_uuid_random (device);
+
+  else if (STREQ (vfs_type, "swap"))
+    r = swap_set_uuid_random (device);
+
+  else if (STREQ (vfs_type, "btrfs"))
+    r = btrfs_set_uuid_random (device);
+
+  else {
+    reply_with_error ("don't know how to set the random UUID for '%s' filesystems",
+                      vfs_type);
+    r = -1;
+  }
+
+  return r;
+}
diff --git a/generator/actions.ml b/generator/actions.ml
index d5e5ccf..0328858 100644
--- a/generator/actions.ml
+++ b/generator/actions.ml
@@ -12593,6 +12593,22 @@ numbered C<partnum> on device C<device>.
 
 It returns C<primary>, C<logical>, or C<extended>." };
 
+  { defaults with
+    name = "set_uuid_random"; added = (1, 29, 47);
+    style = RErr, [Device "device"], [];
+    proc_nr = Some 455;
+    tests = [
+        InitBasicFS, Always, TestRun (
+            [["set_uuid_random"; "/dev/sda1"]]), [];
+      ];
+    shortdesc = "set the random filesystem UUID";
+    longdesc = "\
+Set the filesystem UUID on C<device> to a random UUID.
+
+Only some filesystem types support setting UUIDs.
+
+To read the UUID on a filesystem, call C<guestfs_vfs_uuid>." };
+
 ]
 
 (* Non-API meta-commands available only in guestfish.
diff --git a/src/MAX_PROC_NR b/src/MAX_PROC_NR
index 515f19a..4930863 100644
--- a/src/MAX_PROC_NR
+++ b/src/MAX_PROC_NR
@@ -1 +1 @@
-454
+455
diff --git a/tests/btrfs/test-btrfs-misc.pl b/tests/btrfs/test-btrfs-misc.pl
index b47caab..4982f0d 100755
--- a/tests/btrfs/test-btrfs-misc.pl
+++ b/tests/btrfs/test-btrfs-misc.pl
@@ -64,5 +64,16 @@ if ($err == 0) {
     warn "$0: skipping test for btrfs UUID change feature is not available\n";
 }
 
+# Setting btrfs random UUID.
+eval {
+    $g->set_uuid_random ("/dev/sda1")
+};
+# FIXME: ignore ESRCH
+my $err = $g->last_errno ();
+
+if ($err == Errno::ENOTSUP()) {
+    warn "$0: skipping test for btrfs UUID change feature is not available\n";
+}
+
 $g->shutdown ();
 $g->close ();
-- 
2.1.0




More information about the Libguestfs mailing list