| #!/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() |