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

Re: [et-mgmt-tools] [PATCH][RFC][virtinst] Adding Cloning Feature(changing from libvirtML)



A couple more bits of XML (potentially) need changing:

 - In the <graphics> tag, if the 'port' attribute is not already -1, then we
   need to set it to -1 - otherwise the VNC ports will clash.
 - In the <interface> tag, if there is a <target> element present, we need
   to remove it completely. The <target> element is very rarely used, but
   since it refers to the backend device name (ie to change from the default
   of vifN.M) we need to remove it otherwise backend devices will clash.
 - In the <console> tag, if there is a 'pty' attribute we need to remove it.
 - In the <interface> tag, if there is a <ip> element that needs removing.

That is basically all. Most important changes of MAC & UUID are already done.

Thank you for this information. The patch which I attached does not yet depend on this change.
That's a reasonable limitation to start off with - should be easy enough
to fix it later.

O.K. I also think it is easy.

There's no easy way to detect if a file is sparse - particularly in python.
I think the best option is to detect sequences of zeros. eg, if you are
reading the source file 4096  bytes at a time, check to see if that 4096
set of bytes are all zeros. If they are, then seek() forward 4096 bytes
instead of writing the set of zeros.

This proposal is good for me. First of all, I will try by this way next development.
Also how about is the below idea ?
・ virt-clone has "--nonsparse" args as same as virt-install.
A new sparse device file is made by lseek(os.path.getsize(soucefile or sourcedisk))
whenever the destination device that the user specified is not found and
the option "-- nosparse" is NOT specified, then destination device is copied. A new normal device file that had all zeros is made by write('\x00')
Only when the destination device that the user specified is not found and
the option "-- nosparse" is specified, then destination device is copied.

I think I'd swap these 2 around. Have  --name / -n  refer to the name of the
new VM to be created. And have  a  '--source NAME|UUID'  arg to specify
the original VM, based on its name or uuid. I'd also make --name compulsory
rather than appending _CLONE to the original name.

Ohh, it is certainly confusing. I agree and define the below.
Original  guest  -- source guest(domain)
Clone     guest  -- destination guest(domain)

So I take the '--original NAME| UUID' args and  make '--name' compulsory.

We should add a few more args here that we've already got with virt-install
In particular the --debug flag is very useful for debugging problems -eg
it will print out XML of new domain in virt-install.

To support QEMU/KVM, we should also have the --connect URI  flag, and pass
it down into the libvirt.open() call, rather than hardcoding a Xen connection.

Finally a --uuid arg too, to let people pre-define the UUID if needed.

With the  VNC port stripping & the  --connect URI arg to let it work with
QEMU+ KVM, I'd be happy to see this code included in the repo.

Thank you for commets.
I made it again referring to virt-install and retested.
Attached patches shows help below
---------------------------------------------------------------------------
# ./virt-clone --help
Usage: virt-clone [options]

Options:
 -h, --help            show this help message and exit
 -o ORIGINAL_GUEST, --original=ORIGINAL_GUEST
                       Name or uuid for the original guest; The status must
                       be shut off
 -n NEW_NAME, --name=NEW_NAME
                       New name for the clone guest
 -u NEW_UUID, --uuid=NEW_UUID
                       New UUID for the clone guest; if none is given a
                       random UUID will be generated
 -m NEW_MAC, --mac=NEW_MAC
                       New fixed MAC address for the clone guest; if none or
                       RANDOM is given a random address will be used
 -f NEW_DISKFILE, --file=NEW_DISKFILE
                       New file to use as the disk image for the clone guest
 -c CONNECT, --connect=CONNECT
                       Connect to hypervisor with URI
 -d, --debug           Print debugging information


Signed-off-by: Kazuki Mizushima <mizushima kazuk jp fujitsu com>

Thanks,
Kazuki Mizushima

Attachment: virt-clone.patch
Description: Binary data

Attachment: CloneManager.py.patch
Description: Binary data


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