On Thu, Jul 16, 2009 at 08:49:30AM -0400, Michael Goldish wrote:
> 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" <[email protected]> wrote:
>
> > Signed-off-by: Yolkfull Chow <[email protected]>
> > ---
> > 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")
So when running migration test, we have to specify a static UUID for
VM,right?
>
> 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 [email protected]
> > 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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html