Changing boot device string for vmedia on SuperMicro
On SuperMicro machines (e.g. X11 and X12 models) the device name string for CD based virtual media is "UsbCd" as opposed to "CD" used by other vendors. This change adjust the boot device target string to "UsbCd" if a SuperMicro machine is detected Story: 2009663 Task: 43913 Change-Id: I384baf5c27a531be0c4b78e11e1214d6371fa8be
This commit is contained in:
@@ -88,6 +88,15 @@ BOOT_SOURCE_TARGET_UEFI_SHELL = 'uefi shell'
|
||||
BOOT_SOURCE_TARGET_UEFI_HTTP = 'uefi http'
|
||||
"""Boot from a UEFI HTTP network location"""
|
||||
|
||||
BOOT_SOURCE_TARGET_USB_CD = 'usb cd'
|
||||
"""Boot from a USB CD device as specified by the system BIOS.
|
||||
NOTE(janders): This is NOT a standard value.
|
||||
On SuperMicro X11 and X12 machines, virtual media is presented as an USB CD
|
||||
drive as opposed to a CD drive. Both are present in the list of boot
|
||||
devices, however only selecting UsbCd as the boot source results in a
|
||||
successful boot from vMedia. If CD is selected, boot fails even if vMedia
|
||||
is inserted."""
|
||||
|
||||
# Boot source mode constants
|
||||
|
||||
BOOT_SOURCE_MODE_BIOS = 'bios'
|
||||
|
||||
@@ -30,6 +30,7 @@ BOOT_SOURCE_TARGET_MAP = {
|
||||
'UefiTarget': sys_cons.BOOT_SOURCE_TARGET_UEFI_TARGET,
|
||||
'UefiShell': sys_cons.BOOT_SOURCE_TARGET_UEFI_SHELL,
|
||||
'UefiHttp': sys_cons.BOOT_SOURCE_TARGET_UEFI_HTTP,
|
||||
'UsbCd': sys_cons.BOOT_SOURCE_TARGET_USB_CD,
|
||||
}
|
||||
|
||||
BOOT_SOURCE_TARGET_MAP_REV = utils.revert_dictionary(BOOT_SOURCE_TARGET_MAP)
|
||||
|
||||
@@ -236,6 +236,26 @@ class System(base.ResourceBase):
|
||||
valid_values=valid_targets)
|
||||
|
||||
fishy_target = sys_maps.BOOT_SOURCE_TARGET_MAP_REV[target]
|
||||
# NOTE(janders) on SuperMicro X11 and X12 machines, virtual media
|
||||
# is presented as an "USB CD" drive as opposed to a CD drive. Both
|
||||
# are present in the list of boot devices, however only selecting
|
||||
# UsbCd as the boot source results in a successful boot from
|
||||
# vMedia. If "CD" is selected, boot fails even if vMedia is
|
||||
# inserted. This code detects a case where a SuperMicro machine is
|
||||
# about to attempt boot from CD and overrides the boot device to
|
||||
# UsbCd instead which makes boot from vMedia work as expected.
|
||||
if (self.manufacturer and self.manufacturer.lower() == 'supermicro'
|
||||
and fishy_target == sys_maps.BOOT_SOURCE_TARGET_MAP_REV[
|
||||
sys_cons.BOOT_SOURCE_TARGET_CD]
|
||||
and sys_maps.BOOT_SOURCE_TARGET_MAP_REV[
|
||||
sys_cons.BOOT_SOURCE_TARGET_USB_CD]
|
||||
in self.boot.allowed_values):
|
||||
fishy_target = sys_maps.BOOT_SOURCE_TARGET_MAP_REV[
|
||||
sys_cons.BOOT_SOURCE_TARGET_USB_CD]
|
||||
LOG.debug('Boot from vMedia was requested on a SuperMicro'
|
||||
'machine. Overriding boot device from %s to %s.',
|
||||
sys_cons.BOOT_SOURCE_TARGET_CD,
|
||||
fishy_target)
|
||||
|
||||
data['Boot']['BootSourceOverrideTarget'] = fishy_target
|
||||
|
||||
|
||||
@@ -259,6 +259,7 @@ class SystemTestCase(base.TestCase):
|
||||
sushy.BOOT_SOURCE_TARGET_PXE,
|
||||
sushy.BOOT_SOURCE_TARGET_CD,
|
||||
sushy.BOOT_SOURCE_TARGET_USB,
|
||||
sushy.BOOT_SOURCE_TARGET_USB_CD,
|
||||
sushy.BOOT_SOURCE_TARGET_HDD,
|
||||
sushy.BOOT_SOURCE_TARGET_BIOS_SETUP,
|
||||
sushy.BOOT_SOURCE_TARGET_UTILITIES,
|
||||
@@ -330,6 +331,33 @@ class SystemTestCase(base.TestCase):
|
||||
sushy.BOOT_SOURCE_TARGET_HDD,
|
||||
enabled='invalid-enabled')
|
||||
|
||||
def test_set_system_boot_options_supermicro_usb_cd_boot(self):
|
||||
(self.json_doc["Boot"]
|
||||
["BootSourceOverrideTarget@Redfish.AllowableValues"]).append("UsbCd")
|
||||
self.sys_inst._parse_attributes(self.json_doc)
|
||||
|
||||
self.sys_inst.manufacturer = "supermicro"
|
||||
self.sys_inst.set_system_boot_options(
|
||||
target=sushy.BOOT_SOURCE_TARGET_CD,
|
||||
enabled=sushy.BOOT_SOURCE_ENABLED_ONCE)
|
||||
|
||||
self.sys_inst._conn.patch.assert_called_once_with(
|
||||
'/redfish/v1/Systems/437XR1138R2',
|
||||
data={'Boot': {'BootSourceOverrideEnabled': 'Once',
|
||||
'BootSourceOverrideTarget': 'UsbCd'}})
|
||||
|
||||
def test_set_system_boot_options_supermicro_no_usb_cd_boot(self):
|
||||
|
||||
self.sys_inst.manufacturer = "supermicro"
|
||||
self.sys_inst.set_system_boot_options(
|
||||
target=sushy.BOOT_SOURCE_TARGET_CD,
|
||||
enabled=sushy.BOOT_SOURCE_ENABLED_ONCE)
|
||||
|
||||
self.sys_inst._conn.patch.assert_called_once_with(
|
||||
'/redfish/v1/Systems/437XR1138R2',
|
||||
data={'Boot': {'BootSourceOverrideEnabled': 'Once',
|
||||
'BootSourceOverrideTarget': 'Cd'}})
|
||||
|
||||
def test_set_system_boot_source(self):
|
||||
self.sys_inst.set_system_boot_source(
|
||||
sushy.BOOT_SOURCE_TARGET_PXE,
|
||||
|
||||
Reference in New Issue
Block a user