| #!/usr/bin/env python | 
 |  | 
 | r""" | 
 | This module is the python counterpart to poweroffs.robot.  It provides | 
 | functions for powering off an open bmc machine. | 
 | """ | 
 |  | 
 | import gen_robot_print as grp | 
 | import state as state_mod | 
 | import gen_robot_utils as gru | 
 |  | 
 | from robot.libraries.BuiltIn import BuiltIn | 
 |  | 
 | # We need utils.robot to get keyword "Initiate Power Off". | 
 | gru.my_import_resource("utils.robot") | 
 |  | 
 |  | 
 | ############################################################################### | 
 | def bmc_power_off(): | 
 |  | 
 |     r""" | 
 |     Power the Open BMC machine off and monitor status to verify. | 
 |     """ | 
 |  | 
 |     grp.rprint_timen("Refreshing state data.") | 
 |     state = state_mod.get_state() | 
 |     grp.rprint_var(state) | 
 |  | 
 |     match_state = state_mod.anchor_state(state) | 
 |  | 
 |     grp.rprintn() | 
 |     cmd_buf = ["Initiate Power Off"] | 
 |     grp.rpissuing_keyword(cmd_buf) | 
 |     power = BuiltIn().run_keyword(*cmd_buf) | 
 |  | 
 |     state_change_timeout = BuiltIn().get_variable_value( | 
 |         "${STATE_CHANGE_TIMEOUT}", default="1 min") | 
 |  | 
 |     # Wait for the state to change in any way. | 
 |     state_mod.wait_state(match_state, wait_time=state_change_timeout, | 
 |                          interval="3 seconds", invert=1) | 
 |  | 
 |     if state_mod.OBMC_STATES_VERSION == 0: | 
 |         cmd_buf = ["Create Dictionary", "power=${0}", | 
 |                    "bmc=HOST_POWERED_OFF", "boot_progress=Off"] | 
 |     else: | 
 |         # TODO: Add back boot_progress when ipmi is enabled on Witherspoon. | 
 |         cmd_buf = ["Create Dictionary", "chassis=Off", | 
 |                    "bmc=Ready", | 
 |                    #  "boot_progress=Off", | 
 |                    "host=Off"] | 
 |     grp.rdpissuing_keyword(cmd_buf) | 
 |     final_state = BuiltIn().run_keyword(*cmd_buf) | 
 |  | 
 |     final_state = state_mod.anchor_state(final_state) | 
 |  | 
 |     grp.rprintn() | 
 |     power_off_timeout = BuiltIn().get_variable_value( | 
 |         "${POWER_OFF_TIMEOUT}", default="2 mins") | 
 |     state_mod.wait_state(final_state, wait_time=power_off_timeout, | 
 |                          interval="3 seconds") | 
 |  | 
 | ############################################################################### |