[virt-tools-list] [PATCH 1/3] virtinst: Add vsock device type

Slavomir Kaslev kaslevs at vmware.com
Mon Dec 10 10:00:07 UTC 2018


On Mon, Dec 10, 2018 at 11:46:14AM +0800, Pavel Hrdina wrote:
> On Fri, Dec 07, 2018 at 05:02:14PM +0200, Slavomir Kaslev wrote:
> > Signed-off-by: Slavomir Kaslev <kaslevs at vmware.com>
> > ---
> >  virtinst/devices/__init__.py |  1 +
> >  virtinst/devices/vsock.py    | 41 ++++++++++++++++++++++++++++++++++++
> >  virtinst/guest.py            |  3 ++-
> >  3 files changed, 44 insertions(+), 1 deletion(-)
> >  create mode 100644 virtinst/devices/vsock.py
> 
> This patch fails './setup.py test'.

That's interesting. This is the output of './setup.py test' on my machine:

$ ./setup.py test
running test
...........................................................................................................................ssss..........................................................................................................s.s..s...s.s....ss.ssss....s........................................................................................................................................................................................s
----------------------------------------------------------------------
Ran 446 tests in 7.120s

OK (skipped=17)

Am I running it with wrong flags?

> Every new XML element should have
> it's command line option for virt-install and also we require some basic
> test to be available.  So you need to extend this patch to introduce
> command line option(s).

OK, I'll add it to virt-install cli in v2. Can you point me to an existing test
I can use as reference?

> 
> > diff --git a/virtinst/devices/__init__.py b/virtinst/devices/__init__.py
> > index 6da0766d..6120f5d0 100644
> > --- a/virtinst/devices/__init__.py
> > +++ b/virtinst/devices/__init__.py
> > @@ -22,6 +22,7 @@ from .redirdev import DeviceRedirdev
> >  from .rng import DeviceRng
> >  from .tpm import DeviceTpm
> >  from .video import DeviceVideo
> > +from .vsock import DeviceVsock
> >  from .watchdog import DeviceWatchdog
> >  
> >  
> > diff --git a/virtinst/devices/vsock.py b/virtinst/devices/vsock.py
> > new file mode 100644
> > index 00000000..beb00e50
> > --- /dev/null
> > +++ b/virtinst/devices/vsock.py
> > @@ -0,0 +1,41 @@
> > +# Copyright (C) 2018 VMware, Inc.
> > +#
> > +# Copyright 2018
> > +# Slavomir Kaslev <kaslevs at vmware.com>
> > +#
> > +# This work is licensed under the GNU GPLv2 or later.
> > +# See the COPYING file in the top-level directory.
> > +
> > +from .device import Device
> > +from ..xmlbuilder import XMLProperty
> > +
> > +
> > +class DeviceVsock(Device):
> > +    XML_NAME = "vsock"
> > +
> > +    model = XMLProperty("./@model")
> > +    auto_cid = XMLProperty("./cid/@auto", is_yesno=True)
> > +    cid = XMLProperty("./cid/@address", is_int=True)
> > +
> > +
> > +    ##############
> > +    # Validation #
> > +    ##############
> > +
> > +    def validate(self):
> > +        if not self.auto_cid and (self.cid is None or self.cid < 3):
> > +            raise ValueError(_("guest CID {0} must be >= 3").format(self.cid))
> 
> It would be better to have some const variable, for example
> CID_MIN_GUEST_ADDRESS or something like that instead of "magic number".

Makes sense. I added `VMADDR_CID_HOST = 2` as constant to make it clearer.

> 
> > +
> > +
> > +    ##################
> > +    # Default config #
> > +    ##################
> > +
> > +    def set_defaults(self, guest):
> > +        if not self.model:
> > +            self.model = "virtio"
> > +
> > +        if self.auto_cid is None and self.cid is None:
> > +            self.auto_cid = True
> > +        if self.cid is None and not self.auto_cid:
> > +            self.cid = 3
> 
> I think that it would be better not to have any default CID.  We can
> default to set cid auto to True if nothing is provided and if cid auto
> is set to False we should require cid address.

I don't quite follow. If auto_cid is not True and no CID is provided, should
set_defaults raise an exception (OTOH no other Device.set_defaults raises) or
just ignore it here and let libvirt catch it and complain?

Thank you,

-- Slavi

> 
> Otherwise looks good.
> 
> Pavel
> 
> > diff --git a/virtinst/guest.py b/virtinst/guest.py
> > index eeb40cb6..9acff3b9 100644
> > --- a/virtinst/guest.py
> > +++ b/virtinst/guest.py
> > @@ -29,7 +29,7 @@ class _DomainDevices(XMLBuilder):
> >              'smartcard', 'serial', 'parallel', 'console', 'channel',
> >              'input', 'tpm', 'graphics', 'sound', 'video', 'hostdev',
> >              'redirdev', 'watchdog', 'memballoon', 'rng', 'panic',
> > -            'memory']
> > +            'memory', 'vsock']
> >  
> >  
> >      disk = XMLChildProperty(DeviceDisk)
> > @@ -53,6 +53,7 @@ class _DomainDevices(XMLBuilder):
> >      rng = XMLChildProperty(DeviceRng)
> >      panic = XMLChildProperty(DevicePanic)
> >      memory = XMLChildProperty(DeviceMemory)
> > +    vsock = XMLChildProperty(DeviceVsock)
> >  
> >      def get_all(self):
> >          retlist = []
> > -- 
> > 2.19.1
> > 
> > _______________________________________________
> > virt-tools-list mailing list
> > virt-tools-list at redhat.com
> > https://www.redhat.com/mailman/listinfo/virt-tools-list



> _______________________________________________
> virt-tools-list mailing list
> virt-tools-list at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list




More information about the virt-tools-list mailing list