| #!/usr/bin/env python | 
 |  | 
 | r""" | 
 | A python companion file for ipmi_client.robot. | 
 | """ | 
 |  | 
 | import gen_print as gp | 
 | import gen_cmd as gc | 
 | from robot.libraries.BuiltIn import BuiltIn | 
 |  | 
 |  | 
 | def build_ipmi_ext_cmd(ipmi_cipher_level=None, quiet=None): | 
 |     r""" | 
 |     Build the global IPMI_EXT_CMD variable. | 
 |  | 
 |     If global variable IPMI_EXT_CMD already has a value, this keyword will | 
 |     simply return without taking any action with the following exception: | 
 |  | 
 |     If ipmi_cipher_level is is anything but None, this function will continue | 
 |     on and re-build the IPMI_EXT_CMD variable. | 
 |  | 
 |     This keyword is designed for use by keywords which use the IPMI_EXT_CMD | 
 |     variable (e.g. 'Run External IPMI Raw Command').  This keyword is | 
 |     warranted because the ipmitool program may or may not accept the -U (i.e. | 
 |     username) parameter depending on the version of code loaded on the BMC. | 
 |     This keyword will determine whether the "-U" parameter should be used and | 
 |     create IPMI_EXT_CMD accordingly. | 
 |  | 
 |     Furthermore, this keyword will run the command to create the 'root' IPMI | 
 |     username. | 
 |  | 
 |     Description of argument(s): | 
 |     # ipmi_cipher_level             IPMI cipher level value | 
 |     #                               (e.g. "1", "2", "3", "15", "16", "17"). | 
 |     # quiet                         Indicates whether this keyword should run | 
 |     #                               without any output to the console. | 
 |     """ | 
 |  | 
 |     ipmi_ext_cmd = BuiltIn().get_variable_value("${IPMI_EXT_CMD}", "") | 
 |     if ipmi_ext_cmd != "" and not ipmi_cipher_level: | 
 |         return | 
 |  | 
 |     quiet = int(gp.get_var_value(quiet, 0)) | 
 |     openbmc_host = BuiltIn().get_variable_value("${OPENBMC_HOST}") | 
 |     ipmi_username = BuiltIn().get_variable_value("${IPMI_USERNAME}", "root") | 
 |     ipmi_password = BuiltIn().get_variable_value("${IPMI_PASSWORD}", | 
 |                                                  "0penBmc") | 
 |     if not ipmi_cipher_level: | 
 |         ipmi_cipher_level = BuiltIn().get_variable_value("${IPMI_CIPHER_LEVEL}", | 
 |                                                          "3") | 
 |  | 
 |     old_ipmi_ext_cmd = "ipmitool -I lanplus -C " + str(ipmi_cipher_level)\ | 
 |         + " -P " + ipmi_password | 
 |     new_ipmi_ext_cmd = "ipmitool -I lanplus -C " + str(ipmi_cipher_level)\ | 
 |         + " -U " + ipmi_username + " -P " + ipmi_password | 
 |     # Use a basic ipmitool command to help us determine whether the BMC will | 
 |     # accept the -U parm. | 
 |     ipmi_cmd = "power status" | 
 |     ipmi_cmd_suffix = " -H " + openbmc_host + " " + ipmi_cmd | 
 |     print_output = 0 | 
 |     cmd_buf = new_ipmi_ext_cmd + ipmi_cmd_suffix | 
 |     new_rc, stdout = gc.shell_cmd(cmd_buf, | 
 |                                   print_output=print_output, | 
 |                                   show_err=0, | 
 |                                   ignore_err=1) | 
 |     gp.qprint_varx("rc", new_rc, 1) | 
 |     if new_rc == 0: | 
 |         ipmi_ext_cmd = new_ipmi_ext_cmd | 
 |         BuiltIn().set_global_variable("${IPMI_EXT_CMD}", ipmi_ext_cmd) | 
 |         return | 
 |  | 
 |     cmd_buf = old_ipmi_ext_cmd + ipmi_cmd_suffix | 
 |     old_rc, stdout = gc.shell_cmd(cmd_buf, | 
 |                                   print_output=print_output, | 
 |                                   show_err=0, | 
 |                                   ignore_err=1) | 
 |     gp.qprint_varx("rc", old_rc, 1) | 
 |  | 
 |     if old_rc == 0: | 
 |         ipmi_ext_cmd = old_ipmi_ext_cmd | 
 |         BuiltIn().set_global_variable("${IPMI_EXT_CMD}", ipmi_ext_cmd) | 
 |         return | 
 |  | 
 |     message = "Unable to run ipmitool, (with or without the '-U' parm)." | 
 |     BuiltIn().fail(message) | 
 |  | 
 |  | 
 | build_ipmi_ext_cmd() |