1*** Settings *** 2Documentation Methods to execute commands on BMC and collect 3... data to a list of FFDC files 4 5Resource openbmc_ffdc_utils.robot 6Resource rest_client.robot 7 8 9*** Keywords *** 10 11################################################################ 12# Method : Call FFDC Methods # 13# Execute the user define keywords from the FFDC List # 14# Unlike any other keywords this will call into the # 15# list of keywords defined in the FFDC list at one go # 16################################################################ 17 18Call FFDC Methods 19 [Documentation] Calls into FFDC Keyword index list 20 21 @{entries}= Get ffdc method index 22 :FOR ${index} IN @{entries} 23 \ Method Call Keyword List ${index} 24 25 26Method Call Keyword List 27 [Documentation] Iterate the list through keyword index 28 [Arguments] ${index} 29 30 @{method_list}= Get ffdc method call ${index} 31 :FOR ${method} IN @{method_list} 32 \ Execute Keyword Method ${method[1]} 33 34 35Execute Keyword Method 36 [Documentation] Calls into BMC method keywords. Don't let one 37 ... failure skips the remaining. Get whatever data 38 ... it could gather at worse case scenario. 39 [Arguments] ${keyword_name} 40 41 Run Keyword And Continue On Failure ${keyword_name} 42 43 44################################################################ 45# Method : BMC FFDC Manifest # 46# Execute command on BMC and write to ffdc_report.txt # 47################################################################ 48 49BMC FFDC Manifest 50 [Documentation] Get the commands index for the FFDC_BMC_CMD, 51 ... login to BMC and execute commands. 52 Open Connection And Log In 53 54 @{entries}= Get ffdc cmd index 55 :FOR ${index} IN @{entries} 56 \ Iterate BMC Command List Pairs ${index} 57 58 59Iterate BMC Command List Pairs 60 [Documentation] Feed in key pair list from dictionary to execute 61 [Arguments] ${key_index} 62 63 @{cmd_list}= Get ffdc bmc cmd ${key_index} 64 Set Suite Variable ${ENTRY_INDEX} ${key_index} 65 :FOR ${cmd} IN @{cmd_list} 66 \ Execute Command and Write FFDC ${cmd[0]} ${cmd[1]} 67 68 69Execute Command and Write FFDC 70 [Documentation] Execute command on BMC and write to ffdc 71 ... By default to ffdc_report.txt file else to 72 ... specified file path. 73 [Arguments] ${key_index} 74 ... ${cmd} 75 ... ${logpath}=${FFDC_FILE_PATH} 76 77 Run Keyword If '${logpath}' == '${FFDC_FILE_PATH}' 78 ... Write Cmd Output to FFDC File ${key_index} ${cmd} 79 80 ${stdout} ${stderr}= 81 ... Execute Command ${cmd} return_stderr=True 82 83 # Write stdout data on success and error msg to the file on failure 84 Run Keyword If '${stderr}' == '${EMPTY}' 85 ... Write Data to File ${stdout}${\n} ${logpath} 86 ... ELSE Run Keyword Write Data to File ${stderr}${\n} ${logpath} 87 88 89################################################################ 90# Method : BMC FFDC Files # 91# Execute command on BMC and write to individual file # 92# based on the file name pre-defined in the list # 93################################################################ 94 95BMC FFDC Files 96 [Documentation] Get the command list and iterate 97 Open Connection And Log In 98 @{entries}= Get ffdc file index 99 :FOR ${index} IN @{entries} 100 \ Create File and Write Data ${index} 101 102 103Create File and Write Data 104 [Documentation] Create files to current FFDC log directory, 105 ... executes command and write to corresponding 106 ... file name in the current FFDC directory. 107 [Arguments] ${key_index} 108 109 @{cmd_list}= Get ffdc bmc file ${key_index} 110 :FOR ${cmd} IN @{cmd_list} 111 \ ${logpath}= Catenate SEPARATOR= ${LOG_PREFIX} ${cmd[0]} 112 \ Execute Command and Write FFDC ${cmd[0]} ${cmd[1]} ${logpath} 113 114 115################################################################ 116# Method : Log Test Case Status # 117# Creates test result history footprint for reference # 118################################################################ 119 120Log Test Case Status 121 [Documentation] Test case execution result history. 122 ... Create once and append to this file 123 ... logs/test_history.txt 124 ... Format Date:Test suite:Test case:Status 125 ... 20160909214053719992:Test Warmreset:Test WarmReset via REST:FAIL 126 Create Directory ${FFDC_LOG_PATH} 127 128 ${exist}= Run Keyword and Return Status 129 ... OperatingSystem.File Should Exist ${TEST_HISTORY} 130 131 Run Keyword If '${exist}' == '${False}' 132 ... Create File ${TEST_HISTORY} 133 134 ${cur_time}= Get Current Time Stamp 135 136 Append To File ${TEST_HISTORY} 137 ... ${cur_time}:${SUITE_NAME}:${TEST_NAME}:${TEST_STATUS}${\n} 138 139 140Log FFDC Get Requests 141 [Documentation] Create file in current FFDC log directory. 142 ... Do openbmc get request and write to 143 ... corresponding file name. 144 ... JSON pretty print for logging to file. 145 [Arguments] ${key_index} 146 147 @{cmd_list}= Get ffdc get request ${key_index} 148 :FOR ${cmd} IN @{cmd_list} 149 \ ${logpath}= Catenate SEPARATOR= ${LOG_PREFIX} ${cmd[0]} 150 \ ${resp}= OpenBMC Get Request ${cmd[1]} 151 \ ${status}= Run Keyword and Return Status 152 ... Should Be Equal As Strings ${resp.status_code} ${HTTP_OK} 153 \ Run Keyword If '${status}' == '${False}' Continue For Loop 154 \ ${jsondata}= to json ${resp.content} pretty_print=True 155 \ Write Data to File ${\n}${jsondata}${\n} ${logpath} 156 157 158BMC FFDC Get Requests 159 [Documentation] Get the command list and iterate 160 Open Connection And Log In 161 @{entries}= Get ffdc get request index 162 :FOR ${index} IN @{entries} 163 \ Log FFDC Get Requests ${index} 164 165 166Log OS FFDC 167 [Documentation] Create file in current FFDC log directory. 168 ... Executes OS command and write to 169 ... corresponding file name. 170 [Arguments] ${key_index} 171 172 Open Connection And Log In host=${OS_HOST} username=${OS_USERNAME} 173 ... password=${OS_PASSWORD} 174 @{cmd_list}= get ffdc os all distros call ${key_index} 175 :FOR ${cmd} IN @{cmd_list} 176 \ ${logpath}= Catenate SEPARATOR= ${LOG_PREFIX} ${cmd[0]} 177 \ Execute Command and Write FFDC ${cmd[0]} ${cmd[1]} ${logpath} 178 179 180OS FFDC Files 181 [Documentation] Get the command list and iterate 182 183 Return From Keyword If '${OS_HOST}' == '${EMPTY}' 184 ... No OS Host Provided 185 @{entries}= Get ffdc os all distros index 186 :FOR ${index} IN @{entries} 187 \ Log OS FFDC ${index} 188