|  | *** Settings *** | 
|  | Documentation  Contains all keywords and supporting keywords to do various reboots. | 
|  |  | 
|  | Resource    ../resource.txt | 
|  | Resource    ../utils.robot | 
|  | Resource    ../connection_client.robot | 
|  | Library     DateTime | 
|  |  | 
|  | *** Keywords *** | 
|  | BMC Reboot | 
|  | [Documentation]  Gets the uptime of the BMC, then reboots the BMC. If an OS_HOST | 
|  | ...  is given, will also attempt to get the uptime of the OS Host and verify that | 
|  | ...  the host stayed active during the reboot. | 
|  |  | 
|  | &{bmc_connection_args}=  Create Dictionary  alias=bmc_connection | 
|  | ${OS_exists}=  Set Variable If  '${OS_HOST}' != '${EMPTY}'  ${True} | 
|  | ...                             '${OS_HOST}' == '${EMPTY}'  ${False} | 
|  |  | 
|  | &{os_connection_args}=  Run Keyword If  ${OS_exists} == ${True} | 
|  | ...  Create Dictionary  host=${OS_HOST}  alias=os_connection | 
|  |  | 
|  | Open Connection and Log In  &{bmc_connection_args} | 
|  |  | 
|  | ${bmc_start_uptime}=  Get Uptime In Seconds | 
|  |  | 
|  | ${conn_rc}=  Run Keyword and Return Status  Run Keyword If  ${OS_exists} == ${True} | 
|  | ...  Open Connection and Log In  ${OS_USERNAME}  ${OS_PASSWORD}  &{os_connection_args} | 
|  |  | 
|  | ${OS_exists}=  Set Variable If  ${conn_rc} == False  ${False} | 
|  |  | 
|  | ${ping_rc}=  Run Keyword and Return Status  Ping Host  ${OS_HOST} | 
|  | ${OS_exists}=  Set Variable If  ${ping_rc} == ${False}  ${False} | 
|  |  | 
|  | ${os_start_uptime}=  Run Keyword If  ${OS_exists} == ${True}   Get Uptime In Seconds | 
|  |  | 
|  | Validate or Open Connection  bmc_connection | 
|  |  | 
|  | Reboot BMC | 
|  | Check If BMC Is Up | 
|  |  | 
|  | Close All Connections | 
|  |  | 
|  | Open Connection and Log In  &{bmc_connection_args} | 
|  |  | 
|  | ${bmc_end_uptime}=  Get Uptime In Seconds | 
|  | Should Be True  ${bmc_end_uptime} < ${bmc_start_uptime} | 
|  |  | 
|  | Run Keyword If  ${OS_exists} == ${True} | 
|  | ...  Open Connection and Log In  ${OS_USERNAME}  ${OS_PASSWORD}  &{os_connection_args} | 
|  |  | 
|  | ${os_end_uptime}=  Run Keyword If  ${OS_exists} == ${True}  Get Uptime In Seconds | 
|  |  | 
|  | Run Keyword If  ${OS_exists} == ${True} | 
|  | ...  Should Be True  ${os_end_uptime} > ${os_start_uptime} | 
|  |  | 
|  | Close All Connections | 
|  |  | 
|  | Get Uptime In Seconds | 
|  | ${uptime_string}  ${stderr}  ${rc}=  Execute Command  cat /proc/uptime | 
|  | ...  return_stderr=True  return_rc=True | 
|  |  | 
|  | Should Be Empty  ${stderr} | 
|  | Should Be Equal  ${rc}  ${0} | 
|  |  | 
|  | ${uptime}  ${idle_time}=  Split String  ${uptime_string}  ${SPACE} | 
|  |  | 
|  | [Return]  ${uptime} | 
|  |  | 
|  | Reboot BMC | 
|  | Start Command  /sbin/reboot |