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'
elif arg == '/sys/block/fake/device/timeout':
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
return mock_with
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'))
@mock.patch('six.moves.builtins.open')
@ -391,18 +394,18 @@ E: UDEV_LOG=3""", '')
'/dev/wrong_vendor_id',
'/dev/right_vendor_id']
mock_isdisk.return_value = True
mock_ureport.side_effect = [
{},
{'ID_VENDOR': 'Cisco'},
{'ID_VENDOR': 'IBM'},
mock_ureport.return_value = {}
mock_ereport.side_effect = [
{'removable': '1'},
{'removable': '1', 'vendor': 'Cisco'},
{'removable': '1', 'vendor': 'IBM'},
]
mock_ereport.return_value = {'removable': '1'}
mock_breport.return_value = {'key1': 'value1'}
expected = [{
'device': '/dev/right_vendor_id',
'uspec': {'ID_VENDOR': 'IBM'},
'uspec': {},
'bspec': {'key1': 'value1'},
'espec': {'removable': '1'}
'espec': {'removable': '1', 'vendor': 'IBM'},
}]
self.assertEqual(hu.list_block_devices(), expected)
self.assertEqual(

View File

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