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
17Resource          ../lib/bmc_network_utils.robot
18
19*** Variables ***
20${HOST_SETTING}      /org/openbmc/settings/host0
21
22*** Test Cases ***
23
24Get To Stable State
25    [Documentation]  BMC cleanup drive to stable state
26    ...              1. PDU powercycle if specified
27    ...              1. Ping Test
28    ...              2. SSH Connection session Test
29    ...              3. REST Connection session Test
30    ...              4. Reboot BMC if REST Test failed
31    ...              5. Get BMC in Ready state if its not in this state
32    ...              6. Get Host in Off state if its not in this state
33    ...              7. Update restore policy
34    ...              8. Verify and Update MAC address.
35    [Tags]  Get_To_Stable_State
36
37    Run Keyword And Ignore Error  Powercycle System Via PDU
38
39    Wait For Host To Ping  ${OPENBMC_HOST}  2 mins
40    Run Keyword And Ignore Error
41    ...  Open Connection And Log In  host=${OPENBMC_HOST}
42
43    Wait Until Keyword Succeeds
44    ...  1 min  30 sec  Initialize OpenBMC
45
46    ${ready_status}=  Run Keyword And Return Status  Is BMC Ready
47    Run Keyword If  '${ready_status}' == '${False}'  Put BMC State  Ready
48
49    ${host_off_status}=  Run Keyword And Return Status  Is Host Off
50    Run Keyword If  '${host_off_status}' == '${False}'  Initiate Host PowerOff
51
52    Prune Journal Log
53
54    Run Keyword And Ignore Error  Update Policy Setting  RESTORE_LAST_STATE
55
56    Run Keyword If  '${MAC_ADDRESS}' != '${EMPTY}'
57    ...  Check And Reset MAC
58
59
60*** Keywords ***
61
62Reboot and Wait for BMC Online
63    [Documentation]    Reboot BMC and wait for it to come online
64    ...                and boot to standby
65
66    Trigger Warm Reset via Reboot
67    Wait Until Keyword Succeeds
68    ...    5 min   10 sec    BMC Online Test
69
70    Wait For BMC Standby
71
72
73BMC Online Test
74    [Documentation]   BMC ping, SSH, REST connection Test
75
76    ${l_status}=   Run Keyword and Return Status
77    ...   Verify Ping and REST Authentication
78    Run Keyword If  '${l_status}' == '${False}'
79    ...   Fail  msg=System not in ideal state to continue [ERROR]
80
81
82Wait For BMC Standby
83    [Documentation]   Wait Until BMC standby post BMC reboot
84
85    @{states}=   Create List   BMC_READY   HOST_POWERED_OFF
86    Wait Until Keyword Succeeds
87    ...    10 min   10 sec   Verify BMC State   ${states}
88
89
90Get BMC State and Expect Standby
91    [Documentation]   Get BMC state and should be at standby
92
93    @{states}=     Create List   BMC_READY   HOST_POWERED_OFF
94    ${bmc_state}=  Get BMC State Deprecated
95    Should Contain  ${states}   ${bmc_state}
96
97
98Update Policy Setting
99    [Documentation]   Update the given restore policy
100    [Arguments]   ${policy}
101
102    ${valueDict}=     create dictionary  data=${policy}
103    Write Attribute    ${HOST_SETTING}    power_policy   data=${valueDict}
104    ${currentPolicy}=  Read Attribute     ${HOST_SETTING}   power_policy
105    Should Be Equal    ${currentPolicy}   ${policy}
106
107
108Trigger Warm Reset via Reboot
109    [Documentation]    Execute reboot command on the remote BMC and
110    ...                returns immediately. This keyword "Start Command"
111    ...                returns nothing and does not wait for the command
112    ...                execution to be finished.
113    Open Connection And Log In
114
115    Start Command   /sbin/reboot
116
117
118Powercycle System Via PDU
119    [Documentation]   AC cycle the system via PDU
120
121    Validate Parameters
122    PDU Power Cycle
123    Check If BMC is Up   5 min    10 sec
124
125
126Validate Parameters
127    Should Not Be Empty   ${PDU_IP}
128    Should Not Be Empty   ${PDU_TYPE}
129    Should Not Be Empty   ${PDU_SLOT_NO}
130    Should Not Be Empty   ${PDU_USERNAME}
131    Should Not Be Empty   ${PDU_PASSWORD}
132