blob: b71d1c5f77ee40b8b681e1598539b87a2c438989 [file] [log] [blame]
Chris Austenb29d2e82016-06-07 12:25:35 -05001*** Settings ***
George Keishing4d6c1da2016-07-15 05:51:22 -05002Documentation This module is for IPMI client for copying ipmitool to
Sivas SRRa2dab3c2016-07-25 05:08:18 -05003... openbmc box and execute ipmitool IPMI standard
4... command. IPMI raw command will use dbus-send command
Sandhya Somashekar839a0c22019-01-31 05:05:43 -06005Resource ../lib/resource.robot
George Keishing4d6c1da2016-07-15 05:51:22 -05006Resource ../lib/connection_client.robot
Prashanth Kattiae7c2282017-03-15 07:43:46 -05007Resource ../lib/utils.robot
8Resource ../lib/state_manager.robot
9
Sivas SRRa2dab3c2016-07-25 05:08:18 -050010Library String
Michael Walsh19621ba2018-12-03 17:16:02 -060011Library ipmi_client.py
Sivas SRRa2dab3c2016-07-25 05:08:18 -050012
13*** Variables ***
George Keishingd7f11f72017-01-04 10:58:19 -060014${dbusHostIpmicmd1}= dbus-send --system ${OPENBMC_BASE_URI}HostIpmi/1
15${dbusHostIpmiCmdReceivedMsg}= ${OPENBMC_BASE_DBUS}.HostIpmi.ReceivedMessage
Gunnar Mills59204d22016-12-06 11:05:19 -060016${netfnByte}= ${EMPTY}
George Keishingd7f11f72017-01-04 10:58:19 -060017${cmdByte}= ${EMPTY}
Gunnar Mills59204d22016-12-06 11:05:19 -060018${arrayByte}= array:byte:
Michael Walsha7913892017-04-20 16:29:01 -050019${IPMI_USER_OPTIONS} ${EMPTY}
George Keishing39967eb2018-04-30 11:36:23 -050020${IPMI_INBAND_CMD}= ipmitool -C ${IPMI_CIPHER_LEVEL}
Gunnar Mills59204d22016-12-06 11:05:19 -060021${HOST}= -H
22${RAW}= raw
Chris Austenb29d2e82016-06-07 12:25:35 -050023
24*** Keywords ***
Rahul Maheshwari7a212a02016-09-05 21:17:30 -050025
Chris Austenb29d2e82016-06-07 12:25:35 -050026Run IPMI Command
Michael Walsh3ef2e922019-01-23 10:40:16 -060027 [Documentation] Run the raw IPMI command.
28 [Arguments] ${command} ${fail_on_err}=${1} &{options}
29
30 # Description of argument(s):
31 # command The IPMI command string to be executed
32 # (e.g. "power status").
33 # fail_on_err Fail if the IPMI command execution fails.
34 # options Additional ipmitool command options (e.g.
35 # -C=3, -I=lanplus, etc.). Currently, only
36 # used for external IPMI commands.
37
Prashanth Kattiae7c2282017-03-15 07:43:46 -050038 ${resp}= Run Keyword If '${IPMI_COMMAND}' == 'External'
Michael Walsh3ef2e922019-01-23 10:40:16 -060039 ... Run External IPMI Raw Command ${command} ${fail_on_err} &{options}
Prashanth Kattiae7c2282017-03-15 07:43:46 -050040 ... ELSE IF '${IPMI_COMMAND}' == 'Inband'
Michael Walsh3ef2e922019-01-23 10:40:16 -060041 ... Run Inband IPMI Raw Command ${command}
Prashanth Kattiae7c2282017-03-15 07:43:46 -050042 ... ELSE IF '${IPMI_COMMAND}' == 'Dbus'
Michael Walsh3ef2e922019-01-23 10:40:16 -060043 ... Run Dbus IPMI RAW Command ${command}
44 ... ELSE Fail msg=Invalid IPMI Command type provided: ${IPMI_COMMAND}
Prashanth Kattiae7c2282017-03-15 07:43:46 -050045 [Return] ${resp}
Rahul Maheshwari7a212a02016-09-05 21:17:30 -050046
Michael Walsh3ef2e922019-01-23 10:40:16 -060047
Rahul Maheshwari7a212a02016-09-05 21:17:30 -050048Run IPMI Standard Command
Joy Onyerikwuf4a807b2018-06-20 08:43:54 -050049 [Documentation] Run the standard IPMI command.
Michael Walshd0e58e72019-05-14 11:07:14 -050050 [Arguments] ${command} ${fail_on_err}=${1} ${expected_rc}=${0} &{options}
Rahul Maheshwari20f3bf72018-12-18 04:24:20 -060051
52 # Description of argument(s):
Michael Walsh3ef2e922019-01-23 10:40:16 -060053 # command The IPMI command string to be executed
54 # (e.g. "0x06 0x36").
55 # fail_on_err Fail if the IPMI command execution fails.
Michael Walshd0e58e72019-05-14 11:07:14 -050056 # expected_rc The expected return code from the ipmi
57 # command (e.g. ${0}, ${1}, etc.).
Michael Walsh3ef2e922019-01-23 10:40:16 -060058 # options Additional ipmitool command options (e.g.
59 # -C=3, -I=lanplus, etc.). Currently, only
60 # used for external IPMI commands.
Rahul Maheshwari20f3bf72018-12-18 04:24:20 -060061
Prashanth Kattiae7c2282017-03-15 07:43:46 -050062 ${resp}= Run Keyword If '${IPMI_COMMAND}' == 'External'
Michael Walshd0e58e72019-05-14 11:07:14 -050063 ... Run External IPMI Standard Command ${command} ${fail_on_err} ${expected_rc} &{options}
Prashanth Kattiae7c2282017-03-15 07:43:46 -050064 ... ELSE IF '${IPMI_COMMAND}' == 'Inband'
Michael Walsh3ef2e922019-01-23 10:40:16 -060065 ... Run Inband IPMI Standard Command ${command} ${fail_on_err}
Prashanth Kattiae7c2282017-03-15 07:43:46 -050066 ... ELSE IF '${IPMI_COMMAND}' == 'Dbus'
Michael Walsh3ef2e922019-01-23 10:40:16 -060067 ... Run Dbus IPMI Standard Command ${command}
Prashanth Kattiae7c2282017-03-15 07:43:46 -050068 ... ELSE Fail msg=Invalid IPMI Command type provided : ${IPMI_COMMAND}
Prashanth Kattiae7c2282017-03-15 07:43:46 -050069 [Return] ${resp}
Rahul Maheshwari7a212a02016-09-05 21:17:30 -050070
Michael Walsh3ef2e922019-01-23 10:40:16 -060071
Rahul Maheshwari7a212a02016-09-05 21:17:30 -050072Run Dbus IPMI RAW Command
Joy Onyerikwuf4a807b2018-06-20 08:43:54 -050073 [Documentation] Run the raw IPMI command through dbus.
Michael Walsh3ef2e922019-01-23 10:40:16 -060074 [Arguments] ${command}
75 ${valueinBytes}= Byte Conversion ${command}
Gunnar Mills59204d22016-12-06 11:05:19 -060076 ${cmd}= Catenate ${dbushostipmicmd1} ${dbusHostIpmiCmdReceivedMsg}
77 ${cmd}= Catenate ${cmd} ${valueinBytes}
Sivas SRRa2dab3c2016-07-25 05:08:18 -050078 ${output} ${stderr}= Execute Command ${cmd} return_stderr=True
79 Should Be Empty ${stderr}
Chris Austenb29d2e82016-06-07 12:25:35 -050080 set test variable ${OUTPUT} "${output}"
81
Michael Walsh3ef2e922019-01-23 10:40:16 -060082
Rahul Maheshwari7a212a02016-09-05 21:17:30 -050083Run Dbus IPMI Standard Command
Joy Onyerikwuf4a807b2018-06-20 08:43:54 -050084 [Documentation] Run the standard IPMI command through dbus.
Michael Walsh3ef2e922019-01-23 10:40:16 -060085 [Arguments] ${command}
George Keishing4d6c1da2016-07-15 05:51:22 -050086 Copy ipmitool
Rahul Maheshwari7a212a02016-09-05 21:17:30 -050087 ${stdout} ${stderr} ${output}= Execute Command
Michael Walsh3ef2e922019-01-23 10:40:16 -060088 ... /tmp/ipmitool -I dbus ${command} return_stdout=True
Rahul Maheshwari7a212a02016-09-05 21:17:30 -050089 ... return_stderr= True return_rc=True
Chris Austenb29d2e82016-06-07 12:25:35 -050090 Should Be Equal ${output} ${0} msg=${stderr}
Gunnar Millsc9ea9362016-12-13 16:21:13 -060091 [Return] ${stdout}
Chris Austenb29d2e82016-06-07 12:25:35 -050092
Michael Walsh3ef2e922019-01-23 10:40:16 -060093
Prashanth Kattiae7c2282017-03-15 07:43:46 -050094Run Inband IPMI Raw Command
Joy Onyerikwuf4a807b2018-06-20 08:43:54 -050095 [Documentation] Run the raw IPMI command in-band.
Michael Walsh3ef2e922019-01-23 10:40:16 -060096 [Arguments] ${command} ${os_host}=${OS_HOST} ${os_username}=${OS_USERNAME}
Prashanth Kattiae7c2282017-03-15 07:43:46 -050097 ... ${os_password}=${OS_PASSWORD}
98
Michael Walsh3ef2e922019-01-23 10:40:16 -060099 # Description of argument(s):
100 # command The IPMI command string to be executed
101 # (e.g. "0x06 0x36").
102 # os_host The host name or IP address of the OS Host.
103 # os_username The OS host user name.
104 # os_password The OS host passwrd.
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500105
106 Login To OS Host ${os_host} ${os_username} ${os_password}
107 Check If IPMI Tool Exist
108
Michael Walsh3ef2e922019-01-23 10:40:16 -0600109 ${ipmi_cmd}= Catenate ${IPMI_INBAND_CMD} ${RAW} ${command}
110 Qprint Issuing ${ipmi_cmd}
111 ${stdout} ${stderr}= Execute Command ${ipmi_cmd} return_stderr=True
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500112 Should Be Empty ${stderr} msg=${stdout}
113 [Return] ${stdout}
114
Michael Walsh3ef2e922019-01-23 10:40:16 -0600115
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500116Run Inband IPMI Standard Command
Joy Onyerikwuf4a807b2018-06-20 08:43:54 -0500117 [Documentation] Run the standard IPMI command in-band.
Michael Walsh3ef2e922019-01-23 10:40:16 -0600118 [Arguments] ${command} ${fail_on_err}=${1} ${os_host}=${OS_HOST}
Rahul Maheshwari20f3bf72018-12-18 04:24:20 -0600119 ... ${os_username}=${OS_USERNAME} ${os_password}=${OS_PASSWORD}
Naman Navin Hegde9e8c0d82019-08-11 15:22:44 -0500120 ... ${login_host}=${1}
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500121
Michael Walsh3ef2e922019-01-23 10:40:16 -0600122 # Description of argument(s):
123 # command The IPMI command string to be executed
124 # (e.g. "power status").
125 # os_host The host name or IP address of the OS Host.
126 # os_username The OS host user name.
127 # os_password The OS host passwrd.
Naman Navin Hegde9e8c0d82019-08-11 15:22:44 -0500128 # login_host Indicates that this keyword should login to host OS.
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500129
Naman Navin Hegde9e8c0d82019-08-11 15:22:44 -0500130 Run Keyword If ${login_host} == ${1}
131 ... Login To OS Host ${os_host} ${os_username} ${os_password}
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500132 Check If IPMI Tool Exist
133
Michael Walsh3ef2e922019-01-23 10:40:16 -0600134 ${ipmi_cmd}= Catenate ${IPMI_INBAND_CMD} ${command}
135 Qprint Issuing ${ipmi_cmd}
136 ${stdout} ${stderr}= Execute Command ${ipmi_cmd} return_stderr=True
Rahul Maheshwari20f3bf72018-12-18 04:24:20 -0600137 Return From Keyword If ${fail_on_err} == ${0} ${stderr}
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500138 Should Be Empty ${stderr} msg=${stdout}
139 [Return] ${stdout}
140
Rahul Maheshwari7a212a02016-09-05 21:17:30 -0500141
142Run External IPMI Standard Command
Michael Walsh3ef2e922019-01-23 10:40:16 -0600143 [Documentation] Run the external IPMI standard command.
Michael Walshd0e58e72019-05-14 11:07:14 -0500144 [Arguments] ${command} ${fail_on_err}=${1} ${expected_rc}=${0} &{options}
George Keishing02651f02018-04-11 02:07:16 -0500145
146 # Description of argument(s):
Michael Walsh3ef2e922019-01-23 10:40:16 -0600147 # command The IPMI command string to be executed
148 # (e.g. "power status"). Note that if
149 # ${IPMI_USER_OPTIONS} has a value (e.g.
150 # "-vvv"), it will be pre-pended to this
151 # command string.
152 # fail_on_err Fail if the IPMI command execution fails.
Michael Walshd0e58e72019-05-14 11:07:14 -0500153 # expected_rc The expected return code from the ipmi
154 # command (e.g. ${0}, ${1}, etc.).
Michael Walsh3ef2e922019-01-23 10:40:16 -0600155 # options Additional ipmitool command options (e.g.
156 # -C=3, -I=lanplus, etc.).
Michael Walsha7913892017-04-20 16:29:01 -0500157
Michael Walsh3ef2e922019-01-23 10:40:16 -0600158 ${command_string}= Process IPMI User Options ${command}
159 ${ipmi_cmd}= Create IPMI Ext Command String ${command_string} &{options}
160 Qprint Issuing ${ipmi_cmd}
Rahul Maheshwari04a22042017-05-02 01:54:31 -0500161 ${rc} ${output}= Run And Return RC and Output ${ipmi_cmd}
George Keishing02651f02018-04-11 02:07:16 -0500162 Return From Keyword If ${fail_on_err} == ${0} ${output}
Michael Walshd0e58e72019-05-14 11:07:14 -0500163 Should Be Equal ${rc} ${expected_rc} msg=${output}
Michael Walsha7913892017-04-20 16:29:01 -0500164 [Return] ${output}
Rahul Maheshwari7a212a02016-09-05 21:17:30 -0500165
Michael Walsh3ef2e922019-01-23 10:40:16 -0600166
167Run External IPMI Raw Command
168 [Documentation] Run the external IPMI raw command.
169 [Arguments] ${command} ${fail_on_err}=${1} &{options}
170
171 # This keyword is a wrapper for 'Run External IPMI Standard Command'. See
172 # that keyword's prolog for argument details. This keyword will pre-pend
173 # the word "raw" plus a space to command prior to calling 'Run External
174 # IPMI Standard Command'.
175
176 ${output}= Run External IPMI Standard Command
177 ... raw ${command} ${fail_on_err} &{options}
178 [Return] ${output}
179
180
Prashanth Kattiae7c2282017-03-15 07:43:46 -0500181Check If IPMI Tool Exist
182 [Documentation] Check if IPMI Tool installed or not.
183 ${output}= Execute Command which ipmitool
184 Should Not Be Empty ${output} msg=ipmitool not installed.
Rahul Maheshwari7a212a02016-09-05 21:17:30 -0500185
Rahul Maheshwari04a22042017-05-02 01:54:31 -0500186
187Activate SOL Via IPMI
188 [Documentation] Start SOL using IPMI and route output to a file.
189 [Arguments] ${file_path}=/tmp/sol_${OPENBMC_HOST}
Michael Walsh3ef2e922019-01-23 10:40:16 -0600190
Rahul Maheshwari04a22042017-05-02 01:54:31 -0500191 # Description of argument(s):
Michael Walsh3ef2e922019-01-23 10:40:16 -0600192 # file_path The file path on the local machine (vs.
193 # OBMC) to collect SOL output. By default
194 # SOL output is collected at
195 # /tmp/sol_<BMC_IP> else user input location.
Rahul Maheshwari04a22042017-05-02 01:54:31 -0500196
Michael Walsh3ef2e922019-01-23 10:40:16 -0600197 ${ipmi_cmd}= Create IPMI Ext Command String sol activate usesolkeepalive
198 Qprint Issuing ${ipmi_cmd}
George Keishing2102f6b2017-06-06 08:30:10 -0500199 Start Process ${ipmi_cmd} shell=True stdout=${file_path}
Rahul Maheshwari4f360842017-06-06 15:05:01 -0500200 ... alias=sol_proc
Rahul Maheshwari04a22042017-05-02 01:54:31 -0500201
202
203Deactivate SOL Via IPMI
204 [Documentation] Stop SOL using IPMI and return SOL output.
205 [Arguments] ${file_path}=/tmp/sol_${OPENBMC_HOST}
Michael Walsh3ef2e922019-01-23 10:40:16 -0600206
Rahul Maheshwari04a22042017-05-02 01:54:31 -0500207 # Description of argument(s):
Michael Walsh3ef2e922019-01-23 10:40:16 -0600208 # file_path The file path on the local machine to copy
209 # SOL output collected by above "Activate
210 # SOL Via IPMI" keyword. By default it
211 # copies log from /tmp/sol_<BMC_IP>.
Rahul Maheshwari04a22042017-05-02 01:54:31 -0500212
Michael Walsh3ef2e922019-01-23 10:40:16 -0600213 ${ipmi_cmd}= Create IPMI Ext Command String sol deactivate
214 Qprint Issuing ${ipmi_cmd}
Rahul Maheshwari04a22042017-05-02 01:54:31 -0500215 ${rc} ${output}= Run and Return RC and Output ${ipmi_cmd}
Rahul Maheshwari4f360842017-06-06 15:05:01 -0500216 Run Keyword If ${rc} > 0 Run Keywords
Rahul Maheshwari7f48a2c2017-06-16 04:00:26 -0500217 ... Run Keyword And Ignore Error Terminate Process sol_proc
218 ... AND Return From Keyword ${output}
Rahul Maheshwari04a22042017-05-02 01:54:31 -0500219
George Keishingaec8b872019-07-08 23:44:08 -0500220 ${output}= OperatingSystem.Get File ${file_path} encoding_errors=ignore
Rahul Maheshwari04a22042017-05-02 01:54:31 -0500221
222 # Logging SOL output for debug purpose.
223 Log ${output}
224
225 [Return] ${output}
226
227
Sivas SRRa2dab3c2016-07-25 05:08:18 -0500228Byte Conversion
229 [Documentation] Byte Conversion method receives IPMI RAW commands as
230 ... argument in string format.
231 ... Sample argument is as follows
232 ... "0x04 0x30 9 0x01 0x00 0x35 0x00 0x00 0x00 0x00 0x00
233 ... 0x00"
234 ... IPMI RAW command format is as follows
235 ... <netfn Byte> <cmd Byte> <Data Bytes..>
236 ... This method converts IPMI command format into
237 ... dbus command format as follows
238 ... <byte:seq-id> <byte:netfn> <byte:lun> <byte:cmd>
239 ... <array:byte:data>
240 ... Sample dbus Host IPMI Received Message argument
241 ... byte:0x00 byte:0x04 byte:0x00 byte:0x30
242 ... array:byte:9,0x01,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00
Gunnar Mills38032802016-12-12 13:43:40 -0600243 [Arguments] ${args}
Gunnar Mills59204d22016-12-06 11:05:19 -0600244 ${argLength}= Get Length ${args}
Sivas SRRa2dab3c2016-07-25 05:08:18 -0500245 Set Global Variable ${arrayByte} array:byte:
Gunnar Mills59204d22016-12-06 11:05:19 -0600246 @{listargs}= Split String ${args}
247 ${index}= Set Variable ${0}
George Keishing9a089442018-12-10 09:38:50 -0600248 :FOR ${word} IN @{listargs}
Sivas SRRa2dab3c2016-07-25 05:08:18 -0500249 \ Run Keyword if ${index} == 0 Set NetFn Byte ${word}
250 \ Run Keyword if ${index} == 1 Set Cmd Byte ${word}
251 \ Run Keyword if ${index} > 1 Set Array Byte ${word}
Gunnar Mills59204d22016-12-06 11:05:19 -0600252 \ ${index}= Set Variable ${index + 1}
253 ${length}= Get Length ${arrayByte}
254 ${length}= Evaluate ${length} - 1
255 ${arrayByteLocal}= Get Substring ${arrayByte} 0 ${length}
Sivas SRRa2dab3c2016-07-25 05:08:18 -0500256 Set Global Variable ${arrayByte} ${arrayByteLocal}
Gunnar Mills59204d22016-12-06 11:05:19 -0600257 ${valueinBytesWithArray}= Catenate byte:0x00 ${netfnByte} byte:0x00
258 ${valueinBytesWithArray}= Catenate ${valueinBytesWithArray} ${cmdByte}
259 ${valueinBytesWithArray}= Catenate ${valueinBytesWithArray} ${arrayByte}
260 ${valueinBytesWithoutArray}= Catenate byte:0x00 ${netfnByte} byte:0x00
261 ${valueinBytesWithoutArray}= Catenate ${valueinBytesWithoutArray} ${cmdByte}
Michael Walsh3ef2e922019-01-23 10:40:16 -0600262 # To Check scenario for smaller IPMI raw commands with only 2 arguments
263 # instead of usual 12 arguments.
264 # Sample small IPMI raw command: Run IPMI command 0x06 0x36
265 # If IPMI raw argument length is only 9 then return value in bytes without
266 # array population.
267 # Equivalent dbus-send argument for smaller IPMI raw command:
268 # byte:0x00 byte:0x06 byte:0x00 byte:0x36
Sivas SRRa2dab3c2016-07-25 05:08:18 -0500269 Run Keyword if ${argLength} == 9 Return from Keyword ${valueinBytesWithoutArray}
Gunnar Millsc9ea9362016-12-13 16:21:13 -0600270 [Return] ${valueinBytesWithArray}
Sivas SRRa2dab3c2016-07-25 05:08:18 -0500271
272
273Set NetFn Byte
Joy Onyerikwuf4a807b2018-06-20 08:43:54 -0500274 [Documentation] Set the network function byte.
275 [Arguments] ${word}
276 ${netfnByteLocal}= Catenate byte:${word}
277 Set Global Variable ${netfnByte} ${netfnByteLocal}
Sivas SRRa2dab3c2016-07-25 05:08:18 -0500278
Michael Walsh3ef2e922019-01-23 10:40:16 -0600279
Sivas SRRa2dab3c2016-07-25 05:08:18 -0500280Set Cmd Byte
Joy Onyerikwuf4a807b2018-06-20 08:43:54 -0500281 [Documentation] Set the command byte.
282 [Arguments] ${word}
283 ${cmdByteLocal}= Catenate byte:${word}
284 Set Global Variable ${cmdByte} ${cmdByteLocal}
Sivas SRRa2dab3c2016-07-25 05:08:18 -0500285
Michael Walsh3ef2e922019-01-23 10:40:16 -0600286
Sivas SRRa2dab3c2016-07-25 05:08:18 -0500287Set Array Byte
Joy Onyerikwuf4a807b2018-06-20 08:43:54 -0500288 [Documentation] Set the array byte.
289 [Arguments] ${word}
290 ${arrayByteLocal}= Catenate SEPARATOR= ${arrayByte} ${word}
291 ${arrayByteLocal}= Catenate SEPARATOR= ${arrayByteLocal} ,
292 Set Global Variable ${arrayByte} ${arrayByteLocal}
Sivas SRRa2dab3c2016-07-25 05:08:18 -0500293
Michael Walsh3ef2e922019-01-23 10:40:16 -0600294
Chris Austenb29d2e82016-06-07 12:25:35 -0500295Copy ipmitool
Joy Onyerikwuf4a807b2018-06-20 08:43:54 -0500296 [Documentation] Copy the ipmitool to the BMC.
297 ${ipmitool_error}= Catenate The ipmitool program could not be found in the tools directory.
298 ... It is not part of the automation code by default. You must manually copy or link the correct openbmc
299 ... version of the tool in to the tools directory in order to run this test suite.
300
301 OperatingSystem.File Should Exist tools/ipmitool msg=${ipmitool_error}
Chris Austenb29d2e82016-06-07 12:25:35 -0500302
303 Import Library SCPLibrary WITH NAME scp
304 scp.Open connection ${OPENBMC_HOST} username=${OPENBMC_USERNAME} password=${OPENBMC_PASSWORD}
305 scp.Put File tools/ipmitool /tmp
306 SSHLibrary.Open Connection ${OPENBMC_HOST}
307 Login ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD}
308 Execute Command chmod +x /tmp/ipmitool
Sridevi Ramesh0c34f692017-04-25 02:40:32 -0500309
Michael Walsh3ef2e922019-01-23 10:40:16 -0600310
Sridevi Ramesh0c34f692017-04-25 02:40:32 -0500311Initiate Host Boot Via External IPMI
312 [Documentation] Initiate host power on using external IPMI.
Rahul Maheshwari982fee42017-05-03 00:33:15 -0500313 [Arguments] ${wait}=${1}
Michael Walsh3ef2e922019-01-23 10:40:16 -0600314
Rahul Maheshwari982fee42017-05-03 00:33:15 -0500315 # Description of argument(s):
Michael Walsh3ef2e922019-01-23 10:40:16 -0600316 # wait Indicates that this keyword should wait
317 # for host running state.
Rahul Maheshwari982fee42017-05-03 00:33:15 -0500318
Sridevi Ramesh0c34f692017-04-25 02:40:32 -0500319 ${output}= Run External IPMI Standard Command chassis power on
320 Should Not Contain ${output} Error
Rahul Maheshwari982fee42017-05-03 00:33:15 -0500321
322 Run Keyword If '${wait}' == '${0}' Return From Keyword
323 Wait Until Keyword Succeeds 10 min 10 sec Is Host Running
Sridevi Ramesh0c34f692017-04-25 02:40:32 -0500324
Michael Walsh3ef2e922019-01-23 10:40:16 -0600325
Sridevi Ramesh0c34f692017-04-25 02:40:32 -0500326Initiate Host PowerOff Via External IPMI
327 [Documentation] Initiate host power off using external IPMI.
Rahul Maheshwari982fee42017-05-03 00:33:15 -0500328 [Arguments] ${wait}=${1}
Michael Walsh3ef2e922019-01-23 10:40:16 -0600329
Rahul Maheshwari982fee42017-05-03 00:33:15 -0500330 # Description of argument(s):
Michael Walsh3ef2e922019-01-23 10:40:16 -0600331 # wait Indicates that this keyword should wait
332 # for host off state.
Rahul Maheshwari982fee42017-05-03 00:33:15 -0500333
Sridevi Ramesh0c34f692017-04-25 02:40:32 -0500334 ${output}= Run External IPMI Standard Command chassis power off
335 Should Not Contain ${output} Error
Rahul Maheshwari982fee42017-05-03 00:33:15 -0500336
337 Run Keyword If '${wait}' == '${0}' Return From Keyword
338 Wait Until Keyword Succeeds 3 min 10 sec Is Host Off
339
Michael Walsh3ef2e922019-01-23 10:40:16 -0600340
Rahul Maheshwari982fee42017-05-03 00:33:15 -0500341Get Host State Via External IPMI
342 [Documentation] Returns host state using external IPMI.
343
344 ${output}= Run External IPMI Standard Command chassis power status
345 Should Not Contain ${output} Error
346 ${output}= Fetch From Right ${output} ${SPACE}
347
348 [Return] ${output}
George Keishingb4d4a4a2018-08-27 13:35:39 -0500349
350
351Set BMC Network From Host
352 [Documentation] Set BMC network from host.
353 [Arguments] ${nw_info}
354
355 # Description of argument(s):
Michael Walsh3ef2e922019-01-23 10:40:16 -0600356 # nw_info A dictionary containing the network
357 # information to apply.
George Keishingb4d4a4a2018-08-27 13:35:39 -0500358
359 Run Inband IPMI Standard Command
360 ... lan set 1 ipaddr ${nw_info['IP Address']}
361
362 Run Inband IPMI Standard Command
363 ... lan set 1 netmask ${nw_info['Subnet Mask']}
364
365 Run Inband IPMI Standard Command
366 ... lan set 1 defgw ipaddr ${nw_info['Default Gateway IP']}
Rahul Maheshwaric3d1e962019-03-06 23:53:21 -0600367
368
369Verify IPMI Username And Password
370 [Documentation] Verify that user is able to run IPMI command
371 ... with given username and password.
372 [Arguments] ${username} ${password}
373
374 # Description of argument(s):
375 # username The user name (e.g. "root", "robert", etc.).
376 # password The user password (e.g. "0penBmc", "0penBmc1", etc.).
377
378 ${output}= Run External IPMI Standard Command
379 ... sel info U=${username} P=${password}
380 Should Contain ${output} SEL Information msg=SEL information not present
Rahul Maheshwari75e91fe2019-03-29 05:32:28 -0500381
382
383IPMI Create User
384 [Documentation] Create IPMI user with given userid and username.
385 [Arguments] ${userid} ${username}
386
387 # Description of argument(s):
388 # userid The user ID (e.g. "1", "2", etc.).
389 # username The user name (e.g. "root", "robert", etc.).
390
391 ${ipmi_cmd}= Catenate user set name ${userid} ${username}
392 ${resp}= Run IPMI Standard Command ${ipmi_cmd}
393 ${user_info}= Get User Info ${userid}
394 Should Be Equal ${user_info['user_name']} ${username}
395
396
397Set Channel Access
398 [Documentation] Verify that user is able to run IPMI command
399 ... with given username and password.
Tony Lee7c5f4b22019-12-06 17:21:31 +0800400 [Arguments] ${userid} ${options} ${channel_number}=${CHANNEL_NUMBER}
Rahul Maheshwari75e91fe2019-03-29 05:32:28 -0500401
402 # Description of argument(s):
403 # userid The user ID (e.g. "1", "2", etc.).
404 # options Set channel command options (e.g.
405 # "link=on", "ipmi=on", etc.).
406 # channel_number The user's channel number (e.g. "1").
407
408 ${ipmi_cmd}= Catenate SEPARATOR=
Tony Lee7c5f4b22019-12-06 17:21:31 +0800409 ... channel setaccess${SPACE}${channel_number}${SPACE}${userid}
Rahul Maheshwari75e91fe2019-03-29 05:32:28 -0500410 ... ${SPACE}${options}
411 Run IPMI Standard Command ${ipmi_cmd}
Rahul Maheshwari3e61ce62019-06-18 02:09:01 -0500412
413
414Delete All Non Root IPMI User
415 [Documentation] Delete all non-root IPMI user.
416
417 FOR ${userid} IN RANGE 2 16
418 ${user_info}= Get User Info ${userid}
419 Run Keyword If "${user_info['user_name']}" != ""
420 ... Run IPMI Standard Command user set name ${userid} ""
Rahul Maheshwaribb3d21c2019-07-23 01:08:19 -0500421 Sleep 5s
Rahul Maheshwari3e61ce62019-06-18 02:09:01 -0500422 END