Fix incorrect lsblk tag and add a virtual media job
Follow-up to 8dd6589e66d03e45e1d510601da9531a30842cff: PATH is not a valid lsblk tag, we need to use KNAME with -p flag. Also add a vmedia job to avoid breakages in the future. It's added non-voting because we have a deadlock with this change: https://review.opendev.org/c/openstack/ironic/+/783722 Change-Id: Ifffeac9c1c4d394526d655eaa14c9fe7bd3a1e5e
This commit is contained in:
parent
49d123dd6e
commit
afcc5d392c
|
@ -152,20 +152,21 @@ class GetAgentParamsTestCase(ironic_agent_base.IronicAgentTest):
|
|||
execute_mock):
|
||||
execute_mock.side_effect = processutils.ProcessExecutionError
|
||||
self.assertIsNone(utils._find_vmedia_device_by_labels(['l1', 'l2']))
|
||||
execute_mock.assert_called_once_with('lsblk', '-P', '-oPATH,LABEL')
|
||||
execute_mock.assert_called_once_with('lsblk', '-p', '-P',
|
||||
'-oKNAME,LABEL')
|
||||
|
||||
@mock.patch.object(utils, 'execute', autospec=True)
|
||||
def test__find_vmedia_device_by_labels(self, execute_mock):
|
||||
# NOTE(TheJulia): Case is intentionally mixed here to ensure
|
||||
# proper matching occurs
|
||||
disk_list = ('PATH="/dev/sda" LABEL=""\n'
|
||||
'PATH="/dev/sda2" LABEL="Meow"\n'
|
||||
'PATH="/dev/sda3" LABEL="Recovery HD"\n'
|
||||
'PATH="/dev/sda1" LABEL="EFI"\n'
|
||||
'PATH="/dev/sdb" LABEL=""\n'
|
||||
'PATH="/dev/sdb1" LABEL=""\n'
|
||||
'PATH="/dev/sdb2" LABEL=""\n'
|
||||
'PATH="/dev/sdc" LABEL="meow"\n')
|
||||
disk_list = ('KNAME="/dev/sda" LABEL=""\n'
|
||||
'KNAME="/dev/sda2" LABEL="Meow"\n'
|
||||
'KNAME="/dev/sda3" LABEL="Recovery HD"\n'
|
||||
'KNAME="/dev/sda1" LABEL="EFI"\n'
|
||||
'KNAME="/dev/sdb" LABEL=""\n'
|
||||
'KNAME="/dev/sdb1" LABEL=""\n'
|
||||
'KNAME="/dev/sdb2" LABEL=""\n'
|
||||
'KNAME="/dev/sdc" LABEL="meow"\n')
|
||||
invalid_disk = ('KNAME="sda1" SIZE="1610612736" TYPE="part" TRAN=""\n'
|
||||
'KNAME="sda" SIZE="1610612736" TYPE="disk" '
|
||||
'TRAN="sata"\n')
|
||||
|
@ -178,7 +179,7 @@ class GetAgentParamsTestCase(ironic_agent_base.IronicAgentTest):
|
|||
self.assertEqual('/dev/sdc',
|
||||
utils._find_vmedia_device_by_labels(['cat', 'meOw']))
|
||||
execute_mock.assert_has_calls([
|
||||
mock.call('lsblk', '-P', '-oPATH,LABEL'),
|
||||
mock.call('lsblk', '-p', '-P', '-oKNAME,LABEL'),
|
||||
mock.call('lsblk', '-n', '-s', '-P', '-b',
|
||||
'-oKNAME,TRAN,TYPE,SIZE', '/dev/sda2'),
|
||||
mock.call('lsblk', '-n', '-s', '-P', '-b',
|
||||
|
@ -187,12 +188,13 @@ class GetAgentParamsTestCase(ironic_agent_base.IronicAgentTest):
|
|||
|
||||
@mock.patch.object(utils, 'execute', autospec=True)
|
||||
def test__find_vmedia_device_by_labels_not_found(self, execute_mock):
|
||||
disk_list = ('PATH="/dev/sdb" LABEL="evil"\n'
|
||||
'PATH="/dev/sdb1" LABEL="banana"\n'
|
||||
'PATH="/dev/sdb2" LABEL=""\n')
|
||||
disk_list = ('KNAME="/dev/sdb" LABEL="evil"\n'
|
||||
'KNAME="/dev/sdb1" LABEL="banana"\n'
|
||||
'KNAME="/dev/sdb2" LABEL=""\n')
|
||||
execute_mock.return_value = (disk_list, '')
|
||||
self.assertIsNone(utils._find_vmedia_device_by_labels(['l1', 'l2']))
|
||||
execute_mock.assert_called_once_with('lsblk', '-P', '-oPATH,LABEL')
|
||||
execute_mock.assert_called_once_with('lsblk', '-p', '-P',
|
||||
'-oKNAME,LABEL')
|
||||
|
||||
@mock.patch.object(utils, '_check_vmedia_device', autospec=True)
|
||||
@mock.patch.object(utils, '_find_vmedia_device_by_labels', autospec=True)
|
||||
|
|
|
@ -129,7 +129,7 @@ def _find_vmedia_device_by_labels(labels):
|
|||
"""Find device matching any of the provided labels for virtual media"""
|
||||
candidates = []
|
||||
try:
|
||||
lsblk_output, _e = execute('lsblk', '-P', '-oPATH,LABEL')
|
||||
lsblk_output, _e = execute('lsblk', '-p', '-P', '-oKNAME,LABEL')
|
||||
except processutils.ProcessExecutionError as e:
|
||||
_early_log('Was unable to execute the lsblk command. %s', e)
|
||||
return
|
||||
|
@ -137,7 +137,7 @@ def _find_vmedia_device_by_labels(labels):
|
|||
for device in ironic_utils.parse_device_tags(lsblk_output):
|
||||
for label in labels:
|
||||
if label.upper() == device['LABEL'].upper():
|
||||
candidates.append(device['PATH'])
|
||||
candidates.append(device['KNAME'])
|
||||
|
||||
for candidate in candidates:
|
||||
# We explicitly take the device and run it past _check_vmedia_device
|
||||
|
|
|
@ -57,6 +57,33 @@
|
|||
SWIFT_ENABLE_TEMPURLS: True
|
||||
SWIFT_TEMPURL_KEY: secretkey
|
||||
|
||||
- job:
|
||||
name: ipa-tempest-uefi-redfish-vmedia-src
|
||||
parent: ironic-ipa-base
|
||||
required-projects:
|
||||
- opendev.org/openstack/sushy-tools
|
||||
vars:
|
||||
devstack_services:
|
||||
s-account: True
|
||||
s-container: True
|
||||
s-object: True
|
||||
s-proxy: True
|
||||
devstack_localrc:
|
||||
IRONIC_BOOT_MODE: uefi
|
||||
IRONIC_DEPLOY_DRIVER: redfish
|
||||
IRONIC_ENABLED_BOOT_INTERFACES: redfish-virtual-media
|
||||
IRONIC_ENABLED_HARDWARE_TYPES: redfish
|
||||
IRONIC_ENABLED_POWER_INTERFACES: redfish
|
||||
IRONIC_ENABLED_MANAGEMENT_INTERFACES: redfish
|
||||
IRONIC_TEMPEST_WHOLE_DISK_IMAGE: True
|
||||
IRONIC_VM_EPHEMERAL_DISK: 0
|
||||
# Ironic has to master a new image, and this CAN take longer as a
|
||||
# result and makes this job VERY sensitive to heavy disk IO of the
|
||||
# underlying hypervisor/cloud.
|
||||
IRONIC_CALLBACK_TIMEOUT: 800
|
||||
SWIFT_ENABLE_TEMPURLS: True
|
||||
SWIFT_TEMPURL_KEY: secretkey
|
||||
|
||||
# used by diskimage-builder
|
||||
- job:
|
||||
name: ipa-tempest-bios-ipmi-iscsi-src
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
# wholedisk + partition on tempest
|
||||
- ipa-tempest-bios-ipmi-direct-src
|
||||
- ipa-tempest-bios-ipmi-iscsi-src
|
||||
- ipa-tempest-uefi-redfish-vmedia-src:
|
||||
voting: false
|
||||
# NOTE(TheJulia): The cleaning tests run in standalone job has a
|
||||
# high failure rate due to possible race during long running steps
|
||||
# like deployment with raid setup. While we're working on a fix,
|
||||
|
|
Loading…
Reference in New Issue