Add iDRAC Redfish firmware update test

This adds test for firmware update using iDRAC redfish.

Change-Id: I87bacfabcaf94b9b80b884d6ab576058e7411f84
This commit is contained in:
Kamlesh Chauvhan 2022-08-18 10:42:42 +00:00
parent 50f0a715d5
commit 853164a480
2 changed files with 76 additions and 0 deletions

View File

@ -168,6 +168,18 @@ BaremetalGroup = [
help="List of Ironic enabled power interfaces."),
cfg.StrOpt('default_rescue_interface',
help="Ironic default rescue interface."),
cfg.StrOpt('firmware_image_url',
help="Image URL of firmware image file supported by "
"update_firmware clean step."),
cfg.StrOpt('firmware_image_checksum',
help="SHA1 checksum of firmware image file."),
cfg.StrOpt('firmware_rollback_image_url',
help="Image URL of firmware update cleaning step's "
"rollback image. Optional. If not provided, "
"rollback is skipped."),
cfg.StrOpt('firmware_rollback_image_checksum',
help="SHA1 checksum of firmware rollback image file. "
"This is required if firmware_rollback_image_url is set."),
cfg.IntOpt('adjusted_root_disk_size_gb',
min=0,
help="Ironic adjusted disk size to use in the standalone tests "

View File

@ -352,3 +352,67 @@ class BaremetalIdracRedfishRaidCleaning(
class BaremetalIdracWSManRaidCleaning(
BaremetalIdracRaidCleaning):
raid_interface = 'idrac-wsman'
class BaremetalRedfishFirmwareUpdate(bsm.BaremetalStandaloneScenarioTest):
api_microversion = '1.68' # to support redfish firmware update
driver = 'redfish'
delete_node = False
image_ref = CONF.baremetal.whole_disk_image_ref
wholedisk_image = True
@classmethod
def skip_checks(cls):
super(BaremetalRedfishFirmwareUpdate, cls).skip_checks()
if not CONF.baremetal.firmware_image_url:
raise cls.skipException("Firmware image URL is not "
"provided. Skipping test case.")
if not CONF.baremetal.firmware_image_checksum:
raise cls.skipException("Firmware image SHA1 checksum is not "
"provided. Skipping test case.")
def _firmware_update(self, fw_image_url, fw_image_checksum):
steps = [
{
"interface": "management",
"step": "update_firmware",
"args": {
"firmware_images": [
{
"url": fw_image_url,
"checksum": fw_image_checksum,
"wait": 300
}
]
}
}
]
self.manual_cleaning(self.node, clean_steps=steps)
@utils.services('network')
@decorators.idempotent_id('360e0c0e-3c17-4d2e-b052-55a932c1a4c7')
def test_firmware_update(self):
# WARNING: Removing power from a server while it is in the process of
# updating firmware may result in devices in the server, or the server
# itself becoming inoperable.
# Execution of firmware test case needs careful execution as it
# changes state of server, may result in break down of server on
# interruption. As it deals with firmware of component, make sure
# to provide proper image url path while testing with correct SHA1
# checksum of image.
self._firmware_update(CONF.baremetal.firmware_image_url,
CONF.baremetal.firmware_image_checksum)
if (CONF.baremetal.firmware_rollback_image_url
and CONF.baremetal.firmware_rollback_image_checksum):
self.addCleanup(self._firmware_update,
CONF.baremetal.firmware_rollback_image_url,
CONF.baremetal.firmware_rollback_image_checksum)
class BaremetalIdracRedfishFirmwareUpdate(BaremetalRedfishFirmwareUpdate):
driver = 'idrac'
boot_interface = 'ipxe'
management_interface = 'idrac-redfish'
power_interface = 'idrac-redfish'