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 20Resource ../lib/bmc_redfish_resource.robot 21Resource ../lib/bmc_redfish_utils.robot 22Library ../lib/gen_misc.py 23 24*** Variables *** 25${HOST_SETTING} /org/openbmc/settings/host0 26 27${ERROR_REGEX} xyz.openbmc_project.Software.BMC.Updater.service: Failed with result 'core-dump' 28 29*** Test Cases *** 30 31Get To Stable State 32 [Documentation] BMC cleanup drive to stable state 33 ... 1. PDU powercycle if specified 34 ... 1. Ping Test 35 ... 2. SSH Connection session Test 36 ... 3. REST Connection session Test 37 ... 4. Reboot BMC if REST Test failed 38 ... 5. Get BMC in Ready state if its not in this state 39 ... 6. Get Host in Off state if its not in this state 40 ... 7. Update restore policy 41 ... 8. Verify and Update MAC address. 42 [Tags] Get_To_Stable_State 43 44 Run Keyword And Ignore Error Powercycle System Via PDU 45 46 ${ping_status}= Run Keyword And Return Status 47 ... Wait For Host To Ping ${OPENBMC_HOST} 2 mins 48 49 # Check if the ping works using 1400 MTU. 50 #Run Keyword if ${ping_status} == ${True} MTU Ping Test 51 52 Run Keyword if ${ping_status} == ${False} 53 ... Fail ${OPENBMC_HOST} ping test failed. 54 55 Open Connection And Log In host=${OPENBMC_HOST} 56 57 Run Keyword If ${REDFISH_SUPPORTED} Redfish.Login 58 59 Wait Until Keyword Succeeds 60 ... 1 min 30 sec Initialize OpenBMC 61 62 ${ready_status}= Run Keyword And Return Status Is BMC Ready 63 Run Keyword If '${ready_status}' == '${False}' 64 ... Put BMC State Ready 65 ... ELSE IF ${REDFISH_SUPPORT_TRANS_STATE} == ${1} 66 ... Redfish Power Off stack_mode=skip 67 ... ELSE 68 ... REST Power Off stack_mode=skip 69 70 Prune Journal Log 71 72 Run Keyword And Ignore Error Set BMC Power Policy ${ALWAYS_POWER_OFF} 73 Run Keyword And Ignore Error Redfish Set Power Restore Policy AlwaysOff 74 75 Run Keyword And Ignore Error Delete All Error Logs 76 Run Keyword And Ignore Error Redfish Purge Event Log 77 Run Keyword And Ignore Error Delete All Dumps 78 Run Keyword And Ignore Error Redfish Delete All BMC Dumps 79 Run Keyword And Ignore Error Delete All Redfish Sessions 80 Check For Current Boot Application Failures 81 82*** Keywords *** 83 84BMC Online Test 85 [Documentation] BMC ping, SSH, REST connection Test 86 87 ${l_status}= Run Keyword and Return Status 88 ... Verify Ping and REST Authentication 89 Run Keyword If '${l_status}' == '${False}' 90 ... Fail msg=System not in ideal state to continue [ERROR] 91 92 93Update Policy Setting 94 [Documentation] Update the given restore policy 95 [Arguments] ${policy} 96 97 ${valueDict}= create dictionary data=${policy} 98 Write Attribute ${HOST_SETTING} power_policy data=${valueDict} 99 ${currentPolicy}= Read Attribute ${HOST_SETTING} power_policy 100 Should Be Equal ${currentPolicy} ${policy} 101 102 103Trigger Warm Reset via Reboot 104 [Documentation] Execute reboot command on the remote BMC and 105 ... returns immediately. This keyword "Start Command" 106 ... returns nothing and does not wait for the command 107 ... execution to be finished. 108 Open Connection And Log In 109 110 Start Command /sbin/reboot 111 112 113Powercycle System Via PDU 114 [Documentation] AC cycle the system via PDU. 115 116 Validate Parameters 117 PDU Power Cycle 118 Check If BMC is Up 5 min 10 sec 119 120 121Check For Current Boot Application Failures 122 [Documentation] Parse the journal log and check for failures. 123 [Arguments] ${error_regex}=${ERROR_REGEX} 124 125 ${error_regex}= Escape Bash Quotes ${error_regex} 126 ${journal_log} ${stderr} ${rc}= BMC Execute Command 127 ... journalctl -b --no-pager | egrep '${error_regex}' ignore_err=1 128 129 Should Be Empty ${journal_log} 130 131 132Validate Parameters 133 [Documentation] Validate PDU parameters. 134 Should Not Be Empty ${PDU_IP} 135 Should Not Be Empty ${PDU_TYPE} 136 Should Not Be Empty ${PDU_SLOT_NO} 137 Should Not Be Empty ${PDU_USERNAME} 138 Should Not Be Empty ${PDU_PASSWORD} 139 140 141MTU Ping Test 142 [Documentation] Ping test using MTU. 143 [Arguments] ${mtu}=${1400} 144 145 # Description of argument(s): 146 # mtu The maximum transmission unit (MTU) of a network interface. 147 148 ${rc} ${output}= Run And Return RC And Output 149 ... ping -M do -s ${mtu} -c 10 ${OPENBMC_HOST} 150 Should Be Equal As Integers ${rc} 0 151 Should Not Contain ${output} 100% packet loss 152