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 "RESTORE_LAST_STATE"
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
17
18*** Variables ***
19${HOST_SETTING}      /org/openbmc/settings/host0
20
21*** Test Cases ***
22
23Get To Stable State
24    [Documentation]  BMC cleanup drive to stable state
25    ...              1. PDU powercycle if specified
26    ...              1. Ping Test
27    ...              2. SSH Connection session Test
28    ...              3. REST Connection session Test
29    ...              4. Reboot BMC if REST Test failed
30    ...              5. Get BMC in Ready state if its not in this state
31    ...              6. Get Host in Off state if its not in this state
32    ...              7. Update restore policy
33    [Tags]  Get_To_Stable_State
34
35    Run Keyword And Ignore Error  Powercycle System Via PDU
36
37    Wait For Host To Ping  ${OPENBMC_HOST}  1 mins
38    Open Connection And Log In  host=${OPENBMC_HOST}
39
40    ${rest_status}=  Run Keyword And Return Status  Initialize OpenBMC
41    Run Keyword If  '${rest_status}' == '${False}'
42    ...  Reboot and Wait for BMC Online
43
44    ${ready_status}=  Run Keyword And Return Status  Is BMC Ready
45    Run Keyword If  '${ready_status}' == '${False}'  Put BMC State  Ready
46
47    ${host_off_status}=  Run Keyword And Return Status  Is Host Off
48    Run Keyword If  '${host_off_status}' == '${False}'  Initiate Host PowerOff
49
50    Prune Journal Log
51
52    Run Keyword And Ignore Error  Update Policy Setting  RESTORE_LAST_STATE
53
54
55*** Keywords ***
56
57Reboot and Wait for BMC Online
58    [Documentation]    Reboot BMC and wait for it to come online
59    ...                and boot to standby
60
61    Trigger Warm Reset via Reboot
62    Wait Until Keyword Succeeds
63    ...    5 min   10 sec    BMC Online Test
64
65    Wait For BMC Standby
66
67
68BMC Online Test
69    [Documentation]   BMC ping, SSH, REST connection Test
70
71    ${l_status}=   Run Keyword and Return Status
72    ...   Verify Ping and REST Authentication
73    Run Keyword If  '${l_status}' == '${False}'
74    ...   Fail  msg=System not in ideal state to continue [ERROR]
75
76
77Wait For BMC Standby
78    [Documentation]   Wait Until BMC standby post BMC reboot
79
80    @{states}=   Create List   BMC_READY   HOST_POWERED_OFF
81    Wait Until Keyword Succeeds
82    ...    10 min   10 sec   Verify BMC State   ${states}
83
84
85Get BMC State and Expect Standby
86    [Documentation]   Get BMC state and should be at standby
87
88    @{states}=     Create List   BMC_READY   HOST_POWERED_OFF
89    ${bmc_state}=  Get BMC State Deprecated
90    Should Contain  ${states}   ${bmc_state}
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
121Validate Parameters
122    Should Not Be Empty   ${PDU_IP}
123    Should Not Be Empty   ${PDU_TYPE}
124    Should Not Be Empty   ${PDU_SLOT_NO}
125    Should Not Be Empty   ${PDU_USERNAME}
126    Should Not Be Empty   ${PDU_PASSWORD}
127