xref: /openbmc/openbmc-test-automation/bin/plug_ins/Auto_reboot/cp_master (revision 0a3bdb4c44167b307d4b829b949946aeafede22e)
1*0a3bdb4cSMichael Walsh#!/usr/bin/env python
2*0a3bdb4cSMichael Walsh
3*0a3bdb4cSMichael Walshr"""
4*0a3bdb4cSMichael WalshSet the auto_boot policy according to the caller's wishes.
5*0a3bdb4cSMichael Walsh"""
6*0a3bdb4cSMichael Walsh
7*0a3bdb4cSMichael Walshimport os
8*0a3bdb4cSMichael Walshimport sys
9*0a3bdb4cSMichael Walsh
10*0a3bdb4cSMichael Walshsave_path_0 = sys.path[0]
11*0a3bdb4cSMichael Walshdel sys.path[0]
12*0a3bdb4cSMichael Walsh
13*0a3bdb4cSMichael Walshfrom gen_print import *
14*0a3bdb4cSMichael Walshfrom gen_valid import *
15*0a3bdb4cSMichael Walshfrom gen_arg import *
16*0a3bdb4cSMichael Walshfrom gen_misc import *
17*0a3bdb4cSMichael Walshfrom gen_cmd import *
18*0a3bdb4cSMichael Walshfrom gen_plug_in_utils import *
19*0a3bdb4cSMichael Walshfrom gen_call_robot import *
20*0a3bdb4cSMichael Walsh
21*0a3bdb4cSMichael Walsh# Restore sys.path[0].
22*0a3bdb4cSMichael Walshsys.path.insert(0, save_path_0)
23*0a3bdb4cSMichael Walsh
24*0a3bdb4cSMichael Walsh# Set exit_on_error for gen_valid functions.
25*0a3bdb4cSMichael Walshset_exit_on_error(True)
26*0a3bdb4cSMichael Walsh
27*0a3bdb4cSMichael Walshparser = argparse.ArgumentParser(
28*0a3bdb4cSMichael Walsh    usage='%(prog)s [OPTIONS]',
29*0a3bdb4cSMichael Walsh    description="%(prog)s will set the auto_boot policy according to the"
30*0a3bdb4cSMichael Walsh        + " user's wishes.",
31*0a3bdb4cSMichael Walsh    formatter_class=argparse.RawTextHelpFormatter,
32*0a3bdb4cSMichael Walsh    prefix_chars='-+')
33*0a3bdb4cSMichael Walsh
34*0a3bdb4cSMichael Walsh
35*0a3bdb4cSMichael Walsh# Populate stock_list with options we want.
36*0a3bdb4cSMichael Walshstock_list = [("test_mode", get_plug_default("test_mode", 0)),
37*0a3bdb4cSMichael Walsh              ("quiet", get_plug_default("quiet", 0)),
38*0a3bdb4cSMichael Walsh              ("debug", get_plug_default("debug", 0))]
39*0a3bdb4cSMichael Walsh
40*0a3bdb4cSMichael WalshAUTO_REBOOT_DISABLE = "1"
41*0a3bdb4cSMichael Walsh
42*0a3bdb4cSMichael Walshdef exit_function(signal_number=0,
43*0a3bdb4cSMichael Walsh                  frame=None):
44*0a3bdb4cSMichael Walsh    r"""
45*0a3bdb4cSMichael Walsh    Execute whenever the program ends normally or with the signals that we
46*0a3bdb4cSMichael Walsh    catch (i.e. TERM, INT).
47*0a3bdb4cSMichael Walsh    """
48*0a3bdb4cSMichael Walsh
49*0a3bdb4cSMichael Walsh    dprint_executing()
50*0a3bdb4cSMichael Walsh    dprint_var(signal_number)
51*0a3bdb4cSMichael Walsh
52*0a3bdb4cSMichael Walsh    # Your cleanup code here.
53*0a3bdb4cSMichael Walsh
54*0a3bdb4cSMichael Walsh    qprint_pgm_footer()
55*0a3bdb4cSMichael Walsh
56*0a3bdb4cSMichael Walsh
57*0a3bdb4cSMichael Walshdef signal_handler(signal_number,
58*0a3bdb4cSMichael Walsh                   frame):
59*0a3bdb4cSMichael Walsh    r"""
60*0a3bdb4cSMichael Walsh    Handle signals.  Without a function to catch a SIGTERM or SIGINT, our
61*0a3bdb4cSMichael Walsh    program would terminate immediately with return code 143 and without
62*0a3bdb4cSMichael Walsh    calling our exit_function.
63*0a3bdb4cSMichael Walsh    """
64*0a3bdb4cSMichael Walsh
65*0a3bdb4cSMichael Walsh    # Our convention is to set up exit_function with atexit.register() so
66*0a3bdb4cSMichael Walsh    # there is no need to explicitly call exit_function from here.
67*0a3bdb4cSMichael Walsh
68*0a3bdb4cSMichael Walsh    dprint_executing()
69*0a3bdb4cSMichael Walsh
70*0a3bdb4cSMichael Walsh    # Calling exit prevents us from returning to the code that was running
71*0a3bdb4cSMichael Walsh    # when we received the signal.
72*0a3bdb4cSMichael Walsh    exit(0)
73*0a3bdb4cSMichael Walsh
74*0a3bdb4cSMichael Walsh
75*0a3bdb4cSMichael Walshdef validate_parms():
76*0a3bdb4cSMichael Walsh
77*0a3bdb4cSMichael Walsh    r"""
78*0a3bdb4cSMichael Walsh    Validate program parameters, etc.  Return True or False (i.e. pass/fail)
79*0a3bdb4cSMichael Walsh    accordingly.
80*0a3bdb4cSMichael Walsh    """
81*0a3bdb4cSMichael Walsh
82*0a3bdb4cSMichael Walsh    get_plug_vars()
83*0a3bdb4cSMichael Walsh
84*0a3bdb4cSMichael Walsh    valid_value(AUTOBOOT_OPENBMC_HOST, ["", None])
85*0a3bdb4cSMichael Walsh    global AUTO_REBOOT_DISABLE
86*0a3bdb4cSMichael Walsh    if pgm_name == "cp_cleanup":
87*0a3bdb4cSMichael Walsh        AUTO_REBOOT_DISABLE = 0
88*0a3bdb4cSMichael Walsh    else:
89*0a3bdb4cSMichael Walsh        valid_value(AUTO_REBOOT_DISABLE, valid_values=["0", "1"])
90*0a3bdb4cSMichael Walsh        AUTO_REBOOT_DISABLE = int(AUTO_REBOOT_DISABLE)
91*0a3bdb4cSMichael Walsh
92*0a3bdb4cSMichael Walsh    gen_post_validation(exit_function, signal_handler)
93*0a3bdb4cSMichael Walsh
94*0a3bdb4cSMichael Walsh
95*0a3bdb4cSMichael Walshdef main():
96*0a3bdb4cSMichael Walsh
97*0a3bdb4cSMichael Walsh    gen_get_options(parser, stock_list)
98*0a3bdb4cSMichael Walsh
99*0a3bdb4cSMichael Walsh    validate_parms()
100*0a3bdb4cSMichael Walsh
101*0a3bdb4cSMichael Walsh    qprint_pgm_header()
102*0a3bdb4cSMichael Walsh
103*0a3bdb4cSMichael Walsh    dprint_plug_vars()
104*0a3bdb4cSMichael Walsh
105*0a3bdb4cSMichael Walsh    init_robot_out_parms(get_plug_in_package_name() + "." + pgm_name + ".")
106*0a3bdb4cSMichael Walsh
107*0a3bdb4cSMichael Walsh    lib_file_path = init_robot_file_path("lib/utils.robot")
108*0a3bdb4cSMichael Walsh
109*0a3bdb4cSMichael Walsh    keyword_string = "Set Auto Reboot  ${%i}" % AUTO_REBOOT_DISABLE
110*0a3bdb4cSMichael Walsh
111*0a3bdb4cSMichael Walsh    cmd_buf = create_robot_cmd_string("extended/run_keyword.robot",
112*0a3bdb4cSMichael Walsh                                      OPENBMC_HOST, REST_USERNAME,
113*0a3bdb4cSMichael Walsh                                      REST_PASSWORD, keyword_string,
114*0a3bdb4cSMichael Walsh                                      lib_file_path, quiet, test_mode, debug,
115*0a3bdb4cSMichael Walsh                                      outputdir, output, log, report)
116*0a3bdb4cSMichael Walsh    if not robot_cmd_fnc(cmd_buf):
117*0a3bdb4cSMichael Walsh        print_error_report("Robot command execution failed.")
118*0a3bdb4cSMichael Walsh        exit(1)
119*0a3bdb4cSMichael Walsh
120*0a3bdb4cSMichael Walsh
121*0a3bdb4cSMichael Walshmain()
122