[openstack-dev] [nova] pci pass through turing complete config options?

Daniel P. Berrange berrange at redhat.com
Tue Oct 28 12:31:55 UTC 2014


On Tue, Oct 28, 2014 at 08:07:14AM -0400, Sean Dague wrote:
> On 10/28/2014 07:44 AM, Daniel P. Berrange wrote:
> > On Tue, Oct 28, 2014 at 07:34:11AM -0400, Sean Dague wrote:
> >> We're dealing with some issues on devstack pass through with really
> >> complicated config option types, the fixes are breaking other things.
> >>
> >> The issue at hand is the fact that the pci pass through device listing
> >> is an olso MultiStrOpt in which each option value is fully valid json
> >> document, which must parse as such. That leads to things like:
> >>
> >> pci_passthrough_whitelist = {"address":"*:0a:00.*",
> >> "physical_network":"physnet1"}
> >> pci_passthrough_whitelist = {"vendor_id":"1137","product_id":"0071"}
> >>
> >> Which, honestly, seems a little weird for configs.
> >>
> >> We're talking about a small number of fixed fields here, so the use of a
> >> full json doc seems weird. I'd like to reopen why this was the value
> >> format, and if we could have a more simple one.
> > 
> > Do you have ant suggestion for an alternative config syntax for specifying
> > a list of dicts which would be suitable ?
> > 
> > One option would be a more  CSV like syntax eg
> > 
> >    pci_passthrough_whitelist = address=*0a:00.*,physical_network=physnet1
> >    pci_passthrough_whitelist = vendor_id=1137,product_id=0071
> > 
> > But this gets confusing if we want to specifying multiple sets of data
> > so might need to use semi-colons as first separator, and comma for list
> > element separators
> > 
> >    pci_passthrough_whitelist = vendor_id=8085;product_id=4fc2, vendor_id=1137;product_id=0071
> > 
> > Overall it isn't clear that inventing a special case language for this PCI
> > config value is a good idea.
> > 
> > I think it illustrates a gap in oslo.config, which ought to be able to
> > support a config option type which was a "list of dicts of strings"
> > so anywhere which needs such a beast will use the same syntax.
> 
> Mostly, why do we need name= at all. This seems like it would be fine as
> an fstab like format (with 'x' as an ignore value).
> 
> # vendor_id product_id address
> pci_passthrough_whitelist = 8085
> pci_passthrough_whitelist = 1137 4fc2
> pci_passthrough_whitelist = x 0071
> pci_passthrough_whitelist = x x *0a:00.*
>
> Basically going to a full name = value seems incredibly overkill for
> something with < 6 fields.

I don't think that is really very extensible for the future to drop the
key name. We've already extended the info we record here at least once,
and I expect we'd want to add more fields later. It is also makes it
less clear to the user - it is very easy to get confused about vendor
vs product IDs if we leave out the name.

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|



More information about the OpenStack-dev mailing list