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 Application Failures 76 Run Keyword And Ignore Error Remove Journald Logs 77 78*** Keywords *** 79 80BMC Online Test 81 [Documentation] BMC ping, SSH, REST connection Test 82 83 ${l_status}= Run Keyword and Return Status 84 ... Verify Ping and REST Authentication 85 Run Keyword If '${l_status}' == '${False}' 86 ... Fail msg=System not in ideal state to continue [ERROR] 87 88 89Update Policy Setting 90 [Documentation] Update the given restore policy 91 [Arguments] ${policy} 92 93 ${valueDict}= create dictionary data=${policy} 94 Write Attribute ${HOST_SETTING} power_policy data=${valueDict} 95 ${currentPolicy}= Read Attribute ${HOST_SETTING} power_policy 96 Should Be Equal ${currentPolicy} ${policy} 97 98 99Trigger Warm Reset via Reboot 100 [Documentation] Execute reboot command on the remote BMC and 101 ... returns immediately. This keyword "Start Command" 102 ... returns nothing and does not wait for the command 103 ... execution to be finished. 104 Open Connection And Log In 105 106 Start Command /sbin/reboot 107 108 109Powercycle System Via PDU 110 [Documentation] AC cycle the system via PDU. 111 112 Validate Parameters 113 PDU Power Cycle 114 Check If BMC is Up 5 min 10 sec 115 116 117Check For Application Failures 118 [Documentation] Parse the journal log and check for failures. 119 [Arguments] ${error_regex}=${ERROR_REGEX} 120 121 ${error_regex}= Escape Bash Quotes ${error_regex} 122 ${journal_log} ${stderr} ${rc}= BMC Execute Command 123 ... journalctl --no-pager | egrep '${error_regex}' ignore_err=1 124 125 Should Be Empty ${journal_log} 126 127 128Validate Parameters 129 [Documentation] Validate PDU parameters. 130 Should Not Be Empty ${PDU_IP} 131 Should Not Be Empty ${PDU_TYPE} 132 Should Not Be Empty ${PDU_SLOT_NO} 133 Should Not Be Empty ${PDU_USERNAME} 134 Should Not Be Empty ${PDU_PASSWORD} 135