Hardware utils must get 'vendor' from sysfs

fuel-agent should use the same source for 'vendor' of block device
as fuel-nailgun-agent uses.

Otherwise, we could end up with situation when block device is being
filtered out during provisioning due to 'vendor' mismatch.
In that case, provisiong will fail.

Change-Id: If503e13e259bb123d95312ee37ce661905ea185f
Closes-Bug: #1487133
This commit is contained in:
Alexander Gordeev 2015-08-21 14:40:08 +03:00
parent f2df59bb3f
commit 4c2ab9d6c6
2 changed files with 13 additions and 10 deletions

View File

@ -199,10 +199,13 @@ supports-register-dump: yes
mock_file.read.return_value = 'running\n' mock_file.read.return_value = 'running\n'
elif arg == '/sys/block/fake/device/timeout': elif arg == '/sys/block/fake/device/timeout':
mock_file.read.return_value = '30\n' mock_file.read.return_value = '30\n'
elif arg == '/sys/block/fake/device/vendor':
mock_file.read.return_value = 'VENDORNAME \n'
mock_with.__enter__.return_value = mock_file mock_with.__enter__.return_value = mock_file
return mock_with return mock_with
mock_open.side_effect = with_side_effect mock_open.side_effect = with_side_effect
expected = {'removable': '0', 'state': 'running', 'timeout': '30'} expected = {'removable': '0', 'state': 'running', 'timeout': '30',
'vendor': 'VENDORNAME'}
self.assertEqual(expected, hu.extrareport('/dev/fake')) self.assertEqual(expected, hu.extrareport('/dev/fake'))
@mock.patch('six.moves.builtins.open') @mock.patch('six.moves.builtins.open')
@ -391,18 +394,18 @@ E: UDEV_LOG=3""", '')
'/dev/wrong_vendor_id', '/dev/wrong_vendor_id',
'/dev/right_vendor_id'] '/dev/right_vendor_id']
mock_isdisk.return_value = True mock_isdisk.return_value = True
mock_ureport.side_effect = [ mock_ureport.return_value = {}
{}, mock_ereport.side_effect = [
{'ID_VENDOR': 'Cisco'}, {'removable': '1'},
{'ID_VENDOR': 'IBM'}, {'removable': '1', 'vendor': 'Cisco'},
{'removable': '1', 'vendor': 'IBM'},
] ]
mock_ereport.return_value = {'removable': '1'}
mock_breport.return_value = {'key1': 'value1'} mock_breport.return_value = {'key1': 'value1'}
expected = [{ expected = [{
'device': '/dev/right_vendor_id', 'device': '/dev/right_vendor_id',
'uspec': {'ID_VENDOR': 'IBM'}, 'uspec': {},
'bspec': {'key1': 'value1'}, 'bspec': {'key1': 'value1'},
'espec': {'removable': '1'} 'espec': {'removable': '1', 'vendor': 'IBM'},
}] }]
self.assertEqual(hu.list_block_devices(), expected) self.assertEqual(hu.list_block_devices(), expected)
self.assertEqual( self.assertEqual(

View File

@ -234,7 +234,7 @@ def extrareport(dev):
except Exception: except Exception:
pass pass
for key in ('state', 'timeout'): for key in ('state', 'timeout', 'vendor'):
try: try:
with open('/sys/block/{0}/device/{1}'.format(name, key)) as file: with open('/sys/block/{0}/device/{1}'.format(name, key)) as file:
spec[key] = file.read().strip() spec[key] = file.read().strip()
@ -295,7 +295,7 @@ def list_block_devices(disks=True):
# inserted into removable device. # inserted into removable device.
# Accept only devices from REMOVABLE_VENDORS list # Accept only devices from REMOVABLE_VENDORS list
if (espec.get('removable') == '1' and if (espec.get('removable') == '1' and
uspec.get('ID_VENDOR') not in REMOVABLE_VENDORS): espec.get('vendor') not in REMOVABLE_VENDORS):
continue continue
bspec = blockdevreport(device) bspec = blockdevreport(device)