blob: d3200592f2197f8b43b45aba3ab1e3ce55356800 [file] [log] [blame]
Rahul Maheshwariad676bf2017-06-22 15:06:05 -05001*** Settings ***
2Documentation This module provides general keywords for dump.
3
Rahul Maheshwari1612ac92017-08-30 14:42:32 -05004Library bmc_ssh_utils.py
Sushil Singh468d85f2022-11-30 07:33:36 -06005Variables ../data/variables.py
Rahul Maheshwariad676bf2017-06-22 15:06:05 -05006
7*** Variables ***
8
9*** Keywords ***
10
11Create User Initiated Dump
12 [Documentation] Generate user initiated dump and return
Steven Sombara011c022019-01-16 18:13:52 -060013 ... the dump id number (e.g., "5"). Optionally return EMPTY
14 ... if out of dump space.
15 [Arguments] ${check_out_of_space}=${False}
16
17 # Description of Argument(s):
18 # check_out_of_space If ${False}, a dump will be created and
19 # its dump_id will be returned.
20 # If ${True}, either the dump_id will be
21 # returned, or the value ${EMPTY} will be
22 # returned if out of dump space was
23 # detected when creating the dump.
Rahul Maheshwariad676bf2017-06-22 15:06:05 -050024
George Keishing1dc8a1e2021-08-03 04:49:38 -050025 ${resp}= OpenBMC Get Request ${REST_DUMP_URI}
Rahul Maheshwaria89ff9e2020-09-25 05:04:33 -050026 Run Keyword If '${resp.status_code}' == '${HTTP_NOT_FOUND}'
George Keishing1dc8a1e2021-08-03 04:49:38 -050027 ... Set Global Variable ${REST_DUMP_URI} /xyz/openbmc_project/dump/
Rahul Maheshwaria89ff9e2020-09-25 05:04:33 -050028
Rahul Maheshwariad676bf2017-06-22 15:06:05 -050029 ${data}= Create Dictionary data=@{EMPTY}
30 ${resp}= OpenBMC Post Request
George Keishing1dc8a1e2021-08-03 04:49:38 -050031 ... ${REST_DUMP_URI}action/CreateDump data=${data} quiet=${1}
Steven Sombara011c022019-01-16 18:13:52 -060032
33 Run Keyword If '${check_out_of_space}' == '${False}'
George Keishing656eb4a2019-09-03 03:48:01 -050034 ... Run Keyword And Return Get The Dump Id ${resp}
35 ... ELSE
36 ... Run Keyword And Return Check For Too Many Dumps ${resp}
Steven Sombara011c022019-01-16 18:13:52 -060037
38
39Get The Dump Id
40 [Documentation] Wait for the dump to be created. Return the
41 ... dump id number (e.g., "5").
42 [Arguments] ${resp}
43
44 # Description of Argument(s):
45 # resp Response object from action/Create Dump attempt.
46 # Example object:
47 # {
48 # "data": 5,
49 # "message": "200 OK",
50 # "status": "ok"
51 # },
52 # The "data" field conveys the id number of the created dump.
Rahul Maheshwariad676bf2017-06-22 15:06:05 -050053
54 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
George Keishing73c4ebf2017-11-13 07:10:28 -060055
George Keishingfbd67002022-08-01 11:24:03 -050056 Run Keyword If ${resp.json()["data"]} == ${None}
George Keishing73c4ebf2017-11-13 07:10:28 -060057 ... Fail Dump id returned null.
58
Rahul Maheshwariad676bf2017-06-22 15:06:05 -050059 ${dump_id}= Set Variable ${json["data"]}
60
Rahul Maheshwarie2cd17f2017-09-26 21:26:50 -050061 Wait Until Keyword Succeeds 3 min 15 sec Check Dump Existence
Rahul Maheshwariad676bf2017-06-22 15:06:05 -050062 ... ${dump_id}
63
64 [Return] ${dump_id}
65
66
Steven Sombara011c022019-01-16 18:13:52 -060067Check For Too Many Dumps
68 [Documentation] Return the dump_id number, or return ${EMPTY} if dump
69 ... creation failed due to too many dumps.
70 [Arguments] ${resp}
71
72 # Description of Argument(s):
73 # resp Response object from action/Create Dump attempt.
74 # Example object if there are too many dumps:
George Keishing506756e2019-08-06 01:07:55 -050075 # {
Steven Sombara011c022019-01-16 18:13:52 -060076 # "data": {
George Keishing506756e2019-08-06 01:07:55 -050077 # "description": "xyz.openbmc_project.Dump.Create.Error.QuotaExceeded"
78 # },
79 # "message": "Dump not captured due to a cap.",
Steven Sombara011c022019-01-16 18:13:52 -060080 # "status": "error"
George Keishing506756e2019-08-06 01:07:55 -050081 # }
Steven Sombara011c022019-01-16 18:13:52 -060082
83 # If dump was created normally, return the dump_id number.
84 Run Keyword If '${resp.status_code}' == '${HTTP_OK}'
85 ... Run Keyword And Return Get The Dump Id ${resp}
86
George Keishingfbd67002022-08-01 11:24:03 -050087 ${exception}= Set Variable ${resp.json()["message"]}
Steven Sombara011c022019-01-16 18:13:52 -060088 ${at_capacity}= Set Variable Dump not captured due to a cap
89 ${too_many_dumps}= Evaluate $at_capacity in $exception
Michael Walshc108e422019-03-28 12:27:18 -050090 Printn
Steven Sombara011c022019-01-16 18:13:52 -060091 Rprint Vars exception too_many_dumps
92 # If there are too many dumps, return ${EMPTY}, otherwise Fail.
93 ${status}= Run Keyword If ${too_many_dumps} Set Variable ${EMPTY}
94 ... ELSE Fail msg=${exception}.
95
96 [Return] ${status}
97
98
Rahul Maheshwari953038b2017-10-17 05:08:59 -050099Verify No Dump In Progress
100 [Documentation] Verify no dump in progress.
101
Rahul Maheshwari4cfdc392017-10-25 09:44:47 -0500102 ${dump_progress} ${stderr} ${rc}= BMC Execute Command ls /tmp
103 Should Not Contain ${dump_progress} obmcdump
Rahul Maheshwari953038b2017-10-17 05:08:59 -0500104
105
Rahul Maheshwariad676bf2017-06-22 15:06:05 -0500106Check Dump Existence
107 [Documentation] Verify if given dump exist.
108 [Arguments] ${dump_id}
109
110 # Description of Argument(s):
111 # dump_id An integer value that identifies a particular dump
112 # object(e.g. 1, 3, 5).
113
George Keishing1dc8a1e2021-08-03 04:49:38 -0500114 ${resp}= OpenBMC Get Request ${REST_DUMP_URI}
Rahul Maheshwaria89ff9e2020-09-25 05:04:33 -0500115 Run Keyword If '${resp.status_code}' == '${HTTP_NOT_FOUND}'
George Keishing73d8f242021-03-19 08:51:56 -0500116 ... Set Global Variable ${DUMP_ENTRY_URI} /xyz/openbmc_project/dump/entry/
Rahul Maheshwaria89ff9e2020-09-25 05:04:33 -0500117
George Keishing8d693382018-12-18 12:15:04 -0600118 ${resp}= OpenBMC Get Request ${DUMP_ENTRY_URI}${dump_id}
Rahul Maheshwariad676bf2017-06-22 15:06:05 -0500119 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
120
121
122Delete BMC Dump
123 [Documentation] Deletes a given bmc dump.
124 [Arguments] ${dump_id}
125
126 # Description of Argument(s):
Gunnar Mills28e403b2017-10-25 16:16:38 -0500127 # dump_id An integer value that identifies a particular dump (e.g. 1, 3).
Rahul Maheshwariad676bf2017-06-22 15:06:05 -0500128
George Keishing1dc8a1e2021-08-03 04:49:38 -0500129 ${resp}= OpenBMC Get Request ${REST_DUMP_URI}
Rahul Maheshwaria89ff9e2020-09-25 05:04:33 -0500130 Run Keyword If '${resp.status_code}' == '${HTTP_NOT_FOUND}'
George Keishing73d8f242021-03-19 08:51:56 -0500131 ... Set Global Variable ${DUMP_ENTRY_URI} /xyz/openbmc_project/dump/entry/
Rahul Maheshwaria89ff9e2020-09-25 05:04:33 -0500132
George Keishingfbd67002022-08-01 11:24:03 -0500133 ${args}= Set Variable {"data": []}
Rahul Maheshwariad676bf2017-06-22 15:06:05 -0500134 ${resp}= OpenBMC Post Request
George Keishingfbd67002022-08-01 11:24:03 -0500135 ... ${DUMP_ENTRY_URI}${dump_id}/action/Delete data=${args}
Rahul Maheshwariad676bf2017-06-22 15:06:05 -0500136
137 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
138
139Delete All Dumps
140 [Documentation] Delete all dumps.
141
George Keishing1dc8a1e2021-08-03 04:49:38 -0500142 ${resp}= OpenBMC Get Request ${REST_DUMP_URI}
Rahul Maheshwaria89ff9e2020-09-25 05:04:33 -0500143 Run Keyword If '${resp.status_code}' == '${HTTP_NOT_FOUND}'
George Keishing73d8f242021-03-19 08:51:56 -0500144 ... Set Global Variable ${DUMP_ENTRY_URI} /xyz/openbmc_project/dump/entry/
Rahul Maheshwaria89ff9e2020-09-25 05:04:33 -0500145
Rahul Maheshwariad676bf2017-06-22 15:06:05 -0500146 # Check if dump entries exist, if not return.
George Keishing6a6e76d2017-09-14 08:19:17 -0500147 ${resp}= OpenBMC Get Request ${DUMP_ENTRY_URI}list quiet=${1}
Rahul Maheshwariad676bf2017-06-22 15:06:05 -0500148 Return From Keyword If ${resp.status_code} == ${HTTP_NOT_FOUND}
149
150 # Get the list of dump entries and delete them all.
151 ${dump_entries}= Get URL List ${DUMP_ENTRY_URI}
Marissa Garza20ccfc72020-06-19 12:51:10 -0500152 FOR ${entry} IN @{dump_entries}
153 ${dump_id}= Fetch From Right ${entry} /
154 Delete BMC Dump ${dump_id}
155 END
George Keishingc9fcd092017-09-20 09:24:37 -0500156
Rahul Maheshwaride5d6f12020-10-14 02:08:00 -0500157
Rahul Maheshwari95cbceb2020-10-21 23:25:08 -0500158Redfish Delete BMC Dump
Sushil Singh472177b2023-08-28 05:28:30 -0500159 [Documentation] Deletes a given BMC dump via Redfish.
Rahul Maheshwari95cbceb2020-10-21 23:25:08 -0500160 [Arguments] ${dump_id}
161
162 # Description of Argument(s):
163 # dump_id An integer value that identifies a particular dump (e.g. 1, 3).
164
ganesanb4d430282023-04-27 14:33:23 +0000165 Redfish.Delete /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries/${dump_id}
Rahul Maheshwari95cbceb2020-10-21 23:25:08 -0500166
167
Rahul Maheshwaride5d6f12020-10-14 02:08:00 -0500168Redfish Delete All BMC Dumps
169 [Documentation] Delete all BMC dumps via Redfish.
170
171 # Check if dump entries exist, if not return.
ganesanb4d430282023-04-27 14:33:23 +0000172 ${resp}= Redfish.Get /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries
Rahul Maheshwaride5d6f12020-10-14 02:08:00 -0500173 Return From Keyword If ${resp.dict["Members@odata.count"]} == ${0}
174
ganesanb4d430282023-04-27 14:33:23 +0000175 Redfish.Post /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Actions/LogService.ClearLog
Rahul Maheshwaride5d6f12020-10-14 02:08:00 -0500176
177
Sushil Singh472177b2023-08-28 05:28:30 -0500178Redfish Get All System Dumps
179 [Documentation] Get the system dump log entries.
180
181 ${resp}= Redfish.Get ${REDFISH_SYSTEM_DUMP}
182
183 [Return] ${resp.dict}
184
185
Sushil Singh468d85f2022-11-30 07:33:36 -0600186Get Redfish BMC Dump Log Entries
187 [Documentation] Get the BMC dump log entries.
188
189 ${resp}= Redfish.Get ${REDFISH_DUMP_URI}
190
191 [Return] ${resp.dict}
192
193
George Keishing2ef6a7d2021-05-19 09:05:32 -0500194Redfish Delete All System Dumps
195 [Documentation] Delete all system dumps via Redfish.
196
197 Redfish.Post /redfish/v1/Systems/system/LogServices/Dump/Actions/LogService.ClearLog
198
199
Sushil Singh468d85f2022-11-30 07:33:36 -0600200Redfish BMC Dump Should Not Exist
201 [Documentation] Verify that there is no BMC dump at dump URI.
202
203 # Verify no dump exists.
204 ${dump_entries}= Get Redfish BMC Dump Log Entries
205 Should Be Equal As Integers 0 ${dump_entries['Members@odata.count']}
206
207
shilpa-parameshbc1e3942023-09-25 12:56:17 -0500208Redfish BMC Dump Should Exist
209 [Documentation] Check if BMC dump is generated.
210
211 ${dump_entries}= Get Redfish BMC Dump Log Entries
212 Should Be True ${dump_entries['Members@odata.count']} >= 1 msg=No BMC dump generated.
213
214
George Keishingc9fcd092017-09-20 09:24:37 -0500215Delete All BMC Dump
216 [Documentation] Delete all BMC dump entries using "DeleteAll" interface.
217
George Keishing1dc8a1e2021-08-03 04:49:38 -0500218 ${resp}= OpenBMC Get Request ${REST_DUMP_URI}
Rahul Maheshwaria89ff9e2020-09-25 05:04:33 -0500219 Run Keyword If '${resp.status_code}' == '${HTTP_NOT_FOUND}'
George Keishing1dc8a1e2021-08-03 04:49:38 -0500220 ... Set Global Variable ${REST_DUMP_URI} /xyz/openbmc_project/dump/
Rahul Maheshwaria89ff9e2020-09-25 05:04:33 -0500221
George Keishingfbd67002022-08-01 11:24:03 -0500222 ${args}= Set Variable {"data": []}
223 ${resp}= Openbmc Post Request ${REST_DUMP_URI}action/DeleteAll data=${args}
George Keishingc9fcd092017-09-20 09:24:37 -0500224 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
George Keishingdc428762017-11-11 12:37:12 -0600225
George Keishingdc428762017-11-11 12:37:12 -0600226Dump Should Not Exist
227 [Documentation] Verify that BMC dumps do not exist.
228
George Keishing1dc8a1e2021-08-03 04:49:38 -0500229 ${resp}= OpenBMC Get Request ${REST_DUMP_URI}
Rahul Maheshwaria89ff9e2020-09-25 05:04:33 -0500230 Run Keyword If '${resp.status_code}' == '${HTTP_NOT_FOUND}'
George Keishing73d8f242021-03-19 08:51:56 -0500231 ... Set Global Variable ${DUMP_ENTRY_URI} /xyz/openbmc_project/dump/entry/
Rahul Maheshwaria89ff9e2020-09-25 05:04:33 -0500232
George Keishing8d693382018-12-18 12:15:04 -0600233 ${resp}= OpenBMC Get Request ${DUMP_ENTRY_URI}list quiet=${1}
George Keishingdc428762017-11-11 12:37:12 -0600234 Should Be Equal As Strings ${resp.status_code} ${HTTP_NOT_FOUND}
235
Steven Sombar336fa972019-11-07 13:12:58 -0600236Check Existence Of BMC Dump File
Sivas SRR7aabd792017-10-18 21:28:23 -0500237 [Documentation] Verify existence of BMC dump file.
238 [Arguments] ${dump_id}
239
240 # Description of argument(s):
241 # dump_id BMC dump identifier
242
243 ${dump_check_cmd}= Set Variable
244 ... ls /var/lib/phosphor-debug-collector/dumps
245
246 # Output of sample BMC Execute command with '2' as dump id is as follows
247 # ls /var/lib/phosphor-debug-collector/dumps/2
248 # obmcdump_2_XXXXXXXXXX.tar.xz
249 ${file_there} ${stderr} ${rc}= BMC Execute Command
250 ... ${dump_check_cmd}/${dump_id}
251 Should End With ${file_there} tar.xz msg=BMC dump file not found.
Rahul Maheshwari1612ac92017-08-30 14:42:32 -0500252
253Get Dump Entries
254 [Documentation] Return dump entries list.
255
George Keishing1dc8a1e2021-08-03 04:49:38 -0500256 ${resp}= OpenBMC Get Request ${REST_DUMP_URI}
Rahul Maheshwaria89ff9e2020-09-25 05:04:33 -0500257 Run Keyword If '${resp.status_code}' == '${HTTP_NOT_FOUND}'
George Keishing73d8f242021-03-19 08:51:56 -0500258 ... Set Global Variable ${DUMP_ENTRY_URI} /xyz/openbmc_project/dump/entry/
Rahul Maheshwaria89ff9e2020-09-25 05:04:33 -0500259
Rahul Maheshwari1612ac92017-08-30 14:42:32 -0500260 ${dump_entries}= Get URL List ${DUMP_ENTRY_URI}
261 [Return] ${dump_entries}
262
Rahul Maheshwari1612ac92017-08-30 14:42:32 -0500263Trigger Core Dump
264 [Documentation] Trigger core dump.
265
266 # Find the pid of the active ipmid and kill it.
George Keishingbfd5c8f2018-07-11 10:27:28 -0500267 ${cmd_buf}= Catenate kill -s SEGV $(ps | egrep ' ipmid$' |
Rahul Maheshwari1612ac92017-08-30 14:42:32 -0500268 ... egrep -v grep | \ cut -c1-6)
269
270 ${cmd_output} ${stderr} ${rc}= BMC Execute Command ${cmd_buf}
271 Should Be Empty ${stderr} msg=BMC execute command error.
272 Should Be Equal As Integers ${rc} ${0}
273 ... msg=BMC execute command return code is not zero.
Anusha Dathatrifd350222021-04-08 06:07:49 -0500274
Anusha Dathatri83ddaf92022-08-12 03:31:54 -0500275Initiate BMC Dump Using Redfish And Return Task Id
276 [Documentation] Initiate BMC dump via Redfish and return its task ID.
277
278 ${payload}= Create Dictionary DiagnosticDataType=Manager
279 ${resp}= Redfish.Post
ganesanb4d430282023-04-27 14:33:23 +0000280 ... /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Actions/LogService.CollectDiagnosticData
Anusha Dathatri83ddaf92022-08-12 03:31:54 -0500281 ... body=${payload} valid_status_codes=[${HTTP_ACCEPTED}]
282
283 # Example of response from above Redfish POST request.
284 # "@odata.id": "/redfish/v1/TaskService/Tasks/0",
285 # "@odata.type": "#Task.v1_4_3.Task",
286 # "Id": "0",
287 # "TaskState": "Running",
288 # "TaskStatus": "OK"
289
290 [Return] ${resp.dict['Id']}
291
Tim Lee792e31e2021-12-10 14:10:46 +0800292Create User Initiated BMC Dump Via Redfish
293 [Documentation] Generate user initiated BMC dump via Redfish and return the dump id number (e.g., "5").
manashsarmafcbfdf62022-12-07 06:36:28 -0600294 [Arguments] ${skip_dump_completion}=0
295
296 # Description of Argument(s):
297 # skip_dump_completion If skip_dump_completion is set to 0, this
298 # keyword will waiting for BMC dump to
299 # complete and returns the dump id.
300 # Otherwise, the keyword is skipped after
301 # initiating BMC dump and returns dump task id.
Anusha Dathatrifd350222021-04-08 06:07:49 -0500302
303 ${payload}= Create Dictionary DiagnosticDataType=Manager
ganesanb4d430282023-04-27 14:33:23 +0000304 ${resp}= Redfish.Post /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Actions/LogService.CollectDiagnosticData
Tim Lee792e31e2021-12-10 14:10:46 +0800305 ... body=${payload} valid_status_codes=[${HTTP_ACCEPTED}]
Anusha Dathatrifd350222021-04-08 06:07:49 -0500306
307 # Example of response from above Redfish POST request.
308 # "@odata.id": "/redfish/v1/TaskService/Tasks/0",
309 # "@odata.type": "#Task.v1_4_3.Task",
310 # "Id": "0",
311 # "TaskState": "Running",
312 # "TaskStatus": "OK"
313
manashsarmafcbfdf62022-12-07 06:36:28 -0600314 Run Keyword If ${skip_dump_completion} != 0 Return From Keyword ${resp.dict['Id']}
Tim Lee792e31e2021-12-10 14:10:46 +0800315 Wait Until Keyword Succeeds 5 min 15 sec Check Task Completion ${resp.dict['Id']}
Anusha Dathatrifd350222021-04-08 06:07:49 -0500316 ${task_id}= Set Variable ${resp.dict['Id']}
Tim Lee792e31e2021-12-10 14:10:46 +0800317
318 ${task_dict}= Redfish.Get Properties /redfish/v1/TaskService/Tasks/${task_id}
319
320 # Example of HttpHeaders field of task details.
321 # "Payload": {
322 # "HttpHeaders": [
323 # "Host: <BMC_IP>",
324 # "Accept-Encoding: identity",
325 # "Connection: Keep-Alive",
326 # "Accept: */*",
327 # "Content-Length: 33",
ganesanb4d430282023-04-27 14:33:23 +0000328 # "Location: /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries/2"]
Tim Lee792e31e2021-12-10 14:10:46 +0800329 # ],
330 # "HttpOperation": "POST",
331 # "JsonBody": "{\"DiagnosticDataType\":\"Manager\"}",
ganesanb4d430282023-04-27 14:33:23 +0000332 # "TargetUri": "/redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Actions/LogService.CollectDiagnosticData"
Tim Lee792e31e2021-12-10 14:10:46 +0800333 # }
334
335 [Return] ${task_dict["Payload"]["HttpHeaders"][-1].split("/")[-1]}
Anusha Dathatrifd350222021-04-08 06:07:49 -0500336
337Auto Generate BMC Dump
338 [Documentation] Auto generate BMC dump.
339
Anusha Dathatri21961472021-06-10 03:16:35 -0500340 ${cmd}= Catenate busctl --verbose call xyz.openbmc_project.Dump.Manager
Anusha Dathatrif09efb82021-08-18 10:09:33 -0500341 ... /xyz/openbmc_project/dump/bmc xyz.openbmc_project.Dump.Create CreateDump a{sv} 0
Anusha Dathatri21961472021-06-10 03:16:35 -0500342 ${stdout} ${stderr} ${rc}=
343 ... BMC Execute Command ${cmd}
Anusha Dathatrifd350222021-04-08 06:07:49 -0500344 [Return] ${stdout} ${stderr} ${rc}
345
346Get Dump Size
347 [Documentation] Get dump size.
Anusha Dathatrieed0e592021-04-21 03:17:12 -0500348 [Arguments] ${dump_uri}
Anusha Dathatrifd350222021-04-08 06:07:49 -0500349
350 # Description of argument(s):
Anusha Dathatrieed0e592021-04-21 03:17:12 -0500351 # dump_uri Dump URI
352 # (Eg. /xyz/openbmc_project/dump/bmc/entry/1).
Anusha Dathatrifd350222021-04-08 06:07:49 -0500353
Anusha Dathatrieed0e592021-04-21 03:17:12 -0500354 # Example of Dump entry.
355 # "data": {
356 # "CompletedTime": 1616760931,
357 # "Elapsed": 1616760931,
358 # "OffloadUri": "",
359 # "Offloaded": false,
360 # "Password": "",
361 # "Size": 3056,
362 # "SourceDumpId": 117440513,
363 # "StartTime": 1616760931,
364 # "Status": "xyz.openbmc_project.Common.Progress.OperationStatus.Completed",
365 # "VSPString": ""
366 # },
Anusha Dathatrifd350222021-04-08 06:07:49 -0500367
Anusha Dathatrieed0e592021-04-21 03:17:12 -0500368 Log ${dump_uri}
369 ${dump_data}= Redfish.Get Properties ${dump_uri}
370 [Return] ${dump_data["data"]["Size"]}
Anusha Dathatrifd350222021-04-08 06:07:49 -0500371
372Get Dump ID
Anusha Dathatrieed0e592021-04-21 03:17:12 -0500373 [Documentation] Return dump ID.
Anusha Dathatrifd350222021-04-08 06:07:49 -0500374 [Arguments] ${task_id}
375
376 # Description of argument(s):
377 # task_id Task ID.
378
379 # Example of HttpHeaders field of task details.
380 # "Payload": {
381 # "HttpHeaders": [
382 # "Host: <BMC_IP>",
383 # "Accept-Encoding: identity",
384 # "Connection: Keep-Alive",
385 # "Accept: */*",
386 # "Content-Length: 33",
ganesanb4d430282023-04-27 14:33:23 +0000387 # "Location: /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries/2"]
Anusha Dathatrifd350222021-04-08 06:07:49 -0500388 # ],
389 # "HttpOperation": "POST",
390 # "JsonBody": "{\"DiagnosticDataType\":\"Manager\"}",
391 # "TargetUri":
ganesanb4d430282023-04-27 14:33:23 +0000392 # "/redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Actions/LogService.CollectDiagnosticData"
Anusha Dathatrifd350222021-04-08 06:07:49 -0500393 # }
394
395 ${task_dict}= Redfish.Get Properties /redfish/v1/TaskService/Tasks/${task_id}
396 ${key} ${value}= Set Variable ${task_dict["Payload"]["HttpHeaders"][-1].split(":")}
397 Run Keyword If '${key}' != 'Location' Fail
Anusha Dathatrifa4209e2021-06-30 00:48:39 -0500398 [Return] ${value.strip('/').split('/')[-1]}
Anusha Dathatrifd350222021-04-08 06:07:49 -0500399
400Get Task Status
401 [Documentation] Return task status.
402 [Arguments] ${task_id}
403
404 # Description of argument(s):
405 # task_id Task ID.
406
407 ${resp}= Redfish.Get Properties /redfish/v1/TaskService/Tasks/${task_id}
408 [Return] ${resp['TaskState']}
409
Anusha Dathatrieed0e592021-04-21 03:17:12 -0500410Check Task Completion
411 [Documentation] Check if the task is complete.
412 [Arguments] ${task_id}
413
414 # Description of argument(s):
415 # task_id Task ID.
416
Tim Lee792e31e2021-12-10 14:10:46 +0800417 ${task_dict}= Redfish.Get Properties /redfish/v1/TaskService/Tasks/${task_id}
418 Should Be Equal As Strings ${task_dict['TaskState']} Completed
Anusha Dathatrieed0e592021-04-21 03:17:12 -0500419
Anusha Dathatrifd350222021-04-08 06:07:49 -0500420Get Dump ID And Status
421 [Documentation] Return dump ID and status.
422 [Arguments] ${task_id}
423
424 # Description of argument(s):
425 # task_id Task ID.
426
Anusha Dathatri66af3c42022-08-08 10:18:48 -0500427 Wait Until Keyword Succeeds 10 min 15 sec Check Task Completion ${task_id}
428 ${dump_id}= Get Dump ID ${task_id}
429 [Return] ${dump_id} Completed
aravinth0510350edc82022-09-30 06:33:48 +0000430
431
432Create BMC User Dump
433 [Documentation] Generate user initiated BMC dump via Redfish and return
434 ... the task instance Id and response object (e.g., "5").
435
436 ${payload}= Create Dictionary DiagnosticDataType=Manager
ganesanb4d430282023-04-27 14:33:23 +0000437 ${resp}= Redfish.Post /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Actions/LogService.CollectDiagnosticData
aravinth0510350edc82022-09-30 06:33:48 +0000438 ... body=${payload} valid_status_codes=[${HTTP_ACCEPTED}]
439
440 ${ip_resp}= Evaluate json.loads(r'''${resp.text}''') json
441
442 Return From Keyword ${ip_resp["Id"]} ${resp}
443
444
445Wait For Task Completion
446 [Documentation] Check whether the state of task instance matches any of the
447 ... expected completion states before maximum number of retries exceeds and
448 ... exit loop in case completion state is met.
449 [Arguments] ${task_id} ${expected_status} ${retry_max_count}=300
450 ... ${check_state}=${FALSE}
451
452 # Description of argument(s):
453 # task_id the task id for which completion is
454 # to be monitored.
455 # expected_status the task state which is to be considered as the
456 # end of task life cycle.
457 # retry_max_count the maximum number of retry count to wait for
458 # task to reach its completion state. Default
459 # value of retry_max_count is 300.
460 # check_state if set as TRUE, the task state will be
461 # monitored whether the task state value is
462 # valid throughout task life cycle until
463 # expected completion state is reached.
464 # Default value of check_state is FALSE.
465
466 FOR ${retry} IN RANGE ${retry_max_count}
467 ${resp}= Redfish.Get Properties /redfish/v1/TaskService/Tasks/${task_id}
468 ${current_task_state}= Set Variable ${resp["TaskState"]}
469 Rprint Vars current_task_state
470
471 Run Keyword If ${check_state} == ${TRUE} Should Be True
472 ... '${resp["TaskState"]}' in ${allowed_task_state}
473 ... msg=Verify task state is valid
474
475 Exit For Loop If
476 ... '${resp["TaskState"]}' in ${expected_status}
477
478 Sleep 5s
harikaVi715ddf62022-11-29 01:01:59 -0600479 END
480
481Get Dump Status In BMC
Sushil Singh468d85f2022-11-30 07:33:36 -0600482 [Documentation] Get dump status from BMC using busctl method.
harikaVi715ddf62022-11-29 01:01:59 -0600483 [Arguments] ${dump_uri}
484
485 # Description of argument(s):
486 # dump_uri Dump URI E.g: /xyz/openbmc_project/dump/bmc/entry/7.
487
488 ${cmd}= Catenate busctl get-property xyz.openbmc_project.Dump.Manager
489 ... ${dump_uri} xyz.openbmc_project.Common.Progress Status
490
491 ${stdout} ${stderr} ${rc}= BMC Execute Command ${cmd}
492 Log ${stdout}
493 # Example output:
494 # s "xyz.openbmc_project.Common.Progress.OperationStatus.Completed".
495
496 ${status}= Set Variable ${stdout.split('.')[-1].strip('"')}
497 [Return] ${status}
498
499Verify Dump Status In BMC
500 [Documentation] Verify Dump Status in BMC.
501 [Arguments] ${dump_uri} ${expected_dump_status}
502
503 # Description of argument(s):
504 # dump_uri Dump URI E.g: /xyz/openbmc_project/dump/bmc/entry/7.
505 # expected_dump_status Expected Dump Status (Completed or Failed etc).
506
507 ${dump_status}= Get Dump Status In BMC ${dump_uri}
508 Should Be Equal ${dump_status} ${expected_dump_status}