1b29d2e84SChris Austen*** Settings *** 2b29d2e84SChris AustenDocumentation This module is for IPMI client for copying ipmitool to 3a2dab3c8SSivas SRR... openbmc box and execute ipmitool IPMI standard 4a2dab3c8SSivas SRR... command. IPMI raw command will use dbus-send command 5839a0c27SSandhya SomashekarResource ../lib/resource.robot 64d6c1dabSGeorge KeishingResource ../lib/connection_client.robot 7ae7c2281SPrashanth KattiResource ../lib/utils.robot 8ae7c2281SPrashanth KattiResource ../lib/state_manager.robot 9ae7c2281SPrashanth Katti 10a2dab3c8SSivas SRRLibrary String 1119621bacSMichael WalshLibrary ipmi_client.py 12a2dab3c8SSivas SRR 13a2dab3c8SSivas SRR*** Variables *** 14d7f11f70SGeorge Keishing${dbusHostIpmicmd1}= dbus-send --system ${OPENBMC_BASE_URI}HostIpmi/1 15d7f11f70SGeorge Keishing${dbusHostIpmiCmdReceivedMsg}= ${OPENBMC_BASE_DBUS}.HostIpmi.ReceivedMessage 16a2dab3c8SSivas SRR${netfnByte}= ${EMPTY} 17a2dab3c8SSivas SRR${cmdByte}= ${EMPTY} 18a2dab3c8SSivas SRR${arrayByte}= array:byte: 19a7913898SMichael Walsh${IPMI_USER_OPTIONS} ${EMPTY} 2039967ebcSGeorge Keishing${IPMI_INBAND_CMD}= ipmitool -C ${IPMI_CIPHER_LEVEL} 217a212a09SRahul Maheshwari${HOST}= -H 227a212a09SRahul Maheshwari${RAW}= raw 23b29d2e84SChris Austen 24b29d2e84SChris Austen*** Keywords *** 257a212a09SRahul Maheshwari 26b29d2e84SChris AustenRun IPMI Command 273ef2e92cSMichael Walsh [Documentation] Run the raw IPMI command. 283ef2e92cSMichael Walsh [Arguments] ${command} ${fail_on_err}=${1} &{options} 293ef2e92cSMichael Walsh 303ef2e92cSMichael Walsh # Description of argument(s): 313ef2e92cSMichael Walsh # command The IPMI command string to be executed 323ef2e92cSMichael Walsh # (e.g. "power status"). 333ef2e92cSMichael Walsh # fail_on_err Fail if the IPMI command execution fails. 343ef2e92cSMichael Walsh # options Additional ipmitool command options (e.g. 353ef2e92cSMichael Walsh # -C=3, -I=lanplus, etc.). Currently, only 363ef2e92cSMichael Walsh # used for external IPMI commands. 373ef2e92cSMichael Walsh 387a212a09SRahul Maheshwari ${resp}= Run Keyword If '${IPMI_COMMAND}' == 'External' 393ef2e92cSMichael Walsh ... Run External IPMI Raw Command ${command} ${fail_on_err} &{options} 40ae7c2281SPrashanth Katti ... ELSE IF '${IPMI_COMMAND}' == 'Inband' 413ef2e92cSMichael Walsh ... Run Inband IPMI Raw Command ${command} 427a212a09SRahul Maheshwari ... ELSE IF '${IPMI_COMMAND}' == 'Dbus' 433ef2e92cSMichael Walsh ... Run Dbus IPMI RAW Command ${command} 44ae7c2281SPrashanth Katti ... ELSE Fail msg=Invalid IPMI Command type provided: ${IPMI_COMMAND} 45c9ea9368SGunnar Mills [Return] ${resp} 467a212a09SRahul Maheshwari 473ef2e92cSMichael Walsh 487a212a09SRahul MaheshwariRun IPMI Standard Command 49f4a807bfSJoy Onyerikwu [Documentation] Run the standard IPMI command. 50d0e58e73SMichael Walsh [Arguments] ${command} ${fail_on_err}=${1} ${expected_rc}=${0} &{options} 5120f3bf73SRahul Maheshwari 5220f3bf73SRahul Maheshwari # Description of argument(s): 533ef2e92cSMichael Walsh # command The IPMI command string to be executed 543ef2e92cSMichael Walsh # (e.g. "0x06 0x36"). 553ef2e92cSMichael Walsh # fail_on_err Fail if the IPMI command execution fails. 56d0e58e73SMichael Walsh # expected_rc The expected return code from the ipmi 57d0e58e73SMichael Walsh # command (e.g. ${0}, ${1}, etc.). 583ef2e92cSMichael Walsh # options Additional ipmitool command options (e.g. 593ef2e92cSMichael Walsh # -C=3, -I=lanplus, etc.). Currently, only 603ef2e92cSMichael Walsh # used for external IPMI commands. 6120f3bf73SRahul Maheshwari 627a212a09SRahul Maheshwari ${resp}= Run Keyword If '${IPMI_COMMAND}' == 'External' 63d0e58e73SMichael Walsh ... Run External IPMI Standard Command ${command} ${fail_on_err} ${expected_rc} &{options} 64ae7c2281SPrashanth Katti ... ELSE IF '${IPMI_COMMAND}' == 'Inband' 653ef2e92cSMichael Walsh ... Run Inband IPMI Standard Command ${command} ${fail_on_err} 667a212a09SRahul Maheshwari ... ELSE IF '${IPMI_COMMAND}' == 'Dbus' 673ef2e92cSMichael Walsh ... Run Dbus IPMI Standard Command ${command} 68ae7c2281SPrashanth Katti ... ELSE Fail msg=Invalid IPMI Command type provided : ${IPMI_COMMAND} 697a212a09SRahul Maheshwari 70c9ea9368SGunnar Mills [Return] ${resp} 717a212a09SRahul Maheshwari 723ef2e92cSMichael Walsh 737a212a09SRahul MaheshwariRun Dbus IPMI RAW Command 74f4a807bfSJoy Onyerikwu [Documentation] Run the raw IPMI command through dbus. 753ef2e92cSMichael Walsh [Arguments] ${command} 763ef2e92cSMichael Walsh ${valueinBytes}= Byte Conversion ${command} 77a2dab3c8SSivas SRR ${cmd}= Catenate ${dbushostipmicmd1} ${dbusHostIpmiCmdReceivedMsg} 78a2dab3c8SSivas SRR ${cmd}= Catenate ${cmd} ${valueinBytes} 79a2dab3c8SSivas SRR ${output} ${stderr}= Execute Command ${cmd} return_stderr=True 80b29d2e84SChris Austen Should Be Empty ${stderr} 81b29d2e84SChris Austen set test variable ${OUTPUT} "${output}" 82b29d2e84SChris Austen 833ef2e92cSMichael Walsh 847a212a09SRahul MaheshwariRun Dbus IPMI Standard Command 85f4a807bfSJoy Onyerikwu [Documentation] Run the standard IPMI command through dbus. 863ef2e92cSMichael Walsh [Arguments] ${command} 874d6c1dabSGeorge Keishing Copy ipmitool 887a212a09SRahul Maheshwari ${stdout} ${stderr} ${output}= Execute Command 893ef2e92cSMichael Walsh ... /tmp/ipmitool -I dbus ${command} return_stdout=True 907a212a09SRahul Maheshwari ... return_stderr= True return_rc=True 91b29d2e84SChris Austen Should Be Equal ${output} ${0} msg=${stderr} 92c9ea9368SGunnar Mills [Return] ${stdout} 93b29d2e84SChris Austen 943ef2e92cSMichael Walsh 95ae7c2281SPrashanth KattiRun Inband IPMI Raw Command 96f4a807bfSJoy Onyerikwu [Documentation] Run the raw IPMI command in-band. 973ef2e92cSMichael Walsh [Arguments] ${command} ${os_host}=${OS_HOST} ${os_username}=${OS_USERNAME} 98ae7c2281SPrashanth Katti ... ${os_password}=${OS_PASSWORD} 99ae7c2281SPrashanth Katti 1003ef2e92cSMichael Walsh # Description of argument(s): 1013ef2e92cSMichael Walsh # command The IPMI command string to be executed 1023ef2e92cSMichael Walsh # (e.g. "0x06 0x36"). 1033ef2e92cSMichael Walsh # os_host The host name or IP address of the OS Host. 1043ef2e92cSMichael Walsh # os_username The OS host user name. 1053ef2e92cSMichael Walsh # os_password The OS host passwrd. 106ae7c2281SPrashanth Katti 107ae7c2281SPrashanth Katti Login To OS Host ${os_host} ${os_username} ${os_password} 108ae7c2281SPrashanth Katti Check If IPMI Tool Exist 109ae7c2281SPrashanth Katti 1103ef2e92cSMichael Walsh ${ipmi_cmd}= Catenate ${IPMI_INBAND_CMD} ${RAW} ${command} 1113ef2e92cSMichael Walsh Qprint Issuing ${ipmi_cmd} 1123ef2e92cSMichael Walsh ${stdout} ${stderr}= Execute Command ${ipmi_cmd} return_stderr=True 113ae7c2281SPrashanth Katti Should Be Empty ${stderr} msg=${stdout} 114ae7c2281SPrashanth Katti [Return] ${stdout} 115ae7c2281SPrashanth Katti 1163ef2e92cSMichael Walsh 117ae7c2281SPrashanth KattiRun Inband IPMI Standard Command 118f4a807bfSJoy Onyerikwu [Documentation] Run the standard IPMI command in-band. 1193ef2e92cSMichael Walsh [Arguments] ${command} ${fail_on_err}=${1} ${os_host}=${OS_HOST} 12020f3bf73SRahul Maheshwari ... ${os_username}=${OS_USERNAME} ${os_password}=${OS_PASSWORD} 121ae7c2281SPrashanth Katti 1223ef2e92cSMichael Walsh # Description of argument(s): 1233ef2e92cSMichael Walsh # command The IPMI command string to be executed 1243ef2e92cSMichael Walsh # (e.g. "power status"). 1253ef2e92cSMichael Walsh # os_host The host name or IP address of the OS Host. 1263ef2e92cSMichael Walsh # os_username The OS host user name. 1273ef2e92cSMichael Walsh # os_password The OS host passwrd. 128ae7c2281SPrashanth Katti 129ae7c2281SPrashanth Katti Login To OS Host ${os_host} ${os_username} ${os_password} 130ae7c2281SPrashanth Katti Check If IPMI Tool Exist 131ae7c2281SPrashanth Katti 1323ef2e92cSMichael Walsh ${ipmi_cmd}= Catenate ${IPMI_INBAND_CMD} ${command} 1333ef2e92cSMichael Walsh Qprint Issuing ${ipmi_cmd} 1343ef2e92cSMichael Walsh ${stdout} ${stderr}= Execute Command ${ipmi_cmd} return_stderr=True 13520f3bf73SRahul Maheshwari Return From Keyword If ${fail_on_err} == ${0} ${stderr} 136ae7c2281SPrashanth Katti Should Be Empty ${stderr} msg=${stdout} 137ae7c2281SPrashanth Katti [Return] ${stdout} 138ae7c2281SPrashanth Katti 1397a212a09SRahul Maheshwari 1407a212a09SRahul MaheshwariRun External IPMI Standard Command 1413ef2e92cSMichael Walsh [Documentation] Run the external IPMI standard command. 142d0e58e73SMichael Walsh [Arguments] ${command} ${fail_on_err}=${1} ${expected_rc}=${0} &{options} 14302651f0cSGeorge Keishing 14402651f0cSGeorge Keishing # Description of argument(s): 1453ef2e92cSMichael Walsh # command The IPMI command string to be executed 1463ef2e92cSMichael Walsh # (e.g. "power status"). Note that if 1473ef2e92cSMichael Walsh # ${IPMI_USER_OPTIONS} has a value (e.g. 1483ef2e92cSMichael Walsh # "-vvv"), it will be pre-pended to this 1493ef2e92cSMichael Walsh # command string. 1503ef2e92cSMichael Walsh # fail_on_err Fail if the IPMI command execution fails. 151d0e58e73SMichael Walsh # expected_rc The expected return code from the ipmi 152d0e58e73SMichael Walsh # command (e.g. ${0}, ${1}, etc.). 1533ef2e92cSMichael Walsh # options Additional ipmitool command options (e.g. 1543ef2e92cSMichael Walsh # -C=3, -I=lanplus, etc.). 155a7913898SMichael Walsh 1563ef2e92cSMichael Walsh ${command_string}= Process IPMI User Options ${command} 1573ef2e92cSMichael Walsh ${ipmi_cmd}= Create IPMI Ext Command String ${command_string} &{options} 1583ef2e92cSMichael Walsh Qprint Issuing ${ipmi_cmd} 15904a2204bSRahul Maheshwari ${rc} ${output}= Run And Return RC and Output ${ipmi_cmd} 16002651f0cSGeorge Keishing Return From Keyword If ${fail_on_err} == ${0} ${output} 161d0e58e73SMichael Walsh Should Be Equal ${rc} ${expected_rc} msg=${output} 162c9ea9368SGunnar Mills [Return] ${output} 1637a212a09SRahul Maheshwari 1643ef2e92cSMichael Walsh 1653ef2e92cSMichael WalshRun External IPMI Raw Command 1663ef2e92cSMichael Walsh [Documentation] Run the external IPMI raw command. 1673ef2e92cSMichael Walsh [Arguments] ${command} ${fail_on_err}=${1} &{options} 1683ef2e92cSMichael Walsh 1693ef2e92cSMichael Walsh # This keyword is a wrapper for 'Run External IPMI Standard Command'. See 1703ef2e92cSMichael Walsh # that keyword's prolog for argument details. This keyword will pre-pend 1713ef2e92cSMichael Walsh # the word "raw" plus a space to command prior to calling 'Run External 1723ef2e92cSMichael Walsh # IPMI Standard Command'. 1733ef2e92cSMichael Walsh 1743ef2e92cSMichael Walsh ${output}= Run External IPMI Standard Command 1753ef2e92cSMichael Walsh ... raw ${command} ${fail_on_err} &{options} 1763ef2e92cSMichael Walsh [Return] ${output} 1773ef2e92cSMichael Walsh 1783ef2e92cSMichael Walsh 179ae7c2281SPrashanth KattiCheck If IPMI Tool Exist 180ae7c2281SPrashanth Katti [Documentation] Check if IPMI Tool installed or not. 181ae7c2281SPrashanth Katti ${output}= Execute Command which ipmitool 182ae7c2281SPrashanth Katti Should Not Be Empty ${output} msg=ipmitool not installed. 1837a212a09SRahul Maheshwari 18404a2204bSRahul Maheshwari 18504a2204bSRahul MaheshwariActivate SOL Via IPMI 18604a2204bSRahul Maheshwari [Documentation] Start SOL using IPMI and route output to a file. 18704a2204bSRahul Maheshwari [Arguments] ${file_path}=/tmp/sol_${OPENBMC_HOST} 1883ef2e92cSMichael Walsh 18904a2204bSRahul Maheshwari # Description of argument(s): 1903ef2e92cSMichael Walsh # file_path The file path on the local machine (vs. 1913ef2e92cSMichael Walsh # OBMC) to collect SOL output. By default 1923ef2e92cSMichael Walsh # SOL output is collected at 19304a2204bSRahul Maheshwari # /tmp/sol_<BMC_IP> else user input location. 19404a2204bSRahul Maheshwari 1953ef2e92cSMichael Walsh ${ipmi_cmd}= Create IPMI Ext Command String sol activate usesolkeepalive 1963ef2e92cSMichael Walsh Qprint Issuing ${ipmi_cmd} 1972102f6bfSGeorge Keishing Start Process ${ipmi_cmd} shell=True stdout=${file_path} 1984f360843SRahul Maheshwari ... alias=sol_proc 19904a2204bSRahul Maheshwari 20004a2204bSRahul Maheshwari 20104a2204bSRahul MaheshwariDeactivate SOL Via IPMI 20204a2204bSRahul Maheshwari [Documentation] Stop SOL using IPMI and return SOL output. 20304a2204bSRahul Maheshwari [Arguments] ${file_path}=/tmp/sol_${OPENBMC_HOST} 2043ef2e92cSMichael Walsh 20504a2204bSRahul Maheshwari # Description of argument(s): 2063ef2e92cSMichael Walsh # file_path The file path on the local machine to copy 2073ef2e92cSMichael Walsh # SOL output collected by above "Activate 2083ef2e92cSMichael Walsh # SOL Via IPMI" keyword. By default it 2093ef2e92cSMichael Walsh # copies log from /tmp/sol_<BMC_IP>. 21004a2204bSRahul Maheshwari 2113ef2e92cSMichael Walsh ${ipmi_cmd}= Create IPMI Ext Command String sol deactivate 2123ef2e92cSMichael Walsh Qprint Issuing ${ipmi_cmd} 21304a2204bSRahul Maheshwari ${rc} ${output}= Run and Return RC and Output ${ipmi_cmd} 2144f360843SRahul Maheshwari Run Keyword If ${rc} > 0 Run Keywords 2157f48a2c6SRahul Maheshwari ... Run Keyword And Ignore Error Terminate Process sol_proc 2167f48a2c6SRahul Maheshwari ... AND Return From Keyword ${output} 21704a2204bSRahul Maheshwari 218*aec8b879SGeorge Keishing ${output}= OperatingSystem.Get File ${file_path} encoding_errors=ignore 21904a2204bSRahul Maheshwari 22004a2204bSRahul Maheshwari # Logging SOL output for debug purpose. 22104a2204bSRahul Maheshwari Log ${output} 22204a2204bSRahul Maheshwari 22304a2204bSRahul Maheshwari [Return] ${output} 22404a2204bSRahul Maheshwari 22504a2204bSRahul Maheshwari 226a2dab3c8SSivas SRRByte Conversion 227a2dab3c8SSivas SRR [Documentation] Byte Conversion method receives IPMI RAW commands as 228a2dab3c8SSivas SRR ... argument in string format. 229a2dab3c8SSivas SRR ... Sample argument is as follows 230a2dab3c8SSivas SRR ... "0x04 0x30 9 0x01 0x00 0x35 0x00 0x00 0x00 0x00 0x00 231a2dab3c8SSivas SRR ... 0x00" 232a2dab3c8SSivas SRR ... IPMI RAW command format is as follows 233a2dab3c8SSivas SRR ... <netfn Byte> <cmd Byte> <Data Bytes..> 234a2dab3c8SSivas SRR ... This method converts IPMI command format into 235a2dab3c8SSivas SRR ... dbus command format as follows 236a2dab3c8SSivas SRR ... <byte:seq-id> <byte:netfn> <byte:lun> <byte:cmd> 237a2dab3c8SSivas SRR ... <array:byte:data> 238a2dab3c8SSivas SRR ... Sample dbus Host IPMI Received Message argument 239a2dab3c8SSivas SRR ... byte:0x00 byte:0x04 byte:0x00 byte:0x30 240a2dab3c8SSivas SRR ... array:byte:9,0x01,0x00,0x35,0x00,0x00,0x00,0x00,0x00,0x00 24138032805SGunnar Mills [Arguments] ${args} 242a2dab3c8SSivas SRR ${argLength}= Get Length ${args} 243a2dab3c8SSivas SRR Set Global Variable ${arrayByte} array:byte: 244a2dab3c8SSivas SRR @{listargs}= Split String ${args} 245a2dab3c8SSivas SRR ${index}= Set Variable ${0} 2469a08944dSGeorge Keishing :FOR ${word} IN @{listargs} 247a2dab3c8SSivas SRR \ Run Keyword if ${index} == 0 Set NetFn Byte ${word} 248a2dab3c8SSivas SRR \ Run Keyword if ${index} == 1 Set Cmd Byte ${word} 249a2dab3c8SSivas SRR \ Run Keyword if ${index} > 1 Set Array Byte ${word} 250a2dab3c8SSivas SRR \ ${index}= Set Variable ${index + 1} 251a2dab3c8SSivas SRR ${length}= Get Length ${arrayByte} 252a2dab3c8SSivas SRR ${length}= Evaluate ${length} - 1 253a2dab3c8SSivas SRR ${arrayByteLocal}= Get Substring ${arrayByte} 0 ${length} 254a2dab3c8SSivas SRR Set Global Variable ${arrayByte} ${arrayByteLocal} 255a2dab3c8SSivas SRR ${valueinBytesWithArray}= Catenate byte:0x00 ${netfnByte} byte:0x00 256a2dab3c8SSivas SRR ${valueinBytesWithArray}= Catenate ${valueinBytesWithArray} ${cmdByte} 257a2dab3c8SSivas SRR ${valueinBytesWithArray}= Catenate ${valueinBytesWithArray} ${arrayByte} 258a2dab3c8SSivas SRR ${valueinBytesWithoutArray}= Catenate byte:0x00 ${netfnByte} byte:0x00 259a2dab3c8SSivas SRR ${valueinBytesWithoutArray}= Catenate ${valueinBytesWithoutArray} ${cmdByte} 260a2dab3c8SSivas SRR # To Check scenario for smaller IPMI raw commands with only 2 arguments 261a2dab3c8SSivas SRR # instead of usual 12 arguments. 262a2dab3c8SSivas SRR # Sample small IPMI raw command: Run IPMI command 0x06 0x36 263a2dab3c8SSivas SRR # If IPMI raw argument length is only 9 then return value in bytes without 264a2dab3c8SSivas SRR # array population. 265a2dab3c8SSivas SRR # Equivalent dbus-send argument for smaller IPMI raw command: 266a2dab3c8SSivas SRR # byte:0x00 byte:0x06 byte:0x00 byte:0x36 267a2dab3c8SSivas SRR Run Keyword if ${argLength} == 9 Return from Keyword ${valueinBytesWithoutArray} 268c9ea9368SGunnar Mills [Return] ${valueinBytesWithArray} 269a2dab3c8SSivas SRR 270a2dab3c8SSivas SRR 271a2dab3c8SSivas SRRSet NetFn Byte 272f4a807bfSJoy Onyerikwu [Documentation] Set the network function byte. 27338032805SGunnar Mills [Arguments] ${word} 274a2dab3c8SSivas SRR ${netfnByteLocal}= Catenate byte:${word} 275a2dab3c8SSivas SRR Set Global Variable ${netfnByte} ${netfnByteLocal} 276a2dab3c8SSivas SRR 2773ef2e92cSMichael Walsh 278a2dab3c8SSivas SRRSet Cmd Byte 279f4a807bfSJoy Onyerikwu [Documentation] Set the command byte. 28038032805SGunnar Mills [Arguments] ${word} 281a2dab3c8SSivas SRR ${cmdByteLocal}= Catenate byte:${word} 282a2dab3c8SSivas SRR Set Global Variable ${cmdByte} ${cmdByteLocal} 283a2dab3c8SSivas SRR 2843ef2e92cSMichael Walsh 285a2dab3c8SSivas SRRSet Array Byte 286f4a807bfSJoy Onyerikwu [Documentation] Set the array byte. 28738032805SGunnar Mills [Arguments] ${word} 288a2dab3c8SSivas SRR ${arrayByteLocal}= Catenate SEPARATOR= ${arrayByte} ${word} 289a2dab3c8SSivas SRR ${arrayByteLocal}= Catenate SEPARATOR= ${arrayByteLocal} , 290a2dab3c8SSivas SRR Set Global Variable ${arrayByte} ${arrayByteLocal} 291a2dab3c8SSivas SRR 2923ef2e92cSMichael Walsh 293b29d2e84SChris AustenCopy ipmitool 294f4a807bfSJoy Onyerikwu [Documentation] Copy the ipmitool to the BMC. 295f4a807bfSJoy Onyerikwu ${ipmitool_error}= Catenate The ipmitool program could not be found in the tools directory. 296f4a807bfSJoy Onyerikwu ... It is not part of the automation code by default. You must manually copy or link the correct openbmc 297f4a807bfSJoy Onyerikwu ... version of the tool in to the tools directory in order to run this test suite. 298f4a807bfSJoy Onyerikwu 299f4a807bfSJoy Onyerikwu OperatingSystem.File Should Exist tools/ipmitool msg=${ipmitool_error} 300b29d2e84SChris Austen 301b29d2e84SChris Austen Import Library SCPLibrary WITH NAME scp 302b29d2e84SChris Austen scp.Open connection ${OPENBMC_HOST} username=${OPENBMC_USERNAME} password=${OPENBMC_PASSWORD} 303b29d2e84SChris Austen scp.Put File tools/ipmitool /tmp 304b29d2e84SChris Austen SSHLibrary.Open Connection ${OPENBMC_HOST} 305b29d2e84SChris Austen Login ${OPENBMC_USERNAME} ${OPENBMC_PASSWORD} 306b29d2e84SChris Austen Execute Command chmod +x /tmp/ipmitool 3070c34f69cSSridevi Ramesh 3083ef2e92cSMichael Walsh 3090c34f69cSSridevi RameshInitiate Host Boot Via External IPMI 3100c34f69cSSridevi Ramesh [Documentation] Initiate host power on using external IPMI. 311982fee42SRahul Maheshwari [Arguments] ${wait}=${1} 3123ef2e92cSMichael Walsh 313982fee42SRahul Maheshwari # Description of argument(s): 3143ef2e92cSMichael Walsh # wait Indicates that this keyword should wait 3153ef2e92cSMichael Walsh # for host running state. 316982fee42SRahul Maheshwari 3170c34f69cSSridevi Ramesh ${output}= Run External IPMI Standard Command chassis power on 3180c34f69cSSridevi Ramesh Should Not Contain ${output} Error 319982fee42SRahul Maheshwari 320982fee42SRahul Maheshwari Run Keyword If '${wait}' == '${0}' Return From Keyword 321982fee42SRahul Maheshwari Wait Until Keyword Succeeds 10 min 10 sec Is Host Running 3220c34f69cSSridevi Ramesh 3233ef2e92cSMichael Walsh 3240c34f69cSSridevi RameshInitiate Host PowerOff Via External IPMI 3250c34f69cSSridevi Ramesh [Documentation] Initiate host power off using external IPMI. 326982fee42SRahul Maheshwari [Arguments] ${wait}=${1} 3273ef2e92cSMichael Walsh 328982fee42SRahul Maheshwari # Description of argument(s): 3293ef2e92cSMichael Walsh # wait Indicates that this keyword should wait 3303ef2e92cSMichael Walsh # for host off state. 331982fee42SRahul Maheshwari 3320c34f69cSSridevi Ramesh ${output}= Run External IPMI Standard Command chassis power off 3330c34f69cSSridevi Ramesh Should Not Contain ${output} Error 334982fee42SRahul Maheshwari 335982fee42SRahul Maheshwari Run Keyword If '${wait}' == '${0}' Return From Keyword 336982fee42SRahul Maheshwari Wait Until Keyword Succeeds 3 min 10 sec Is Host Off 337982fee42SRahul Maheshwari 3383ef2e92cSMichael Walsh 339982fee42SRahul MaheshwariGet Host State Via External IPMI 340982fee42SRahul Maheshwari [Documentation] Returns host state using external IPMI. 341982fee42SRahul Maheshwari 342982fee42SRahul Maheshwari ${output}= Run External IPMI Standard Command chassis power status 343982fee42SRahul Maheshwari Should Not Contain ${output} Error 344982fee42SRahul Maheshwari ${output}= Fetch From Right ${output} ${SPACE} 345982fee42SRahul Maheshwari 346982fee42SRahul Maheshwari [Return] ${output} 347b4d4a4aeSGeorge Keishing 348b4d4a4aeSGeorge Keishing 349b4d4a4aeSGeorge KeishingSet BMC Network From Host 350b4d4a4aeSGeorge Keishing [Documentation] Set BMC network from host. 351b4d4a4aeSGeorge Keishing [Arguments] ${nw_info} 352b4d4a4aeSGeorge Keishing 353b4d4a4aeSGeorge Keishing # Description of argument(s): 3543ef2e92cSMichael Walsh # nw_info A dictionary containing the network 3553ef2e92cSMichael Walsh # information to apply. 356b4d4a4aeSGeorge Keishing 357b4d4a4aeSGeorge Keishing Run Inband IPMI Standard Command 358b4d4a4aeSGeorge Keishing ... lan set 1 ipaddr ${nw_info['IP Address']} 359b4d4a4aeSGeorge Keishing 360b4d4a4aeSGeorge Keishing Run Inband IPMI Standard Command 361b4d4a4aeSGeorge Keishing ... lan set 1 netmask ${nw_info['Subnet Mask']} 362b4d4a4aeSGeorge Keishing 363b4d4a4aeSGeorge Keishing Run Inband IPMI Standard Command 364b4d4a4aeSGeorge Keishing ... lan set 1 defgw ipaddr ${nw_info['Default Gateway IP']} 365c3d1e968SRahul Maheshwari 366c3d1e968SRahul Maheshwari 367c3d1e968SRahul MaheshwariVerify IPMI Username And Password 368c3d1e968SRahul Maheshwari [Documentation] Verify that user is able to run IPMI command 369c3d1e968SRahul Maheshwari ... with given username and password. 370c3d1e968SRahul Maheshwari [Arguments] ${username} ${password} 371c3d1e968SRahul Maheshwari 372c3d1e968SRahul Maheshwari # Description of argument(s): 373c3d1e968SRahul Maheshwari # username The user name (e.g. "root", "robert", etc.). 374c3d1e968SRahul Maheshwari # password The user password (e.g. "0penBmc", "0penBmc1", etc.). 375c3d1e968SRahul Maheshwari 376c3d1e968SRahul Maheshwari ${output}= Run External IPMI Standard Command 377c3d1e968SRahul Maheshwari ... sel info U=${username} P=${password} 378c3d1e968SRahul Maheshwari Should Contain ${output} SEL Information msg=SEL information not present 37975e91feaSRahul Maheshwari 38075e91feaSRahul Maheshwari 38175e91feaSRahul MaheshwariIPMI Create User 38275e91feaSRahul Maheshwari [Documentation] Create IPMI user with given userid and username. 38375e91feaSRahul Maheshwari [Arguments] ${userid} ${username} 38475e91feaSRahul Maheshwari 38575e91feaSRahul Maheshwari # Description of argument(s): 38675e91feaSRahul Maheshwari # userid The user ID (e.g. "1", "2", etc.). 38775e91feaSRahul Maheshwari # username The user name (e.g. "root", "robert", etc.). 38875e91feaSRahul Maheshwari 38975e91feaSRahul Maheshwari ${ipmi_cmd}= Catenate user set name ${userid} ${username} 39075e91feaSRahul Maheshwari ${resp}= Run IPMI Standard Command ${ipmi_cmd} 39175e91feaSRahul Maheshwari ${user_info}= Get User Info ${userid} 39275e91feaSRahul Maheshwari Should Be Equal ${user_info['user_name']} ${username} 39375e91feaSRahul Maheshwari 39475e91feaSRahul Maheshwari 39575e91feaSRahul MaheshwariSet Channel Access 39675e91feaSRahul Maheshwari [Documentation] Verify that user is able to run IPMI command 39775e91feaSRahul Maheshwari ... with given username and password. 39875e91feaSRahul Maheshwari [Arguments] ${userid} ${options} ${channel}=1 39975e91feaSRahul Maheshwari 40075e91feaSRahul Maheshwari # Description of argument(s): 40175e91feaSRahul Maheshwari # userid The user ID (e.g. "1", "2", etc.). 40275e91feaSRahul Maheshwari # options Set channel command options (e.g. 40375e91feaSRahul Maheshwari # "link=on", "ipmi=on", etc.). 40475e91feaSRahul Maheshwari # channel_number The user's channel number (e.g. "1"). 40575e91feaSRahul Maheshwari 40675e91feaSRahul Maheshwari ${ipmi_cmd}= Catenate SEPARATOR= 40775e91feaSRahul Maheshwari ... channel setaccess${SPACE}${channel}${SPACE}${userid} 40875e91feaSRahul Maheshwari ... ${SPACE}${options} 40975e91feaSRahul Maheshwari Run IPMI Standard Command ${ipmi_cmd} 4103e61ce66SRahul Maheshwari 4113e61ce66SRahul Maheshwari 4123e61ce66SRahul MaheshwariDelete All Non Root IPMI User 4133e61ce66SRahul Maheshwari [Documentation] Delete all non-root IPMI user. 4143e61ce66SRahul Maheshwari 4153e61ce66SRahul Maheshwari FOR ${userid} IN RANGE 2 16 4163e61ce66SRahul Maheshwari ${user_info}= Get User Info ${userid} 4173e61ce66SRahul Maheshwari Run Keyword If "${user_info['user_name']}" != "" 4183e61ce66SRahul Maheshwari ... Run IPMI Standard Command user set name ${userid} "" 419378cc049SGeorge Keishing Sleep 10s 4203e61ce66SRahul Maheshwari END 421