xref: /openbmc/openbmc-test-automation/bin/plug_ins/Auto_reboot/cp_master (revision 80caea09be1cae6a948636de10c6d81dc2ff8647)
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"""
450a3bdb4cSMichael Walsh    Execute whenever the program ends normally or with the signals that we
460a3bdb4cSMichael Walsh    catch (i.e. TERM, INT).
470a3bdb4cSMichael Walsh    """
480a3bdb4cSMichael Walsh
490a3bdb4cSMichael Walsh    dprint_executing()
500a3bdb4cSMichael Walsh    dprint_var(signal_number)
510a3bdb4cSMichael Walsh
520a3bdb4cSMichael Walsh    # Your cleanup code here.
530a3bdb4cSMichael Walsh
540a3bdb4cSMichael Walsh    qprint_pgm_footer()
550a3bdb4cSMichael Walsh
560a3bdb4cSMichael Walsh
570a3bdb4cSMichael Walshdef signal_handler(signal_number,
580a3bdb4cSMichael Walsh                   frame):
590a3bdb4cSMichael Walsh    r"""
600a3bdb4cSMichael Walsh    Handle signals.  Without a function to catch a SIGTERM or SIGINT, our
610a3bdb4cSMichael Walsh    program would terminate immediately with return code 143 and without
620a3bdb4cSMichael Walsh    calling our exit_function.
630a3bdb4cSMichael Walsh    """
640a3bdb4cSMichael Walsh
650a3bdb4cSMichael Walsh    # Our convention is to set up exit_function with atexit.register() so
660a3bdb4cSMichael Walsh    # there is no need to explicitly call exit_function from here.
670a3bdb4cSMichael Walsh
680a3bdb4cSMichael Walsh    dprint_executing()
690a3bdb4cSMichael Walsh
700a3bdb4cSMichael Walsh    # Calling exit prevents us from returning to the code that was running
710a3bdb4cSMichael Walsh    # when we received the signal.
720a3bdb4cSMichael Walsh    exit(0)
730a3bdb4cSMichael Walsh
740a3bdb4cSMichael Walsh
750a3bdb4cSMichael Walshdef validate_parms():
760a3bdb4cSMichael Walsh
770a3bdb4cSMichael Walsh    r"""
780a3bdb4cSMichael Walsh    Validate program parameters, etc.  Return True or False (i.e. pass/fail)
790a3bdb4cSMichael Walsh    accordingly.
800a3bdb4cSMichael Walsh    """
810a3bdb4cSMichael Walsh
820a3bdb4cSMichael Walsh    get_plug_vars()
830a3bdb4cSMichael Walsh
840a3bdb4cSMichael Walsh    valid_value(AUTOBOOT_OPENBMC_HOST, ["", None])
850a3bdb4cSMichael Walsh    global AUTO_REBOOT_DISABLE
860a3bdb4cSMichael Walsh    if pgm_name == "cp_cleanup":
870a3bdb4cSMichael Walsh        AUTO_REBOOT_DISABLE = 0
880a3bdb4cSMichael Walsh    else:
890a3bdb4cSMichael Walsh        valid_value(AUTO_REBOOT_DISABLE, valid_values=["0", "1"])
900a3bdb4cSMichael Walsh        AUTO_REBOOT_DISABLE = int(AUTO_REBOOT_DISABLE)
910a3bdb4cSMichael Walsh
920a3bdb4cSMichael Walsh    gen_post_validation(exit_function, signal_handler)
930a3bdb4cSMichael Walsh
940a3bdb4cSMichael Walsh
950a3bdb4cSMichael Walshdef main():
960a3bdb4cSMichael Walsh
970a3bdb4cSMichael Walsh    gen_get_options(parser, stock_list)
980a3bdb4cSMichael Walsh
990a3bdb4cSMichael Walsh    validate_parms()
1000a3bdb4cSMichael Walsh
1010a3bdb4cSMichael Walsh    qprint_pgm_header()
1020a3bdb4cSMichael Walsh
103*80caea09SMichael Walsh    print_plug_in_header()
104*80caea09SMichael Walsh
105*80caea09SMichael Walsh    if pgm_name == "cp_setup" or pgm_name == "cp_cleanup":
106*80caea09SMichael Walsh        exit_not_master()
1070a3bdb4cSMichael Walsh
1080a3bdb4cSMichael Walsh    init_robot_out_parms(get_plug_in_package_name() + "." + pgm_name + ".")
1090a3bdb4cSMichael Walsh
1100a3bdb4cSMichael Walsh    lib_file_path = init_robot_file_path("lib/utils.robot")
1110a3bdb4cSMichael Walsh
1120a3bdb4cSMichael Walsh    keyword_string = "Set Auto Reboot  ${%i}" % AUTO_REBOOT_DISABLE
1130a3bdb4cSMichael Walsh
1140a3bdb4cSMichael Walsh    cmd_buf = create_robot_cmd_string("extended/run_keyword.robot",
1150a3bdb4cSMichael Walsh                                      OPENBMC_HOST, REST_USERNAME,
1160a3bdb4cSMichael Walsh                                      REST_PASSWORD, keyword_string,
1170a3bdb4cSMichael Walsh                                      lib_file_path, quiet, test_mode, debug,
1180a3bdb4cSMichael Walsh                                      outputdir, output, log, report)
1190a3bdb4cSMichael Walsh    if not robot_cmd_fnc(cmd_buf):
1200a3bdb4cSMichael Walsh        print_error_report("Robot command execution failed.")
1210a3bdb4cSMichael Walsh        exit(1)
1220a3bdb4cSMichael Walsh
1230a3bdb4cSMichael Walsh
1240a3bdb4cSMichael Walshmain()
125