1*** Settings *** 2Documentation Code update utility 3 4Resource ../../lib/rest_client.robot 5Resource ../../lib/connection_client.robot 6Resource ../../lib/utils.robot 7Library OperatingSystem 8 9*** Variables *** 10 11# Fix old org path locally for non-witherspoon system. 12${ORG_OPENBMC_BASE_URI} /org/openbmc/ 13${BMC_UPD_METHOD} ${ORG_OPENBMC_BASE_URI}control/flash/bmc/action/update 14${BMC_PREP_METHOD} ${ORG_OPENBMC_BASE_URI}control/flash/bmc/action/PrepareForUpdate 15${BMC_UPD_ATTR} ${ORG_OPENBMC_BASE_URI}control/flash/bmc 16${HOST_SETTING} ${ORG_OPENBMC_BASE_URI}settings/host0 17 18*** Keywords *** 19 20Preserve BMC Network Setting 21 [Documentation] Preserve Network setting 22 ${policy}= Set Variable ${1} 23 ${value}= create dictionary data=${policy} 24 Write Attribute ${BMC_UPD_ATTR} preserve_network_settings data=${value} 25 ${data}= Read Properties ${BMC_UPD_ATTR} 26 Should Be Equal As Strings ${data['preserve_network_settings']} ${True} 27 ... msg=False indicates network is not preserved. 28 29 30Activate BMC flash image 31 [Documentation] Activate and verify the update status 32 ... The status could be either one of these 33 ... 'Deferred for mounted filesystem. reboot BMC to apply.' 34 ... 'Image ready to apply.' 35 @{img_path}= Create List /tmp/flashimg 36 ${data}= create dictionary data=@{img_path} 37 ${resp}= openbmc post request ${BMC_UPD_METHOD} data=${data} 38 should be equal as strings ${resp.status_code} ${HTTP_OK} 39 40 ${data}= Read Properties ${BMC_UPD_ATTR} 41 should be equal as strings ${data["filename"]} /tmp/flashimg 42 should contain ${data['status']} to apply 43 44 45Prepare For Update 46 [Documentation] Switch to update mode in progress. This method calls 47 ... the Abort method to remove the pending update if there 48 ... is any before code activation. 49 ${data}= create dictionary data=@{EMPTY} 50 ${resp}= openbmc post request ${BMC_PREP_METHOD} data=${data} 51 should be equal as strings ${resp.status_code} ${HTTP_OK} 52 53 # Update method will reset the BMC, adding delay for reboot to 54 # come into force. 55 Sleep 10s 56 57 58SCP Tar Image File to BMC 59 [Documentation] Copy BMC tar image to BMC. 60 [Arguments] ${image_file_path} 61 # Description of argument(s): 62 # image_file_path Downloaded BMC tar file image path. 63 64 65 Open Connection for SCP 66 Open Connection And Log In 67 Loop SCP Retry ${image_file_path} 68 69 70Loop SCP Retry 71 [Documentation] Try transferring the file 4 times. 72 [Arguments] ${image_file_path} 73 # Description of argument(s): 74 # image_file_path Downloaded BMC tar file image path. 75 76 : FOR ${index} IN RANGE 0 4 77 \ ${status}= Retry SCP ${image_file_path} 78 \ Exit For Loop If '${status}' == '${True}' 79 80 81Retry SCP 82 [Documentation] Delete the incomplete file and scp file. 83 [Arguments] ${image_file_path} 84 # Description of argument(s): 85 # image_file_path Downloaded BMC tar file image path. 86 87 ${targ_file_path}= Set Variable /tmp/flashimg 88 89 # TODO: Need to remove this when new code update in place. 90 # Example output: 91 # root@witherspoon:~# ls -lh /tmp/flashimg 92 # -rwxr-xr-x 1 root root 32.0M Jun 29 01:12 /tmp/flashimg 93 BMC Execute Command rm -f /tmp/flashimg 94 scp.Put File ${image_file_path} ${targ_file_path} 95 96 ${file_size} ${stderr} ${rc}= BMC Execute Command 97 ... ls -lh ${targ_file_path} 98 ${status}= Run Keyword And Return Status 99 ... Should Contain ${file_size} 32.0M msg=Incomplete file transfer. 100 [return] ${status} 101 102 103Check If File Exist 104 [Documentation] Verify that the file exists on this machine. 105 [Arguments] ${filepath} 106 Log \n PATH: ${filepath} 107 OperatingSystem.File Should Exist ${filepath} 108 ... msg=${filepath} doesn't exist [ ERROR ] 109 110 Set Global Variable ${FILE_PATH} ${filepath} 111 112 113System Readiness Test 114 [Documentation] Verify that the system can be pinged and authenticated through REST. 115 ${l_status}= Run Keyword and Return Status 116 ... Verify Ping and REST Authentication 117 Run Keyword If '${l_status}' == '${False}' 118 ... Fail msg=System not in ideal state to use [ERROR] 119 120 121Validate BMC Version 122 [Documentation] Get BMC version from /etc/os-release and compare. 123 [Arguments] ${version} 124 125 # Description of argument(s): 126 # version Software version (e.g. "v1.99.8-41-g86a4abc"). 127 128 Open Connection And Log In 129 ${cmd}= Set Variable grep ^VERSION_ID= /etc/os-release | cut -f 2 -d '=' 130 ${output} ${stderr} ${rc}= BMC Execute Command ${cmd} 131 Should Be Equal As Strings ${version} ${output[1:-1]} 132 133 134Trigger Warm Reset via Reboot 135 [Documentation] Execute reboot command on the remote BMC and 136 ... returns immediately. This keyword "Start Command" 137 ... returns nothing and does not wait for the command 138 ... execution to be finished. 139 Open Connection And Log In 140 141 Start Command /sbin/reboot 142 143Set Policy Setting 144 [Documentation] Set the given test policy 145 [Arguments] ${policy} 146 147 ${valueDict}= create dictionary data=${policy} 148 Write Attribute ${HOST_SETTING} power_policy data=${valueDict} 149 ${currentPolicy}= Read Attribute ${HOST_SETTING} power_policy 150 Should Be Equal ${currentPolicy} ${policy} 151