1*** Settings *** 2Documentation Redfish BMC and PNOR software utilities keywords. 3 4Library code_update_utils.py 5Library gen_robot_valid.py 6Library tftp_update_utils.py 7Resource bmc_redfish_utils.robot 8Resource boot_utils.robot 9 10*** Keywords *** 11 12Get Software Functional State 13 [Documentation] Return functional or active state of the software (i.e. True/False). 14 [Arguments] ${image_id} 15 16 # Description of argument(s): 17 # image_id The image ID (e.g. "acc9e073"). 18 19 ${image_info}= Redfish.Get Properties /redfish/v1/UpdateService/FirmwareInventory/${image_id} 20 21 ${sw_functional}= Run Keyword If '${image_info["Description"]}' == 'BMC update' 22 ... Redfish.Get Attribute /redfish/v1/Managers/bmc FirmwareVersion 23 ... ELSE 24 ... Redfish.Get Attribute /redfish/v1/Systems/system BiosVersion 25 26 ${functional}= Run Keyword And Return Status 27 ... Should Be Equal ${sw_functional} ${image_info["Version"]} 28 29 [Return] ${functional} 30 31 32Get Software Inventory State 33 [Documentation] Return dictionary of the image type, version and functional state 34 ... of the software objects active on the system. 35 36 # User defined state for software objects. 37 # Note: "Functional" term refers to firmware which system is currently booted with. 38 # sw_inv_dict: 39 # [ace821ef]: 40 # [image_type]: Host update 41 # [image_id]: ace821ef 42 # [functional]: True 43 # [version]: witherspoon-xx.xx.xx.xx 44 # [b9101858]: 45 # [image_type]: BMC update 46 # [image_id]: b9101858 47 # [functional]: True 48 # [version]: 2.8.0-dev-150-g04508dc9f 49 # [c45eafa5]: 50 # [image_type]: BMC update 51 # [image_id]: c45eafa5 52 # [functional]: False 53 # [version]: 2.8.0-dev-149-g1a8df5077 54 55 ${sw_member_list}= Redfish_Utils.Get Member List /redfish/v1/UpdateService/FirmwareInventory 56 &{sw_inv_dict}= Create Dictionary 57 58 # sw_member_list: 59 # [0]: /redfish/v1/UpdateService/FirmwareInventory/98744d76 60 # [1]: /redfish/v1/UpdateService/FirmwareInventory/9a8028ec 61 # [2]: /redfish/v1/UpdateService/FirmwareInventory/acc9e073 62 63 FOR ${uri_path} IN @{sw_member_list} 64 &{tmp_dict}= Create Dictionary 65 ${image_info}= Redfish.Get Properties ${uri_path} 66 Set To Dictionary ${tmp_dict} image_type ${image_info["Description"]} 67 Set To Dictionary ${tmp_dict} image_id ${uri_path.split("/")[-1]} 68 ${functional}= Get Software Functional State ${uri_path.split("/")[-1]} 69 Set To Dictionary ${tmp_dict} functional ${functional} 70 Set To Dictionary ${tmp_dict} version ${image_info["Version"]} 71 Set To Dictionary ${sw_inv_dict} ${uri_path.split("/")[-1]} ${tmp_dict} 72 END 73 74 [Return] &{sw_inv_dict} 75 76 77Get Software Inventory State By Version 78 [Documentation] Return the software inventory record that matches the given software version. 79 [Arguments] ${software_version} 80 81 # If no matchine record can be found, return ${EMPTY}. 82 83 # Example of returned data: 84 # software_inventory_record: 85 # [image_type]: BMC update 86 # [image_id]: 1e662ba8 87 # [functional]: True 88 # [version]: 2.8.0-dev-150-g04508dc9f 89 90 # Description of argument(s): 91 # software_version A BMC or Host version (e.g "2.8.0-dev-150-g04508dc9f"). 92 93 ${software_inventory}= Get Software Inventory State 94 # Filter out entries that don't match the criterion.. 95 ${software_inventory}= Filter Struct ${software_inventory} [('version', '${software_version}')] 96 # Convert from dictionary to list. 97 ${software_inventory}= Get Dictionary Values ${software_inventory} 98 ${num_records}= Get Length ${software_inventory} 99 100 Return From Keyword If ${num_records} == ${0} ${EMPTY} 101 102 # Return the first list entry. 103 [Return] ${software_inventory}[0] 104 105 106Redfish Upload Image And Check Progress State 107 [Documentation] Code update with ApplyTime. 108 [Arguments] ${apply_time} 109 110 # Description of argument(s): 111 # apply_time ApplyTime allowed values (e.g. "OnReset", "Immediate"). 112 113 Set ApplyTime policy=${apply_Time} 114 Redfish Upload Image ${REDFISH_BASE_URI}UpdateService ${IMAGE_FILE_PATH} 115 116 ${image_id}= Get Latest Image ID 117 Rprint Vars image_id 118 119 Check Image Update Progress State 120 ... match_state='Disabled', 'Updating' image_id=${image_id} 121 122 # Wait a few seconds to check if the update progress started. 123 Sleep 5s 124 Check Image Update Progress State 125 ... match_state='Updating' image_id=${image_id} 126 127 Wait Until Keyword Succeeds 8 min 20 sec 128 ... Check Image Update Progress State 129 ... match_state='Enabled' image_id=${image_id} 130 131 132Reboot BMC And Verify BMC Image 133 [Documentation] Reboot or wait for BMC standby post reboot and 134 ... verify installed image is functional. 135 [Arguments] ${apply_time} ${start_boot_seconds} 136 137 # Description of argument(s): 138 # apply_time ApplyTime allowed values 139 # (e.g. "OnReset", "Immediate"). 140 # start_boot_seconds See 'Wait For Reboot' for details. 141 142 Run Keyword if 'OnReset' == '${apply_time}' 143 ... Run Keyword 144 ... Redfish OBMC Reboot (off) 145 ... ELSE 146 ... Run Keyword 147 ... Wait For Reboot start_boot_seconds=${start_boot_seconds} 148 Redfish.Login 149 Redfish Verify BMC Version ${IMAGE_FILE_PATH} 150 151 152Poweron Host And Verify Host Image 153 [Documentation] Power on Host and verify installed image is functional. 154 [Arguments] ${apply_time} 155 156 # Description of argument(s): 157 # apply_time ApplyTime allowed values 158 # (e.g. "OnReset", "Immediate"). 159 160 Run Keyword if 'OnReset' == '${apply_time}' 161 ... Redfish Host Reboot 162 ... ELSE 163 ... Wait State os_running_match_state 10 mins 164 Redfish.Login 165 Redfish Verify Host Version ${IMAGE_FILE_PATH} 166 167 168Get Host Power State 169 [Documentation] Get host power state. 170 [Arguments] ${quiet}=0 171 172 # Description of arguments: 173 # quiet Indicates whether results should be printed. 174 175 ${state}= Redfish.Get Attribute 176 ... ${REDFISH_BASE_URI}Systems/system PowerState 177 Rqprint Vars state 178 179 [Return] ${state} 180 181 182Check Host Power State 183 [Documentation] Check that the machine's host state matches 184 ... the caller's required host state. 185 [Arguments] ${match_state} 186 187 # Description of argument(s): 188 # match_state The expected state. This may be one or more 189 # comma-separated values (e.g. "On", "Off"). 190 # If the actual state matches any of the 191 # states named in this argument, 192 # this keyword passes. 193 194 ${state}= Get Host Power State 195 Rvalid Value state valid_values=[${match_state}] 196 197