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