Enhancement : External ipmitool enablement
With this enhancement, a user can
- send IPMI command using external ipmitool
- by default dbus method will be used for ipmi command
Resolves openbmc/openbmc-test-automation#64
Change-Id: Ibd49dc8cdaf30e32da468c8b04abbff29f673c8b
Signed-off-by: Rahul Maheshwari <rahulmaheshwari@in.ibm.com>
diff --git a/lib/ipmi_client.robot b/lib/ipmi_client.robot
index 6e50e8b..079804c 100755
--- a/lib/ipmi_client.robot
+++ b/lib/ipmi_client.robot
@@ -9,13 +9,38 @@
*** Variables ***
${dbusHostIpmicmd1} = dbus-send --system /org/openbmc/HostIpmi/1
${dbusHostIpmiCmdReceivedMsg} = org.openbmc.HostIpmi.ReceivedMessage
-${netfnByte} = ${EMPTY}
-${cmdByte} = ${EMPTY}
-${arrayByte} = array:byte:
+${netfnByte} = ${EMPTY}
+${cmdByte} = ${EMPTY}
+${arrayByte} = array:byte:
+${IPMI_EXT_CMD} = ipmitool -I lanplus -C 1 -P
+${HOST} = -H
+${RAW} = raw
*** Keywords ***
+
Run IPMI Command
[arguments] ${args}
+ ${resp}= Run Keyword If '${IPMI_COMMAND}'=='External'
+ ... Run External IPMI RAW Command ${args}
+ ... ELSE IF '${IPMI_COMMAND}'=='Dbus'
+ ... Run Dbus IPMI RAW Command ${args}
+ ... ELSE Fail
+ ... msg=Invalid IPMI Command type provided : ${IPMI_COMMAND}
+ [return] ${resp}
+
+Run IPMI Standard Command
+ [arguments] ${args}
+ ${resp}= Run Keyword If '${IPMI_COMMAND}'=='External'
+ ... Run External IPMI Standard Command ${args}
+ ... ELSE IF '${IPMI_COMMAND}'=='Dbus'
+ ... Run Dbus IPMI Standard Command ${args}
+ ... ELSE Fail
+ ... msg=Invalid IPMI Command type provided : ${IPMI_COMMAND}
+
+ [return] ${resp}
+
+Run Dbus IPMI RAW Command
+ [arguments] ${args}
${valueinBytes} = Byte Conversion ${args}
${cmd} = Catenate ${dbushostipmicmd1} ${dbusHostIpmiCmdReceivedMsg}
${cmd} = Catenate ${cmd} ${valueinBytes}
@@ -23,13 +48,34 @@
Should Be Empty ${stderr}
set test variable ${OUTPUT} "${output}"
-Run IPMI Standard Command
+Run Dbus IPMI Standard Command
[arguments] ${args}
Copy ipmitool
- ${stdout} ${stderr} ${output}= Execute Command /tmp/ipmitool -I dbus ${args} return_stdout=True return_stderr= True return_rc=True
+ ${stdout} ${stderr} ${output}= Execute Command
+ ... /tmp/ipmitool -I dbus ${args} return_stdout=True
+ ... return_stderr= True return_rc=True
Should Be Equal ${output} ${0} msg=${stderr}
[return] ${stdout}
+Run External IPMI RAW Command
+ [arguments] ${args}
+ ${ipmi_raw_cmd}= Catenate SEPARATOR=
+ ... ${IPMI_EXT_CMD}${SPACE}${IPMI_PASSWORD}${SPACE}
+ ... ${HOST}${SPACE}${OPENBMC_HOST}${SPACE}${RAW}${SPACE}${args}
+ ${rc} ${output}= Run and Return RC and Output ${ipmi_raw_cmd}
+ Should Be Equal ${rc} ${0} msg=${output}
+ [return] ${output}
+
+Run External IPMI Standard Command
+ [arguments] ${args}
+ ${ipmi_cmd}= Catenate SEPARATOR=
+ ... ${IPMI_EXT_CMD}${SPACE}${IPMI_PASSWORD}${SPACE}
+ ... ${HOST}${SPACE}${OPENBMC_HOST}${SPACE}${args}
+ ${rc} ${output}= Run and Return RC and Output ${ipmi_cmd}
+ Should Be Equal ${rc} ${0} msg=${output}
+ [return] ${output}
+
+
Byte Conversion
[Documentation] Byte Conversion method receives IPMI RAW commands as
... argument in string format.