1*** Settings *** 2Documentation This module will take whatever action is necessary 3... to bring the BMC to a stable, standby state. For our 4... purposes, a stable state is defined as: 5... - BMC is communicating 6... (pinging, sshing and REST commands working) 7... - Power state is 0 (off) 8... - BMC state is "Ready" 9... - HOST state is "Off" 10... - Boot policy is "ALWAYS_POWER_OFF" 11... Power cycle system via PDU if specified 12... Prune archived journal logs 13 14Resource ../lib/utils.robot 15Resource ../lib/pdu/pdu.robot 16Resource ../lib/state_manager.robot 17Resource ../lib/bmc_network_utils.robot 18Resource ../lib/bmc_cleanup.robot 19Resource ../lib/dump_utils.robot 20Library ../lib/gen_misc.py 21 22*** Variables *** 23${HOST_SETTING} /org/openbmc/settings/host0 24 25${ERROR_REGEX} xyz.openbmc_project.Software.BMC.Updater.service: Failed with result 'core-dump' 26 27*** Test Cases *** 28 29Get To Stable State 30 [Documentation] BMC cleanup drive to stable state 31 ... 1. PDU powercycle if specified 32 ... 1. Ping Test 33 ... 2. SSH Connection session Test 34 ... 3. REST Connection session Test 35 ... 4. Reboot BMC if REST Test failed 36 ... 5. Get BMC in Ready state if its not in this state 37 ... 6. Get Host in Off state if its not in this state 38 ... 7. Update restore policy 39 ... 8. Verify and Update MAC address. 40 [Tags] Get_To_Stable_State 41 42 Run Keyword And Ignore Error Powercycle System Via PDU 43 44 Wait For Host To Ping ${OPENBMC_HOST} 2 mins 45 Run Keyword And Ignore Error 46 ... Open Connection And Log In host=${OPENBMC_HOST} 47 48 Wait Until Keyword Succeeds 49 ... 1 min 30 sec Initialize OpenBMC 50 51 ${ready_status}= Run Keyword And Return Status Is BMC Ready 52 Run Keyword If '${ready_status}' == '${False}' Put BMC State Ready 53 54 ${host_off_status}= Run Keyword And Return Status Is Host Off 55 Run Keyword If '${host_off_status}' == '${False}' Initiate Host PowerOff 56 57 Prune Journal Log 58 59 Run Keyword And Ignore Error Set BMC Power Policy ${ALWAYS_POWER_OFF} 60 61 # TODO: Enable MAC AES check latter. 62 # Reference : openbmc/openbmc-test-automation#998 63 #Run Keyword If '${MAC_ADDRESS}' != '${EMPTY}' 64 #... Check And Reset MAC 65 66 # TODO: Add new UBI File system cleanup. 67 # Reference : openbmc/openbmc-test-automation#998 68 #${rc}= Execute Command find ${CLEANUP_DIR_PATH} 69 #... return_stdout=False return_rc=True 70 #Run Keyword If '${CLEANUP_DIR_PATH}' != '${EMPTY}' and ${rc} == 0 71 #... Cleanup Dir 72 73 Run Keyword And Ignore Error Delete All Error Logs 74 Run Keyword And Ignore Error Delete All Dumps 75 Check For Current Boot Application Failures 76 77*** Keywords *** 78 79BMC Online Test 80 [Documentation] BMC ping, SSH, REST connection Test 81 82 ${l_status}= Run Keyword and Return Status 83 ... Verify Ping and REST Authentication 84 Run Keyword If '${l_status}' == '${False}' 85 ... Fail msg=System not in ideal state to continue [ERROR] 86 87 88Update Policy Setting 89 [Documentation] Update the given restore policy 90 [Arguments] ${policy} 91 92 ${valueDict}= create dictionary data=${policy} 93 Write Attribute ${HOST_SETTING} power_policy data=${valueDict} 94 ${currentPolicy}= Read Attribute ${HOST_SETTING} power_policy 95 Should Be Equal ${currentPolicy} ${policy} 96 97 98Trigger Warm Reset via Reboot 99 [Documentation] Execute reboot command on the remote BMC and 100 ... returns immediately. This keyword "Start Command" 101 ... returns nothing and does not wait for the command 102 ... execution to be finished. 103 Open Connection And Log In 104 105 Start Command /sbin/reboot 106 107 108Powercycle System Via PDU 109 [Documentation] AC cycle the system via PDU. 110 111 Validate Parameters 112 PDU Power Cycle 113 Check If BMC is Up 5 min 10 sec 114 115 116Check For Current Boot Application Failures 117 [Documentation] Parse the journal log and check for failures. 118 [Arguments] ${error_regex}=${ERROR_REGEX} 119 120 ${error_regex}= Escape Bash Quotes ${error_regex} 121 ${journal_log} ${stderr} ${rc}= BMC Execute Command 122 ... journalctl -b --no-pager | egrep '${error_regex}' ignore_err=1 123 124 Should Be Empty ${journal_log} 125 126 127Validate Parameters 128 [Documentation] Validate PDU parameters. 129 Should Not Be Empty ${PDU_IP} 130 Should Not Be Empty ${PDU_TYPE} 131 Should Not Be Empty ${PDU_SLOT_NO} 132 Should Not Be Empty ${PDU_USERNAME} 133 Should Not Be Empty ${PDU_PASSWORD} 134