blob: f3394d75ae46d3e7689c5fb98058046e58f4f9ac [file] [log] [blame]
Michael Walsh19621ba2018-12-03 17:16:02 -06001#!/usr/bin/env python
2
3r"""
4A python companion file for ipmi_client.robot.
5"""
6
7import gen_print as gp
8import gen_cmd as gc
9from robot.libraries.BuiltIn import BuiltIn
10
11
George Keishingf4027652019-01-10 23:58:29 -060012def build_ipmi_ext_cmd(ipmi_cipher_level=None, quiet=None):
Michael Walsh19621ba2018-12-03 17:16:02 -060013 r"""
14 Build the global IPMI_EXT_CMD variable.
15
16 If global variable IPMI_EXT_CMD already has a value, this keyword will
George Keishingf4027652019-01-10 23:58:29 -060017 simply return without taking any action with the following exception:
18
19 If ipmi_cipher_level is is anything but None, this function will continue
20 on and re-build the IPMI_EXT_CMD variable.
Michael Walsh19621ba2018-12-03 17:16:02 -060021
22 This keyword is designed for use by keywords which use the IPMI_EXT_CMD
23 variable (e.g. 'Run External IPMI Raw Command'). This keyword is
24 warranted because the ipmitool program may or may not accept the -U (i.e.
25 username) parameter depending on the version of code loaded on the BMC.
26 This keyword will determine whether the "-U" parameter should be used and
27 create IPMI_EXT_CMD accordingly.
28
29 Furthermore, this keyword will run the command to create the 'root' IPMI
30 username.
31
32 Description of argument(s):
George Keishingf4027652019-01-10 23:58:29 -060033 # ipmi_cipher_level IPMI cipher level value
34 # (e.g. "1", "2", "3", "15", "16", "17").
Michael Walsh19621ba2018-12-03 17:16:02 -060035 # quiet Indicates whether this keyword should run
36 # without any output to the console.
37 """
38
39 ipmi_ext_cmd = BuiltIn().get_variable_value("${IPMI_EXT_CMD}", "")
George Keishingf4027652019-01-10 23:58:29 -060040 if ipmi_ext_cmd != "" and not ipmi_cipher_level:
Michael Walsh19621ba2018-12-03 17:16:02 -060041 return
42
43 quiet = int(gp.get_var_value(quiet, 0))
44 openbmc_host = BuiltIn().get_variable_value("${OPENBMC_HOST}")
45 ipmi_username = BuiltIn().get_variable_value("${IPMI_USERNAME}", "root")
46 ipmi_password = BuiltIn().get_variable_value("${IPMI_PASSWORD}",
47 "0penBmc")
George Keishingf4027652019-01-10 23:58:29 -060048 if not ipmi_cipher_level:
49 ipmi_cipher_level = BuiltIn().get_variable_value("${IPMI_CIPHER_LEVEL}",
50 "3")
Michael Walsh19621ba2018-12-03 17:16:02 -060051
52 old_ipmi_ext_cmd = "ipmitool -I lanplus -C " + str(ipmi_cipher_level)\
53 + " -P " + ipmi_password
54 new_ipmi_ext_cmd = "ipmitool -I lanplus -C " + str(ipmi_cipher_level)\
55 + " -U " + ipmi_username + " -P " + ipmi_password
56 # Use a basic ipmitool command to help us determine whether the BMC will
57 # accept the -U parm.
58 ipmi_cmd = "power status"
59 ipmi_cmd_suffix = " -H " + openbmc_host + " " + ipmi_cmd
60 print_output = 0
61 cmd_buf = new_ipmi_ext_cmd + ipmi_cmd_suffix
62 new_rc, stdout = gc.shell_cmd(cmd_buf,
63 print_output=print_output,
64 show_err=0,
65 ignore_err=1)
66 gp.qprint_varx("rc", new_rc, 1)
67 if new_rc == 0:
68 ipmi_ext_cmd = new_ipmi_ext_cmd
69 BuiltIn().set_global_variable("${IPMI_EXT_CMD}", ipmi_ext_cmd)
70 return
71
72 cmd_buf = old_ipmi_ext_cmd + ipmi_cmd_suffix
73 old_rc, stdout = gc.shell_cmd(cmd_buf,
74 print_output=print_output,
75 show_err=0,
76 ignore_err=1)
77 gp.qprint_varx("rc", old_rc, 1)
78
79 if old_rc == 0:
80 ipmi_ext_cmd = old_ipmi_ext_cmd
81 BuiltIn().set_global_variable("${IPMI_EXT_CMD}", ipmi_ext_cmd)
82 return
83
84 message = "Unable to run ipmitool, (with or without the '-U' parm)."
85 BuiltIn().fail(message)
86
87
88build_ipmi_ext_cmd()