| *** Settings *** |
| Documentation Trigger code update to a target BMC. |
| ... Execution Method : |
| ... python -m robot -v OPENBMC_HOST:<hostname> |
| ... -v FILE_PATH:<path/*all.tar> update_bmc.robot |
| ... |
| ... Code update method BMC using REST |
| ... Update work flow sequence: |
| ... - User input BMC File existence check |
| ... - Ping Test and REST authentication |
| ... - Set Host Power host setting Policy to RESTORE_LAST_STATE |
| ... On reboot this policy would ensure the BMC comes |
| ... online and stays at HOST_POWERED_OFF state. |
| ... - Issue poweroff |
| ... - Prune archived journal logs |
| ... - Prepare for Update |
| ... - Wait for BMC to come online clean |
| ... - Wait for BMC_READY state |
| ... - Apply preserve BMC Network setting |
| ... - SCP image to BMC |
| ... - Activate the flash image |
| ... - Warm Reset BMC to activate code |
| ... - Wait for BMC to come online time out 30 minutes |
| ... - Version check post update |
| ... - Identify REST url post update |
| |
| Library ../../lib/gen_robot_keyword.py |
| Library String |
| |
| Resource code_update_utils.robot |
| Resource ../../lib/state_manager.robot |
| Resource ../../lib/utils.robot |
| Resource ../../lib/list_utils.robot |
| Resource ../../lib/openbmc_ffdc.robot |
| Resource ../../extended/obmc_boot_test_resource.robot |
| |
| Test Teardown Run Key FFDC On Test Case Fail |
| |
| *** Variables *** |
| |
| ${QUIET} ${1} |
| # Boot failures are not acceptable so we set the threshold to 0. |
| ${boot_fail_threshold} ${0} |
| |
| ${FILE_PATH} ${EMPTY} |
| ${FORCE_UPDATE} ${0} |
| ${REST_URL_FILE_PATH} ${EMPTY} |
| |
| # There are two reboots issued by code update. |
| ${MAX_BOOT_COUNT} ${2} |
| |
| *** Test Cases *** |
| |
| Initiate Code Update BMC |
| [Documentation] Initiate a code update on the BMC. |
| [Tags] Initiate_Code_Update_BMC |
| |
| ${status}= Run Keyword If '${LAST_KNOWN_GOOD_VERSION}' != '${EMPTY}' |
| ... Run Keyword And Return Status |
| ... Validate BMC Version ${LAST_KNOWN_GOOD_VERSION} |
| |
| Run Keyword if '${status}' == '${True}' |
| ... Pass Execution The BMC already has the requested build loaded so no further action will be taken. |
| |
| # Enable user to bypass prerequisite operations. |
| # Use cases for if BMC is not in working state. |
| Run Keyword If ${FORCE_UPDATE} == ${0} |
| ... Prepare BMC For Update |
| |
| Run Key U Preserve BMC Network Setting |
| Run Key SCP Tar Image File To BMC \ ${FILE_PATH} |
| Run Key Activate BMC Flash Image |
| Run Key U OBMC Boot Test \ OBMC Reboot (off) |
| Run Key U Check Boot Count And Time |
| Run Keyword If ${BOOT_COUNT} == ${1} |
| ... Log Boot time not updated by kernel. level=WARN |
| |
| *** Keywords *** |
| |
| Prepare BMC For Update |
| [Documentation] Prerequisite operation before code update. |
| Check Boot Count And Time |
| Prune Journal Log |
| Power Off Request |
| Set BMC Power Policy RESTORE_LAST_STATE |
| |
| Prepare For Update |
| Check If BMC is Up 20 min 10 sec |
| Check Boot Count And Time |
| |
| # Temporary fix for lab migration for driver which is booted with |
| # BMC state "/xyz/openbmc_project/state/BMC0/". |
| ${status}= Run Keyword And Return Status Temp BMC URI Check |
| Run Keyword If '${status}' == '${False}' |
| ... Wait For BMC Ready |
| ... ELSE Wait For Temp BMC Ready |
| |
| Check Boot Count And Time |
| [Documentation] Check for unexpected reboots. |
| Set BMC Reset Reference Time |
| Log To Console \n Boot Count: ${BOOT_COUNT} |
| Log To Console \n Boot Time: ${BOOT_TIME} |
| Run Keyword If ${BOOT_COUNT} > ${MAX_BOOT_COUNT} |
| ... Log Phantom Reboot!!! Unexpected reboot detected level=WARN |
| |
| Temp BMC URI Check |
| [Documentation] Check for transient "BMC0" interface. |
| ${resp}= Openbmc Get Request /xyz/openbmc_project/state/BMC0/ |
| Should Be Equal As Strings ${resp.status_code} ${HTTP_OK} |
| |
| Wait For Temp BMC Ready |
| [Documentation] Check for BMC "Ready" until timedout. |
| Wait Until Keyword Succeeds |
| ... 10 min 10 sec Check Temp BMC State |