[Libguestfs] [PATCH v4 7/7] New API: set_uuid_random

Pino Toscano ptoscano at redhat.com
Tue Jun 30 14:06:53 UTC 2015


In data martedì 30 giugno 2015 19:23:14, Chen Hanxiao ha scritto:
> 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 | 15 +++++++++++++++
>  4 files changed, 63 insertions(+), 1 deletion(-)
> 
> diff --git a/daemon/uuids.c b/daemon/uuids.c
> index 5238f3e..cd5787f 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_errno (ENOTSUP, "don't know how to set the random UUID for '%s' filesystems",
> +                      vfs_type);

You can use a NOT_SUPPORTED(-1, "...") macro here.

> +    r = -1;
> +  }
> +
> +  return r;
> +}
> diff --git a/generator/actions.ml b/generator/actions.ml
> index 372e50e..52404ab 100644
> --- a/generator/actions.ml
> +++ b/generator/actions.ml
> @@ -12623,6 +12623,22 @@ removed from the filesystem.
>  The C<targetdev> needs to be same size or larger than the C<srcdev>. Devices
>  which are currently mounted are never allowed to be used as the C<targetdev>." };
>  
> +  { defaults with
> +    name = "set_uuid_random"; added = (1, 29, 48);
> +    style = RErr, [Device "device"], [];
> +    proc_nr = Some 456;
> +    tests = [
> +        InitBasicFS, Always, TestRun (
> +            [["set_uuid_random"; "/dev/sda1"]]), [];
> +      ];
> +    shortdesc = "set a random UUID for the filesystem";
> +    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 4930863..8d38505 100644
> --- a/src/MAX_PROC_NR
> +++ b/src/MAX_PROC_NR
> @@ -1 +1 @@
> -455
> +456
> diff --git a/tests/btrfs/test-btrfs-misc.pl b/tests/btrfs/test-btrfs-misc.pl
> index 0643eeb..224d075 100755
> --- a/tests/btrfs/test-btrfs-misc.pl
> +++ b/tests/btrfs/test-btrfs-misc.pl
> @@ -68,5 +68,20 @@ if ($@) {
>      unless $uuid eq "12345678-1234-1234-1234-123456789012";
>  }
>  
> +# Setting btrfs random UUID.
> +eval {
> +    $g->set_uuid_random ("/dev/sda1")
> +};
> +
> +$err = $g->last_errno ();
> +
> +if ($@) {
> +    if ($err == Errno::ENOTSUP()) {
> +        warn "$0: skipping test for btrfs UUID change feature is not available";
> +    } elsif ($err) {
> +        die $@;
> +    }
> +}

Some note as in patch 1 about $@ and $err.

Thanks,
-- 
Pino Toscano




More information about the Libguestfs mailing list