Re: [PATCH] Specify the system UUID for VM

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'd do this a little differently, because of the constraints imposed by the different purposes of VM.create() and VM.make_qemu_command().

----- "Yolkfull Chow" <yzhou@xxxxxxxxxx> wrote:

> Signed-off-by: Yolkfull Chow <yzhou@xxxxxxxxxx>
> ---
>  client/tests/kvm/kvm_vm.py |   11 +++++++++++
>  1 files changed, 11 insertions(+), 0 deletions(-)
> 
> diff --git a/client/tests/kvm/kvm_vm.py b/client/tests/kvm/kvm_vm.py
> index 503f636..895049e 100644
> --- a/client/tests/kvm/kvm_vm.py
> +++ b/client/tests/kvm/kvm_vm.py
> @@ -113,6 +113,13 @@ class VM:
>          self.qemu_path = qemu_path
>          self.image_dir = image_dir
>          self.iso_dir = iso_dir
> +        
> +        if params.get("uuid"):
> +            if params.get("uuid") == "random":
> +                uuid = os.popen("cat
> /proc/sys/kernel/random/uuid").readline()
> +                self.uuid = uuid.strip()
> +            else:
> +                self.uuid = params.get("uuid")

1. First, I'd put this code near the code that finds free ports for the
VM, immediately after the code that find a free VNC port, because this
does a similar job (assigns something dynamic to the VM).
This is not important, it's just a matter of code beauty.

2. Then, I'd change the code to something like:

if params.get("uuid") == "random":
    uuid = os.popen("cat /proc/sys/kernel/random/uuid").readline()
    self.random_uuid = uuid.strip()

Or consider reading the file directly:

if params.get("uuid") == "random":
    file = open("/proc/sys/kernel/random/uuid")
    self.random_uuid = file.read().strip()
    file.close()

Not much longer, but a little nicer in my opinion.

>  
>          # Find available monitor filename
> @@ -374,6 +381,10 @@ class VM:
>              # Make qemu command
>              qemu_command = self.make_qemu_command()
>  
> +            # Specify the system UUID
> +            if self.uuid:
> +                qemu_command += " -uuid %s" % self.uuid
> +

3. Then, this code, in my opinion, should be in VM.make_qemu_command(),
not in VM.create(). You can put it at the very end, after handling
"display", or wherever you want.
It should also be changed to something like:

if params.get("uuid") == "random":
    qemu_cmd += " -uuid %s" % self.random_uuid
elif params.get("uuid"):
    qemu_cmd += " -uuid %s" % params.get("uuid")

4. You should add the following line to VM.__init__():

self.random_uuid = None

(I just realized that there's a little bug in the existing VM code,
so we'll have to set a few more attributes to None in VM.__init__(),
in addition to random_uuid. I'll post a patch for that.)

5. While you're at it, add a function VM.get_uuid(), which should do
something like:

def get_uuid(self):
    """
    (docstring)
    """
    if self.params.get("uuid") == "random":
        return self.random_uuid
    else:
        return self.params.get("uuid")
    # (Note that if there is no "uuid" in self.params,
    # this function will return None, which is good)

This will be useful for a little "uuid test" Yaniv once suggested --
it will make sure the guest reports the correct uuid.

The rationale behind all this:
VM.make_qemu_command() is often called with altered 'params', to see
if those params would lead to a different qemu command.
If a VM is running with a random uuid, and we call VM.make_qemu_command()
with params that specify "uuid = ..." (not random), we want the qemu
command to reflect that. If a VM is running with a user-specified uuid,
and we want to make it random, we want the qemu command to change.
However, if a VM is running with a random uuid, and we start a new test
with a random uuid, we don't want to restart the VM with a new random uuid --
we'll just use the existing random uuid.
So, if the uuid is random, it should be generated in create(), and used
in make_qemu_command(). If it's user-specified, it should just be used by
make_qemu_command().

I may have made mistakes in the code in this message, so it'll need a
little testing.

Thanks,
Michael

>              # Is this VM supposed to accept incoming migrations?
>              if for_migration:
>                  # Find available migration port
> -- 
> 1.6.2.5
> 
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux