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