blob: b2fc6b53aff5c829a19933aa7664ef0c8a3b6077 [file] [log] [blame]
*** Settings ***
Resource ../lib/utils.robot
Variables ../data/variables.py
*** Variables ***
${BMC_READY_STATE} Ready
${BMC_NOT_READY_STATE} NotReady
${QUIET} ${0}
# "1" indicates that the new "xyz" interface should be used.
${OBMC_STATES_VERSION} ${1}
*** Keywords ***
Initiate Host Boot
[Documentation] Initiate host power on.
[Arguments] ${wait}=${1}
# Description of argument(s):
# wait Indicates that this keyword should wait for host running state.
${args}= Create Dictionary data=${HOST_POWERON_TRANS}
Write Attribute
... ${HOST_STATE_URI} RequestedHostTransition data=${args}
# Does caller want to wait for status?
Run Keyword If '${wait}' == '${0}' Return From Keyword
Wait Until Keyword Succeeds
... 10 min 10 sec Is Host Running
Initiate Host PowerOff
[Documentation] Initiate host power off.
# 1. Request soft power off
# 2. Hard power off, if failed.
[Arguments] ${wait}=${1}
# Description of argument(s):
# wait Indicates that this keyword should wait for host off state.
${args}= Create Dictionary data=${HOST_POWEROFF_TRANS}
Write Attribute
... ${HOST_STATE_URI} RequestedHostTransition data=${args}
# Does caller want to wait for status?
Run Keyword If '${wait}' == '${0}' Return From Keyword
${status}= Run Keyword And Return Status Wait For PowerOff
Run Keyword if '${status}' == '${False}' Hard Power Off
Wait For PowerOff
[Documentation] Wait for power off state.
# TODO: Reference to open-power/skiboot#81.
# Revert to 3 minutes once fixed.
Wait Until Keyword Succeeds 6 min 10 sec Is Host Off
Hard Power Off
[Documentation] Do a hard power off.
[Arguments] ${wait}=${1}
# Description of argument(s):
# wait Indicates that this keyword should wait for host off state.
${args}= Create Dictionary data=${CHASSIS_POWEROFF_TRANS}
Write Attribute
... ${CHASSIS_STATE_URI} RequestedPowerTransition data=${args}
# Does caller want to wait for status?
Run Keyword If '${wait}' == '${0}' Return From Keyword
Wait Until Keyword Succeeds
... 1 min 10 sec Run Keywords Is Chassis Off AND Is Host Off
Initiate Host Reboot
[Documentation] Initiate host reboot via REST.
[Arguments] ${wait}=${1}
# Description of argument(s):
# wait Indicates that this keyword should wait for host reboot state.
${args}= Create Dictionary data=${HOST_REBOOT_TRANS}
Write Attribute
... ${HOST_STATE_URI} RequestedHostTransition data=${args}
# Does caller want to wait for host booted status?
Run Keyword If '${wait}' == '${0}' Return From Keyword
Is Host Rebooted
Is Host Running
[Documentation] Check if host state is "Running".
# Chassis state should be "On" before we check the host state.
Is Chassis On
${host_state}= Get Host State
Should Be Equal Running ${host_state}
# Check to verify that the host is really booted.
Is OS Booted
Get Host State Attribute
[Documentation] Return the state of the host as a string.
[Arguments] ${host_attribute} ${quiet}=${QUIET}
# Description of argument(s):
# host_attribute Host attribute name.
# quiet Suppress REST output logging to console.
${HOST_STATE_URI}= Set Variable If '${PLATFORM_ARCH_TYPE}' == 'x86' and '${host_attribute}' == 'OperatingSystemState'
... ${OS_STATE_URI} ${HOST_STATE_URI}
${state}=
... Read Attribute ${HOST_STATE_URI} ${host_attribute} quiet=${quiet}
[Return] ${state}
Is OS Booted
[Documentation] Check OS status.
# Example:
# "/xyz/openbmc_project/state/host0": {
# "AttemptsLeft": 0,
# "BootProgress": "xyz.openbmc_project.State.Boot.Progress.ProgressStages.OSStart",
# "CurrentHostState": "xyz.openbmc_project.State.Host.HostState.Running",
# "OperatingSystemState": "xyz.openbmc_project.State.OperatingSystem.Status.OSStatus.BootComplete",
# "RequestedHostTransition": "xyz.openbmc_project.State.Host.Transition.On"
# }
${boot_stage}= Get Host State Attribute BootProgress
Should Be Equal ${OS_BOOT_START} ${boot_stage}
${os_state}= Get Host State Attribute OperatingSystemState
Should Be Equal ${OS_BOOT_COMPLETE} ${os_state}
Is Host Off
[Documentation] Check if host state is "Off".
# Chassis state should be "Off" before we check the host state.
Is Chassis Off
${host_state}= Get Host State
Should Be Equal Off ${host_state}
# Check to verify that the host shutdown completely.
# TODO openbmc/openbmc#2049 - boot sensor not cleared on power off
#Is OS Off
Is Host Rebooted
[Documentation] Checks if host rebooted.
${host_trans_state}= Get Host Trans State
Should Be Equal ${host_trans_state} Reboot
Is Host Running
Is Chassis On
[Documentation] Check if chassis state is "On".
${power_state}= Get Chassis Power State
Should Be Equal On ${power_state}
Is Chassis Off
[Documentation] Check if chassis state is "Off".
${power_state}= Get Chassis Power State
Should Be Equal Off ${power_state}
Is Host Quiesced
[Documentation] Check if host state is quiesced.
${host_state}= Get Host State
${status}= Run Keyword And Return Status Should Be Equal
... ${host_state} Quiesced
[Return] ${status}
Recover Quiesced Host
[Documentation] Recover host from quisced state.
${resp}= Run Keyword And Return Status Is Host Quiesced
Run Keyword If '${resp}' == 'True'
... Run Keywords Initiate Host PowerOff AND
... Log HOST is recovered from quiesced state
Get Host State
[Documentation] Return the state of the host as a string.
[Arguments] ${quiet}=${QUIET}
# quiet - Suppress REST output logging to console.
${state}=
... Read Attribute ${HOST_STATE_URI} CurrentHostState
... quiet=${quiet}
[Return] ${state.rsplit('.', 1)[1]}
Get Host Trans State
[Documentation] Return the transition state of host as a string.
... e.g. On, Off, Reboot
[Arguments] ${quiet}=${QUIET}
# Description of arguments:
# quiet Suppress REST output logging to console.
${state}=
... Read Attribute ${HOST_STATE_URI} RequestedHostTransition
... quiet=${quiet}
[Return] ${state.rsplit('.', 1)[1]}
Get Chassis Power State
[Documentation] Return the power state of the Chassis
... as a string.
[Arguments] ${quiet}=${QUIET}
# quiet - Suppress REST output logging to console.
${state}=
... Read Attribute ${CHASSIS_STATE_URI} CurrentPowerState
... quiet=${quiet}
[Return] ${state.rsplit('.', 1)[1]}
Get BMC State
[Documentation] Return the state of the BMC.
[Arguments] ${quiet}=${QUIET}
# quiet - Suppress REST output logging to console.
${state}=
... Read Attribute ${BMC_STATE_URI} CurrentBMCState quiet=${quiet}
[Return] ${state.rsplit('.', 1)[1]}
Put BMC State
[Documentation] Put BMC in given state.
[Arguments] ${expected_state}
# expected_state - expected BMC state
${bmc_state}= Get BMC State
Run Keyword If '${bmc_state}' == '${expected_state}'
... Log BMC is already in ${expected_state} state
... ELSE
... OBMC Reboot (off)
Initiate BMC Reboot
[Documentation] Initiate BMC reboot.
[Arguments] ${wait}=${1}
# Description of argument(s):
# wait Indicates that this keyword should wait for ending state..
${args}= Create Dictionary data=${BMC_REBOOT_TRANS}
Run Keyword And Ignore Error Write Attribute
... ${BMC_STATE_URI} RequestedBMCTransition data=${args}
# Does caller want to wait for status?
Run Keyword If '${wait}' == '${0}' Return From Keyword
${session_active}= Check If BMC Reboot Is Initiated
Run Keyword If '${session_active}' == '${True}'
... Fail msg=BMC Reboot didn't occur.
Check If BMC is Up
Check If BMC Reboot Is Initiated
[Documentation] Checks whether BMC Reboot is initiated by checking
... BMC connection loss.
# Reboot adds 3 seconds delay before forcing reboot
# To minimize race conditions, we wait for 7 seconds
Sleep 7s
${alive}= Run Keyword and Return Status
... Open Connection And Log In
Return From Keyword If '${alive}' == '${False}' ${False}
[Return] ${True}
Is BMC Ready
[Documentation] Check if BMC state is Ready.
${bmc_state}= Get BMC State
Should Be Equal ${BMC_READY_STATE} ${bmc_state}
Is BMC Not Ready
[Documentation] Check if BMC state is Not Ready.
${bmc_state}= Get BMC State
Should Be Equal ${BMC_NOT_READY_STATE} ${bmc_state}
Wait for BMC state
[Documentation] Wait until given BMC state is reached.
[Arguments] ${state}
# state - BMC state to wait for
Run Keyword If '${state}' == '${BMC_READY_STATE}'
... Wait Until Keyword Succeeds
... 10 min 10 sec Is BMC Ready
... ELSE IF '${state}' == '${BMC_NOT_READY_STATE}'
... Wait Until Keyword Succeeds
... 10 min 10 sec Is BMC Not Ready
... ELSE Fail msg=Invalid BMC state
Set State Interface Version
[Documentation] Set version to indicate which interface to use.
${resp}= Openbmc Get Request ${CHASSIS_STATE_URI}
${status}= Run Keyword And Return Status
... Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
Run Keyword If '${status}' == '${True}'
... Set Global Variable ${OBMC_STATES_VERSION} ${1}
... ELSE
... Set Global Variable ${OBMC_STATES_VERSION} ${0}
Power Off Request
[Documentation] Select appropriate poweroff keyword.
Run Keyword If '${OBMC_STATES_VERSION}' == '${0}'
... Initiate Power Off
... ELSE
... Initiate Host PowerOff
Wait For BMC Ready
[Documentation] Check BMC state and wait for BMC Ready.
Wait Until Keyword Succeeds 10 min 10 sec Is BMC Ready