diff --git a/endpoints-support.md b/endpoints-support.md
index 4fa3b0330..4311a26b4 100644
--- a/endpoints-support.md
+++ b/endpoints-support.md
@@ -386,7 +386,7 @@
| /rest/server-hardware/discovery | POST | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |:white_check_mark:|:white_check_mark: |:white_check_mark: |:white_check_mark:|:white_check_mark: |:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|
| /rest/server-hardware/{id}/localStorageV2 | POST | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |:white_check_mark:|:white_check_mark: |:white_check_mark: |:white_check_mark:|:white_check_mark: |:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|
| /rest/server-hardware/firmware-compliance | POST | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |:white_check_mark:|:white_check_mark: |:white_check_mark: |:white_check_mark:| :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |:white_check_mark: |:white_check_mark: |:white_check_mark: |:white_check_mark: |:white_check_mark: |:white_check_mark: |:white_check_mark: |:white_check_mark: |
-| /rest/server-hardware/{id}/firmware/settings | PATCH | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: |:heavy_minus_sign:|:heavy_minus_sign: |:heavy_minus_sign: |:heavy_minus_sign:| :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: |:heavy_minus_sign: |:heavy_minus_sign: |:heavy_minus_sign: |:heavy_minus_sign: |:heavy_minus_sign: |:heavy_minus_sign: |:heavy_minus_sign: |:heavy_minus_sign: |
+| /rest/server-hardware/{id}/firmware/settings | PATCH | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign: |:heavy_minus_sign:|:heavy_minus_sign: |:white_check_mark: |:white_check_mark:| :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |:white_check_mark: |:white_check_mark: |:white_check_mark: |:white_check_mark: |:white_check_mark: |:white_check_mark: |:white_check_mark: |:white_check_mark: |
| **Server Hardware Types** |
| /rest/server-hardware-types | GET | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |:white_check_mark:|:white_check_mark: |:white_check_mark: |:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|
| /rest/server-hardware-types/{id} | GET | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |:white_check_mark:|:white_check_mark: |:white_check_mark: |:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|:white_check_mark:|
diff --git a/hpeOneView/resources/servers/server_hardware.py b/hpeOneView/resources/servers/server_hardware.py
index 572bb2b0a..b6820476b 100644
--- a/hpeOneView/resources/servers/server_hardware.py
+++ b/hpeOneView/resources/servers/server_hardware.py
@@ -32,6 +32,7 @@
SERVER_HARWARE_BELOW_GEN10 = 'Server Hardware generation is below Gen10'
SERVER_PROFILE_ATTACHED = 'Server Hardware has a Profile attached'
SERVER_POWERED_ON = 'Server Hardware is in Powered On state'
+SERVER_POWERED_OFF = 'Server Hardware is in Powered Off state'
ONGOING_FIRMWARE_UPDATE = 'Server Hardware is undergoing a firmware update'
ILO_ADVANCED_LICENSE_REQUIRED = 'Requires an HPE iLO Advanced license for monitored hardware'
@@ -350,12 +351,15 @@ def check_firmware_compliance(self, configuration, timeout=-1, custom_headers=No
return self._helper.do_post(uri, configuration, timeout=timeout, custom_headers=custom_headers)
@ensure_resource_client
- def validate_server_hardware_for_firmware_update(self):
+ def validate_server_hardware_for_firmware_update(self, configuration=None):
"""
Performs a validation for the prerequisites before firmware update.
Checks if the server hardware is in powered off state, No server profile attached to server
hardware, server hardware model is Gen10 or above, server hardware has advanced ilo license type.
+ Args:
+ configuration: Optional firmware update configuration
+
"""
state = self.data["state"]
server_profile_uri = self.data["serverProfileUri"]
@@ -363,6 +367,12 @@ def validate_server_hardware_for_firmware_update(self):
generation = self.data["mpModel"]
license_type = self.data["mpLicenseType"]
+ # Extract firmwareInstallType from configuration
+ firmware_install_type = None
+ if configuration and isinstance(configuration, list) and len(configuration) > 0:
+ if "value" in configuration[0] and "firmwareInstallType" in configuration[0]["value"]:
+ firmware_install_type = configuration[0]["value"]["firmwareInstallType"]
+
validation_error_list = []
matches = re.findall("\d+$", generation)
@@ -372,8 +382,10 @@ def validate_server_hardware_for_firmware_update(self):
validation_error_list.append(SERVER_PROFILE_ATTACHED)
if state == "UpdatingFirmware":
validation_error_list.append(ONGOING_FIRMWARE_UPDATE)
- if power_state != "Off":
+ if power_state != "Off" and firmware_install_type == "FirmwareOnlyOfflineMode":
validation_error_list.append(SERVER_POWERED_ON)
+ if power_state != "On" and firmware_install_type in ["FirmwareOnly", "FirmwareAndOSDrivers"]:
+ validation_error_list.append(SERVER_POWERED_OFF)
if license_type != "iLO Advanced":
validation_error_list.append(ILO_ADVANCED_LICENSE_REQUIRED)
@@ -396,5 +408,5 @@ def perform_firmware_update(self, configuration, timeout=-1, custom_headers=None
Updated Resource
"""
uri = "{}/firmware/settings".format(self.data["uri"])
- if self.validate_server_hardware_for_firmware_update():
+ if self.validate_server_hardware_for_firmware_update(configuration):
return self.patch_request(uri, configuration, timeout=timeout, custom_headers=custom_headers)