xref: /openbmc/openbmc-test-automation/bin/plug_ins/Auto_reboot/cp_master (revision 046fe223dbb6a5bfc97ea3389c88596b6ba6a28a)
10a3bdb4cSMichael Walsh#!/usr/bin/env python
20a3bdb4cSMichael Walsh
30a3bdb4cSMichael Walshr"""
40a3bdb4cSMichael WalshSet the auto_boot policy according to the caller's wishes.
50a3bdb4cSMichael Walsh"""
60a3bdb4cSMichael Walsh
70a3bdb4cSMichael Walshimport os
80a3bdb4cSMichael Walshimport sys
90a3bdb4cSMichael Walsh
100a3bdb4cSMichael Walshsave_path_0 = sys.path[0]
110a3bdb4cSMichael Walshdel sys.path[0]
120a3bdb4cSMichael Walsh
130a3bdb4cSMichael Walshfrom gen_print import *
140a3bdb4cSMichael Walshfrom gen_valid import *
150a3bdb4cSMichael Walshfrom gen_arg import *
160a3bdb4cSMichael Walshfrom gen_misc import *
170a3bdb4cSMichael Walshfrom gen_cmd import *
180a3bdb4cSMichael Walshfrom gen_plug_in_utils import *
190a3bdb4cSMichael Walshfrom gen_call_robot import *
200a3bdb4cSMichael Walsh
210a3bdb4cSMichael Walsh# Restore sys.path[0].
220a3bdb4cSMichael Walshsys.path.insert(0, save_path_0)
230a3bdb4cSMichael Walsh
240a3bdb4cSMichael Walsh# Set exit_on_error for gen_valid functions.
250a3bdb4cSMichael Walshset_exit_on_error(True)
260a3bdb4cSMichael Walsh
270a3bdb4cSMichael Walshparser = argparse.ArgumentParser(
280a3bdb4cSMichael Walsh    usage='%(prog)s [OPTIONS]',
290a3bdb4cSMichael Walsh    description="%(prog)s will set the auto_boot policy according to the"
300a3bdb4cSMichael Walsh        + " user's wishes.",
310a3bdb4cSMichael Walsh    formatter_class=argparse.RawTextHelpFormatter,
320a3bdb4cSMichael Walsh    prefix_chars='-+')
330a3bdb4cSMichael Walsh
340a3bdb4cSMichael Walsh
350a3bdb4cSMichael Walsh# Populate stock_list with options we want.
360a3bdb4cSMichael Walshstock_list = [("test_mode", get_plug_default("test_mode", 0)),
370a3bdb4cSMichael Walsh              ("quiet", get_plug_default("quiet", 0)),
380a3bdb4cSMichael Walsh              ("debug", get_plug_default("debug", 0))]
390a3bdb4cSMichael Walsh
400a3bdb4cSMichael WalshAUTO_REBOOT_DISABLE = "1"
410a3bdb4cSMichael Walsh
420a3bdb4cSMichael Walshdef exit_function(signal_number=0,
430a3bdb4cSMichael Walsh                  frame=None):
440a3bdb4cSMichael Walsh    r"""
45318a4feeSMichael Walsh    Execute whenever the program ends normally or with the signals that we catch (i.e. TERM, INT).
460a3bdb4cSMichael Walsh    """
470a3bdb4cSMichael Walsh
480a3bdb4cSMichael Walsh    dprint_executing()
490a3bdb4cSMichael Walsh    dprint_var(signal_number)
500a3bdb4cSMichael Walsh
510a3bdb4cSMichael Walsh    # Your cleanup code here.
520a3bdb4cSMichael Walsh
530a3bdb4cSMichael Walsh    qprint_pgm_footer()
540a3bdb4cSMichael Walsh
550a3bdb4cSMichael Walsh
560a3bdb4cSMichael Walshdef signal_handler(signal_number,
570a3bdb4cSMichael Walsh                   frame):
580a3bdb4cSMichael Walsh    r"""
59318a4feeSMichael Walsh    Handle signals.  Without a function to catch a SIGTERM or SIGINT, our program would terminate immediately
60318a4feeSMichael Walsh    with return code 143 and without calling our exit_function.
610a3bdb4cSMichael Walsh    """
620a3bdb4cSMichael Walsh
63318a4feeSMichael Walsh    # Our convention is to set up exit_function with atexit.register() so there is no need to explicitly
64318a4feeSMichael Walsh    # call exit_function from here.
650a3bdb4cSMichael Walsh
660a3bdb4cSMichael Walsh    dprint_executing()
670a3bdb4cSMichael Walsh
68318a4feeSMichael Walsh    # Calling exit prevents us from returning to the code that was running when we received the signal.
690a3bdb4cSMichael Walsh    exit(0)
700a3bdb4cSMichael Walsh
710a3bdb4cSMichael Walsh
720a3bdb4cSMichael Walshdef validate_parms():
730a3bdb4cSMichael Walsh
740a3bdb4cSMichael Walsh    r"""
75318a4feeSMichael Walsh    Validate program parameters, etc.  Return True or False (i.e. pass/fail) accordingly.
760a3bdb4cSMichael Walsh    """
770a3bdb4cSMichael Walsh
780a3bdb4cSMichael Walsh    get_plug_vars()
790a3bdb4cSMichael Walsh
802ea965ceSMichael Walsh    valid_value(AUTOBOOT_OPENBMC_HOST)
810a3bdb4cSMichael Walsh    global AUTO_REBOOT_DISABLE
820a3bdb4cSMichael Walsh    if pgm_name == "cp_cleanup":
830a3bdb4cSMichael Walsh        AUTO_REBOOT_DISABLE = 0
840a3bdb4cSMichael Walsh    else:
850a3bdb4cSMichael Walsh        valid_value(AUTO_REBOOT_DISABLE, valid_values=["0", "1"])
860a3bdb4cSMichael Walsh        AUTO_REBOOT_DISABLE = int(AUTO_REBOOT_DISABLE)
870a3bdb4cSMichael Walsh
880a3bdb4cSMichael Walsh    gen_post_validation(exit_function, signal_handler)
890a3bdb4cSMichael Walsh
900a3bdb4cSMichael Walsh
910a3bdb4cSMichael Walshdef main():
920a3bdb4cSMichael Walsh
930a3bdb4cSMichael Walsh    gen_get_options(parser, stock_list)
940a3bdb4cSMichael Walsh
950a3bdb4cSMichael Walsh    validate_parms()
960a3bdb4cSMichael Walsh
970a3bdb4cSMichael Walsh    qprint_pgm_header()
980a3bdb4cSMichael Walsh
9980caea09SMichael Walsh    print_plug_in_header()
10080caea09SMichael Walsh
10180caea09SMichael Walsh    if pgm_name == "cp_setup" or pgm_name == "cp_cleanup":
10280caea09SMichael Walsh        exit_not_master()
1030a3bdb4cSMichael Walsh
1040a3bdb4cSMichael Walsh    init_robot_out_parms(get_plug_in_package_name() + "." + pgm_name + ".")
1050a3bdb4cSMichael Walsh
1060a3bdb4cSMichael Walsh    lib_file_path = init_robot_file_path("lib/utils.robot")
1070a3bdb4cSMichael Walsh
108318a4feeSMichael Walsh    enable_auto_reboot = 1 - AUTO_REBOOT_DISABLE
109318a4feeSMichael Walsh    print_var(enable_auto_reboot)
110318a4feeSMichael Walsh    keyword_string = "Set Auto Reboot  ${%i}" % enable_auto_reboot
1110a3bdb4cSMichael Walsh
112*046fe223SMichael Walsh    cmd_buf = create_robot_cmd_string("extended/run_keyword.robot", OPENBMC_HOST, SSH_PORT, HTTPS_PORT,
113*046fe223SMichael Walsh                                      REST_USERNAME, REST_PASSWORD, keyword_string, lib_file_path, quiet,
114*046fe223SMichael Walsh                                      test_mode, debug, outputdir, output, log, report)
1150a3bdb4cSMichael Walsh    if not robot_cmd_fnc(cmd_buf):
1160a3bdb4cSMichael Walsh        print_error_report("Robot command execution failed.")
1170a3bdb4cSMichael Walsh        exit(1)
1180a3bdb4cSMichael Walsh
1190a3bdb4cSMichael Walsh
1200a3bdb4cSMichael Walshmain()
121