nova/nova/tests/unit/virt/fakelibosinfo.py
John Garbutt 6be668e519 Stop sending bad values from libosinfo to libvirt
When we try to use either virtio1.0-block or virtio1.0-net it is
correctly rejected by libvirt. We get these returned from libosinfo for
newer operating systems that support virtio1.0.

As we want to support libvirts older than 5.2.0, its best we just request
"virtio", please see:
https://libvirt.org/formatdomain.html#elementsVirtioTransitional

You can see virtio1.0-net and virtio-block being added here:
https://gitlab.com/libosinfo/osinfo-db/blob/master/data/os/fedoraproject.org/fedora-23.xml.in#L31

Change-Id: I633faae47ad5a33b27f5e2eef6e0107f60335146
Closes-Bug: #1835400
2019-07-04 15:30:51 +01:00

177 lines
4.0 KiB
Python

# Copyright 2016 Red Hat, Inc
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
def match_item(obj, fltr):
key, val = list(fltr._filter.items())[0]
if key == 'class':
key = '_class'
elif key == 'short-id':
key = 'short_id'
return getattr(obj, key, None) == val
class Loader(object):
def process_default_path(self):
pass
def get_db(self):
return Db()
class Db(object):
def _get_fedora19(self):
devs = []
net = Device()
net._class = 'net'
net.name = 'rtl8139'
devs.append(net)
net = Device()
net._class = 'block'
net.name = 'ide'
devs.append(net)
devlist = DeviceList()
devlist.devices = devs
fedora = Os()
fedora.name = 'Fedora 19'
fedora.id = 'http://fedoraproject.org/fedora/19'
fedora.short_id = 'fedora19'
fedora.dev_list = devlist
return fedora
def _get_fedora22(self):
devs = []
net = Device()
net._class = 'net'
net.name = 'virtio-net'
devs.append(net)
net = Device()
net._class = 'block'
net.name = 'virtio-block'
devs.append(net)
devlist = DeviceList()
devlist.devices = devs
fedora = Os()
fedora.name = 'Fedora 22'
fedora.id = 'http://fedoraproject.org/fedora/22'
fedora.short_id = 'fedora22'
fedora.dev_list = devlist
return fedora
def _get_fedora23(self):
devs = []
net = Device()
net._class = 'net'
net.name = 'virtio1.0-net'
devs.append(net)
net = Device()
net._class = 'block'
net.name = 'virtio1.0-block'
devs.append(net)
devlist = DeviceList()
devlist.devices = devs
fedora = Os()
fedora.name = 'Fedora 23'
fedora.id = 'http://fedoraproject.org/fedora/23'
fedora.short_id = 'fedora23'
fedora.dev_list = devlist
return fedora
def __init__(self):
self.oslist = OsList()
self.oslist.os_list = [
self._get_fedora19(), self._get_fedora22(), self._get_fedora23(),
]
def get_os_list(self):
return self.oslist
class Filter(object):
def __init__(self):
self._filter = {}
@classmethod
def new(cls):
return cls()
def add_constraint(self, flt_key, val):
self._filter[flt_key] = val
class OsList(object):
def __init__(self):
self.os_list = []
def new_filtered(self, fltr):
new_list = OsList()
new_list.os_list = [os for os in self.os_list if match_item(os, fltr)]
return new_list
def get_length(self):
return len(self.os_list)
def get_nth(self, index):
return self.os_list[index]
class Os(object):
def __init__(self):
self.name = None
self.short_id = None
self.id = None
self.dev_list = None
def get_all_devices(self, fltr):
new_list = DeviceList()
new_list.devices = [dev for dev in self.dev_list.devices
if match_item(dev, fltr)]
return new_list
def get_name(self):
return self.name
class DeviceList(object):
def __init__(self):
self.devices = []
def get_length(self):
return len(self.devices)
def get_nth(self, index):
return self.devices[index]
class Device(object):
def __init__(self):
self.name = None
self._class = None
def get_name(self):
return self.name