Skip to content

Commit 8ad437d

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Stop sending bad values from libosinfo to libvirt"
2 parents e9e75e9 + 6be668e commit 8ad437d

File tree

3 files changed

+99
-17
lines changed

3 files changed

+99
-17
lines changed

nova/tests/unit/virt/fakelibosinfo.py

Lines changed: 53 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,32 +33,77 @@ def get_db(self):
3333

3434
class Db(object):
3535

36-
def __init__(self):
37-
# Generate test devices
38-
self.devs = []
39-
self.oslist = None
36+
def _get_fedora19(self):
37+
devs = []
38+
net = Device()
39+
net._class = 'net'
40+
net.name = 'rtl8139'
41+
devs.append(net)
42+
43+
net = Device()
44+
net._class = 'block'
45+
net.name = 'ide'
46+
devs.append(net)
4047

48+
devlist = DeviceList()
49+
devlist.devices = devs
50+
51+
fedora = Os()
52+
fedora.name = 'Fedora 19'
53+
fedora.id = 'http://fedoraproject.org/fedora/19'
54+
fedora.short_id = 'fedora19'
55+
fedora.dev_list = devlist
56+
return fedora
57+
58+
def _get_fedora22(self):
59+
devs = []
4160
net = Device()
4261
net._class = 'net'
4362
net.name = 'virtio-net'
44-
self.devs.append(net)
63+
devs.append(net)
4564

4665
net = Device()
4766
net._class = 'block'
4867
net.name = 'virtio-block'
49-
self.devs.append(net)
68+
devs.append(net)
5069

5170
devlist = DeviceList()
52-
devlist.devices = self.devs
71+
devlist.devices = devs
5372

5473
fedora = Os()
5574
fedora.name = 'Fedora 22'
5675
fedora.id = 'http://fedoraproject.org/fedora/22'
5776
fedora.short_id = 'fedora22'
5877
fedora.dev_list = devlist
78+
return fedora
5979

80+
def _get_fedora23(self):
81+
devs = []
82+
net = Device()
83+
net._class = 'net'
84+
net.name = 'virtio1.0-net'
85+
devs.append(net)
86+
87+
net = Device()
88+
net._class = 'block'
89+
net.name = 'virtio1.0-block'
90+
devs.append(net)
91+
92+
devlist = DeviceList()
93+
devlist.devices = devs
94+
95+
fedora = Os()
96+
fedora.name = 'Fedora 23'
97+
fedora.id = 'http://fedoraproject.org/fedora/23'
98+
fedora.short_id = 'fedora23'
99+
fedora.dev_list = devlist
100+
return fedora
101+
102+
def __init__(self):
60103
self.oslist = OsList()
61-
self.oslist.os_list = [fedora]
104+
self.oslist.os_list = [
105+
self._get_fedora19(), self._get_fedora22(), self._get_fedora23(),
106+
]
62107

63108
def get_os_list(self):
64109
return self.oslist

nova/tests/unit/virt/test_osinfo.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,20 @@ def test_module_load_failed(self):
6666
self.assertIsNone(os_info_db.get_os('fedora19'))
6767
self.assertEqual(1, mock_log.call_count)
6868

69-
def test_hardware_properties_from_osinfo(self):
69+
def test_hardware_properties_from_osinfo_fedora19(self):
70+
"""Verifies that HardwareProperties attributes are being set
71+
from libosinfo.
72+
"""
73+
img_meta = {'properties':
74+
{'os_distro': 'fedora19'}
75+
}
76+
77+
img_meta = objects.ImageMeta.from_dict(img_meta)
78+
osinfo_obj = osinfo.HardwareProperties(img_meta)
79+
self.assertEqual('rtl8139', osinfo_obj.network_model)
80+
self.assertEqual('ide', osinfo_obj.disk_model)
81+
82+
def test_hardware_properties_from_osinfo_fedora22(self):
7083
"""Verifies that HardwareProperties attributes are being set
7184
from libosinfo.
7285
"""
@@ -79,6 +92,19 @@ def test_hardware_properties_from_osinfo(self):
7992
self.assertEqual('virtio', osinfo_obj.network_model)
8093
self.assertEqual('virtio', osinfo_obj.disk_model)
8194

95+
def test_hardware_properties_from_osinfo_fedora23(self):
96+
"""Verifies that HardwareProperties attributes are being set
97+
from libosinfo.
98+
"""
99+
img_meta = {'properties':
100+
{'os_distro': 'fedora23'}
101+
}
102+
103+
img_meta = objects.ImageMeta.from_dict(img_meta)
104+
osinfo_obj = osinfo.HardwareProperties(img_meta)
105+
self.assertEqual('virtio', osinfo_obj.network_model)
106+
self.assertEqual('virtio', osinfo_obj.disk_model)
107+
82108
def test_hardware_properties_from_meta(self):
83109
"""Verifies that HardwareProperties attributes are being set
84110
from image properties.

nova/virt/osinfo.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from oslo_utils import importutils
1717

1818
from nova import exception
19+
from nova.objects import fields
1920

2021
libosinfo = None
2122
LOG = logging.getLogger(__name__)
@@ -102,7 +103,13 @@ def network_model(self):
102103
fltr.add_constraint("class", "net")
103104
devs = self._os_obj.get_all_devices(fltr)
104105
if devs.get_length():
105-
return devs.get_nth(0).get_name()
106+
net_model = devs.get_nth(0).get_name()
107+
# convert to valid libvirt values
108+
if net_model in ['virtio-net', 'virtio1.0-net']:
109+
return 'virtio'
110+
# ignore any invalid ones
111+
if net_model in fields.VIFModel.ALL:
112+
return net_model
106113

107114
@property
108115
def disk_model(self):
@@ -111,7 +118,13 @@ def disk_model(self):
111118
fltr.add_constraint("class", "block")
112119
devs = self._os_obj.get_all_devices(fltr)
113120
if devs.get_length():
114-
return devs.get_nth(0).get_name()
121+
disk_model = devs.get_nth(0).get_name()
122+
# convert to valid libvirt values
123+
if disk_model in ['virtio-block', 'virtio1.0-block']:
124+
return 'virtio'
125+
# ignore any invalid ones
126+
if disk_model in fields.DiskBus.ALL:
127+
return disk_model
115128

116129

117130
class HardwareProperties(object):
@@ -125,12 +138,10 @@ def __init__(self, image_meta):
125138

126139
@property
127140
def network_model(self):
128-
model = self.img_props.get('hw_vif_model',
129-
self.os_info_obj.network_model)
130-
return 'virtio' if model == 'virtio-net' else model
141+
return self.img_props.get('hw_vif_model',
142+
self.os_info_obj.network_model)
131143

132144
@property
133145
def disk_model(self):
134-
model = self.img_props.get('hw_disk_bus',
135-
self.os_info_obj.disk_model)
136-
return 'virtio' if model == 'virtio-block' else model
146+
return self.img_props.get('hw_disk_bus',
147+
self.os_info_obj.disk_model)

0 commit comments

Comments
 (0)