[virt-tools-list] [PATCH v2] Virtuozzo hypervisor basic support

Mikhail Feoktistov mfeoktistov at virtuozzo.com
Tue Feb 21 14:11:31 UTC 2017


On 17.02.2017 4:42, Cole Robinson wrote:
> Thanks for the patch, especially taking a stab at the dogtail tests!
>
> Please split this patch up, at least into 3 parts: virtinst/cli test bits,
> virt-manager misc bits, virt-manager create wizard bits.
>
> I just did a quick pass, a couple comments inline below
>
> On 02/15/2017 07:01 AM, Mikhail Feoktistov wrote:
>> This patch introduces virtuozzo hypervisor support.
>> Here we implemented only basic functionality.
>> User can create/start/stop/delete containers.
>> Also we allow to change hardware configuration (basic devices)
>> and connect via VNC. We are very intrested in the development of
>> virt-manager to support all virtuozzo features.
>>
>> GUI changes:
>> Add virtuozzo hypervisor to connection list.
>> Add radio buttons for choosing VM or container virtualization type.
>> New wizzard window for setting template name for containers.
>>
>> Creating guest:
>> We don't call createXML() for virtuozzo guests, because
>> virtuozzo driver in libvirt doesn't support transient domains.
>> Instead of this we call defineXML() and createDomain().
>>
>> If we create container from template we generate XML which
>> contains only one storage device with type "template".
>> Virtuozzo hypervisor will create new container and filesystem for it.
>> After container was created we should not call the second
>> defineXML(final_xml) because it rewrites "devices" section in XML
>> and deletes container filesytem.
>> ---
>>   .../compare/virt-install-vz-ct-template.xml        |  26 ++++
>>   tests/clitest.py                                   |  15 +++
>>   tests/uitests/newvm.py                             |  23 ++++
>>   tests/utils.py                                     |   1 +
>>   ui/create.ui                                       | 149 ++++++++++++++++++++-
>>   virtManager/addhardware.py                         |   2 +-
>>   virtManager/connect.py                             |   8 +-
>>   virtManager/connection.py                          |   1 +
>>   virtManager/create.py                              |  58 +++++++-
>>   virtinst/connection.py                             |   3 +
>>   virtinst/guest.py                                  |  22 ++-
>>   virtinst/uri.py                                    |   4 +-
>>   12 files changed, 296 insertions(+), 16 deletions(-)
>>   create mode 100644 tests/cli-test-xml/compare/virt-install-vz-ct-template.xml
>> diff --git a/virtinst/guest.py b/virtinst/guest.py
>> index 7d3fb9d..9f6cbcf 100644
>> --- a/virtinst/guest.py
>> +++ b/virtinst/guest.py
>> @@ -358,6 +358,9 @@ class Guest(XMLBuilder):
>>               # so use preserve
>>               self.on_crash = "preserve"
>>   
>> +        if self.type == "vz":
>> +            self.on_crash = "destroy"
>> +
> What's the justification for this? Is there an issue with the libvirt default
> of on_crash=reboot ?
>
> (that said I've thought about changing the default to on_crash=destroy
> anyways, since it just seems like the sensible default anyways, and for common
> qemu usage it's not going to have any functional difference anyways)
>
Virtuozzo hypervisor doesn't support restart for on_crash case, it 
always destroys container.
And user can't configure on_crash action.
you can see these checks in libvirt
src/vz/vz_sdk.c line 2599
function prlsdkCheckUnsupportedParams()

     if (def->onReboot != VIR_DOMAIN_LIFECYCLE_RESTART ||
         def->onPoweroff != VIR_DOMAIN_LIFECYCLE_DESTROY ||
         def->onCrash != VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY) {

         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                        _("The following parameters must be "
                          "on_reboot = restart, on_poweroff = destroy, "
                          "on_crash = destroy. "
                          "Different actions are not supported by vz 
driver"));
         return -1;
     }

Thanks for the suggestion to make onCrash as "destroy" by default in 
virt-manager.
I'll do it in the next patch series.
>>           self._set_osxml_defaults()
>>   
>>           self.bootloader = None
>> @@ -394,11 +397,16 @@ class Guest(XMLBuilder):
>>           meter = util.ensure_meter(meter)
>>           meter.start(size=None, text=meter_label)
>>   
>> -        if doboot or transient or self.installer.has_install_phase():
>> -            self.domain = self.conn.createXML(install_xml or final_xml, 0)
>> -
>> -        if not transient:
>> +        if self.type == "vz":
>>               self.domain = self.conn.defineXML(final_xml)
>> +            if doboot:
>> +                self.domain.create()
>> +        else:
>> +            if doboot or transient or self.installer.has_install_phase():
>> +                self.domain = self.conn.createXML(install_xml or final_xml, 0)
>> +
>> +            if not transient:
>> +                self.domain = self.conn.defineXML(final_xml)
> This has an issue, in that if define() works but create() fails, the guest
> will be left defined on the host, which is a semantic change from the existing
> behavior. That's one of the nice things about createXML at least, is that it
> handles that for us.
>
> That said if virtuozzo doesn't support createXML, I'm fine with just changing
> this default entirely so we don't need to maintain different code paths. But
> that can come later.
My suggestion is to use createXML for transient domains only.
In other cases use defineXML
I'll send another patch
>
> Thanks,
> Cole
>




More information about the virt-tools-list mailing list