blob: 7520483673d272d50fa544259a91cfe7132ceb52 [file] [log] [blame]
George Keishing72abe822019-07-29 08:03:40 -05001*** Settings ***
2Documentation Redfish BMC and PNOR software utilities keywords.
3
4Library code_update_utils.py
5Library gen_robot_valid.py
Sushil Singh87dcee12019-08-07 13:13:13 -05006Library tftp_update_utils.py
George Keishing72abe822019-07-29 08:03:40 -05007Resource bmc_redfish_utils.robot
Sushil Singh32e2b582019-08-16 04:58:24 -05008Resource boot_utils.robot
George Keishing72abe822019-07-29 08:03:40 -05009
10*** Keywords ***
11
12Get Software Functional State
13 [Documentation] Return functional or active state of the software (i.e. True/False).
14 [Arguments] ${image_id}
15
16 # Description of argument(s):
17 # image_id The image ID (e.g. "acc9e073").
18
19 ${image_info}= Redfish.Get Properties /redfish/v1/UpdateService/FirmwareInventory/${image_id}
20
Sushil Singh8469a482020-07-30 04:19:10 -050021 ${sw_functional}= Run Keyword If
22 ... '${image_info["Description"]}' == 'BMC image' or '${image_info["Description"]}' == 'BMC update'
George Keishing72abe822019-07-29 08:03:40 -050023 ... Redfish.Get Attribute /redfish/v1/Managers/bmc FirmwareVersion
24 ... ELSE
25 ... Redfish.Get Attribute /redfish/v1/Systems/system BiosVersion
26
27 ${functional}= Run Keyword And Return Status
28 ... Should Be Equal ${sw_functional} ${image_info["Version"]}
29
30 [Return] ${functional}
31
32
33Get Software Inventory State
34 [Documentation] Return dictionary of the image type, version and functional state
35 ... of the software objects active on the system.
36
37 # User defined state for software objects.
38 # Note: "Functional" term refers to firmware which system is currently booted with.
39 # sw_inv_dict:
40 # [ace821ef]:
41 # [image_type]: Host update
George Keishing31029492019-07-30 13:14:13 -050042 # [image_id]: ace821ef
George Keishing72abe822019-07-29 08:03:40 -050043 # [functional]: True
44 # [version]: witherspoon-xx.xx.xx.xx
45 # [b9101858]:
46 # [image_type]: BMC update
George Keishing31029492019-07-30 13:14:13 -050047 # [image_id]: b9101858
George Keishing72abe822019-07-29 08:03:40 -050048 # [functional]: True
49 # [version]: 2.8.0-dev-150-g04508dc9f
50 # [c45eafa5]:
51 # [image_type]: BMC update
George Keishing31029492019-07-30 13:14:13 -050052 # [image_id]: c45eafa5
George Keishing72abe822019-07-29 08:03:40 -050053 # [functional]: False
54 # [version]: 2.8.0-dev-149-g1a8df5077
55
56 ${sw_member_list}= Redfish_Utils.Get Member List /redfish/v1/UpdateService/FirmwareInventory
57 &{sw_inv_dict}= Create Dictionary
58
59 # sw_member_list:
60 # [0]: /redfish/v1/UpdateService/FirmwareInventory/98744d76
61 # [1]: /redfish/v1/UpdateService/FirmwareInventory/9a8028ec
62 # [2]: /redfish/v1/UpdateService/FirmwareInventory/acc9e073
63
64 FOR ${uri_path} IN @{sw_member_list}
65 &{tmp_dict}= Create Dictionary
66 ${image_info}= Redfish.Get Properties ${uri_path}
67 Set To Dictionary ${tmp_dict} image_type ${image_info["Description"]}
George Keishing31029492019-07-30 13:14:13 -050068 Set To Dictionary ${tmp_dict} image_id ${uri_path.split("/")[-1]}
George Keishing72abe822019-07-29 08:03:40 -050069 ${functional}= Get Software Functional State ${uri_path.split("/")[-1]}
70 Set To Dictionary ${tmp_dict} functional ${functional}
George Keishing72abe822019-07-29 08:03:40 -050071 Set To Dictionary ${tmp_dict} version ${image_info["Version"]}
George Keishing31029492019-07-30 13:14:13 -050072 Set To Dictionary ${sw_inv_dict} ${uri_path.split("/")[-1]} ${tmp_dict}
George Keishing72abe822019-07-29 08:03:40 -050073 END
74
75 [Return] &{sw_inv_dict}
George Keishing31029492019-07-30 13:14:13 -050076
77
78Get Software Inventory State By Version
79 [Documentation] Return the software inventory record that matches the given software version.
80 [Arguments] ${software_version}
81
82 # If no matchine record can be found, return ${EMPTY}.
83
84 # Example of returned data:
85 # software_inventory_record:
86 # [image_type]: BMC update
87 # [image_id]: 1e662ba8
88 # [functional]: True
89 # [version]: 2.8.0-dev-150-g04508dc9f
90
91 # Description of argument(s):
92 # software_version A BMC or Host version (e.g "2.8.0-dev-150-g04508dc9f").
93
94 ${software_inventory}= Get Software Inventory State
95 # Filter out entries that don't match the criterion..
96 ${software_inventory}= Filter Struct ${software_inventory} [('version', '${software_version}')]
97 # Convert from dictionary to list.
98 ${software_inventory}= Get Dictionary Values ${software_inventory}
99 ${num_records}= Get Length ${software_inventory}
100
101 Return From Keyword If ${num_records} == ${0} ${EMPTY}
102
103 # Return the first list entry.
104 [Return] ${software_inventory}[0]
Sushil Singh87dcee12019-08-07 13:13:13 -0500105
106
Sushil Singhb2150da2020-12-07 07:05:42 -0600107Get BMC Functional Firmware
108 [Documentation] Get BMC functional firmware details.
109
110 ${sw_inv}= Get Functional Firmware BMC update
111 ${sw_inv}= Get Non Functional Firmware ${sw_inv} True
112
113 [Return] ${sw_inv}
114
115
116Get Functional Firmware
117 [Documentation] Get all the BMC firmware details.
118 [Arguments] ${image_type}
119
120 # Description of argument(s):
121 # image_type Image value can be either BMC update or Host update.
122
123 ${software_inventory}= Get Software Inventory State
124 ${bmc_inv}= Get BMC Firmware ${image_type} ${software_inventory}
125
126 [Return] ${bmc_inv}
127
128
129Get Non Functional Firmware
George Keishing16b3c7b2021-01-28 09:23:37 -0600130 [Documentation] Get BMC non functional firmware details.
Sushil Singh41540ea2021-01-07 06:59:17 -0600131 [Arguments] ${sw_inv} ${functional_state}
Sushil Singhb2150da2020-12-07 07:05:42 -0600132
133 # Description of argument(s):
George Keishing16b3c7b2021-01-28 09:23:37 -0600134 # sw_inv This dictionary contains all the BMC firmware details.
Sushil Singh41540ea2021-01-07 06:59:17 -0600135 # functional_state Functional state can be either True or False.
Sushil Singhb2150da2020-12-07 07:05:42 -0600136
Sushil Singh41540ea2021-01-07 06:59:17 -0600137 ${resp}= Filter Struct ${sw_inv} [('functional', ${functional_state})]
Sushil Singh3b6f9162021-05-20 06:47:47 -0500138
139 ${num_records}= Get Length ${resp}
140 Set Global Variable ${num_records}
141 Return From Keyword If ${num_records} == ${0} ${EMPTY}
142
Sushil Singhb2150da2020-12-07 07:05:42 -0600143 ${list_inv_dict}= Get Dictionary Values ${resp}
144
145 [Return] ${list_inv_dict}[0]
146
147
Sushil Singh87dcee12019-08-07 13:13:13 -0500148Redfish Upload Image And Check Progress State
149 [Documentation] Code update with ApplyTime.
Sushil Singh87dcee12019-08-07 13:13:13 -0500150
Sushil Singh87dcee12019-08-07 13:13:13 -0500151 Redfish Upload Image ${REDFISH_BASE_URI}UpdateService ${IMAGE_FILE_PATH}
152
153 ${image_id}= Get Latest Image ID
154 Rprint Vars image_id
155
George Keishingeb0b0842020-03-03 23:09:49 -0600156 ${manifest} ${stderr} ${rc}= BMC Execute Command cat /tmp/images/${image_id}/MANIFEST
157 Rprint Vars manifest
158
Sushil Singh8469a482020-07-30 04:19:10 -0500159 Wait Until Keyword Succeeds 1 min 05 sec
160 ... Check Image Update Progress State match_state='Disabled', 'Updating' image_id=${image_id}
161
Sushil Singh87dcee12019-08-07 13:13:13 -0500162 # Wait a few seconds to check if the update progress started.
163 Sleep 5s
Sushil Singh8469a482020-07-30 04:19:10 -0500164
Sushil Singh87dcee12019-08-07 13:13:13 -0500165 Check Image Update Progress State
166 ... match_state='Updating' image_id=${image_id}
167
168 Wait Until Keyword Succeeds 8 min 20 sec
169 ... Check Image Update Progress State
170 ... match_state='Enabled' image_id=${image_id}
171
172
Sushil Singh32e2b582019-08-16 04:58:24 -0500173Get Host Power State
174 [Documentation] Get host power state.
175 [Arguments] ${quiet}=0
176
177 # Description of arguments:
178 # quiet Indicates whether results should be printed.
179
180 ${state}= Redfish.Get Attribute
181 ... ${REDFISH_BASE_URI}Systems/system PowerState
182 Rqprint Vars state
183
184 [Return] ${state}
185
186
187Check Host Power State
188 [Documentation] Check that the machine's host state matches
189 ... the caller's required host state.
190 [Arguments] ${match_state}
191
192 # Description of argument(s):
193 # match_state The expected state. This may be one or more
194 # comma-separated values (e.g. "On", "Off").
195 # If the actual state matches any of the
196 # states named in this argument,
197 # this keyword passes.
198
199 ${state}= Get Host Power State
200 Rvalid Value state valid_values=[${match_state}]
201
Sushil Singhf17a7f62020-02-03 01:09:30 -0600202
203Get System Firmware Details
204 [Documentation] Return dictionary of system firmware details.
205
206 # {
207 # FirmwareVersion: 2.8.0-dev-1067-gdc66ce1c5,
208 # BiosVersion: witherspoon-XXX-XX.X-X
209 # }
210
211 ${firmware_version}= Redfish Get BMC Version
212 ${bios_version}= Redfish Get Host Version
213
214 &{sys_firmware_dict}= Create Dictionary
215 Set To Dictionary
216 ... ${sys_firmware_dict} FirmwareVersion ${firmware_version} BiosVersion ${bios_version}
217 Rprint Vars sys_firmware_dict
218
219 [Return] &{sys_firmware_dict}
220
Sushil Singh41540ea2021-01-07 06:59:17 -0600221
222Switch Backup Firmware Image To Functional
223 [Documentation] Switch the backup firmware image to make functional.
224
225 ${sw_inv}= Get Functional Firmware BMC image
226 ${nonfunctional_sw_inv}= Get Non Functional Firmware ${sw_inv} False
227
George Keishingf9248952021-05-28 07:52:37 -0500228 ${firmware_inv_path}=
229 ... Set Variable /redfish/v1/UpdateService/FirmwareInventory/${nonfunctional_sw_inv['image_id']}
Sushil Singh41540ea2021-01-07 06:59:17 -0600230
231 # Below URI, change to backup image and reset the BMC.
232 Redfish.Patch /redfish/v1/Managers/bmc
233 ... body={'Links': {'ActiveSoftwareImage': {'@odata.id': '${firmware_inv_path}'}}}
234