Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion endpoints-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -386,7 +386,7 @@
| <sub>/rest/server-hardware/discovery</sub> | 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:|
| <sub>/rest/server-hardware/{id}/localStorageV2</sub> | 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:|
| <sub>/rest/server-hardware/firmware-compliance</sub> | 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: |
| <sub>/rest/server-hardware/{id}/firmware/settings</sub> | 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: |
| <sub>/rest/server-hardware/{id}/firmware/settings</sub> | 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** |
| <sub>/rest/server-hardware-types</sub> | 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:|
| <sub>/rest/server-hardware-types/{id}</sub> | 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:|
Expand Down
18 changes: 15 additions & 3 deletions hpeOneView/resources/servers/server_hardware.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'

Expand Down Expand Up @@ -350,19 +351,28 @@ 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"]
power_state = self.data["powerState"]
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)
Expand All @@ -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)

Expand All @@ -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)