| *** Settings *** |
| Documentation Implemented keywords to execute DBUS related commands on BMC. |
| |
| Resource resource.robot |
| Library OperatingSystem |
| Library Collections |
| |
| *** Variable *** |
| |
| ${BUSCTL_TREE_COMMAND} busctl tree | less |
| ${BUSCTL_INTROSPECT_COMMAND} busctl introspect |
| @{dbus_uri_list} |
| |
| *** Keywords *** |
| |
| Get DBUS URI List From BMC |
| [Documentation] Get the available DBUS URIs from device tree on BMC. |
| [Arguments] ${service_name} ${dbus_url} |
| |
| # Return the dbus uris corresponding to the service name provided. |
| # Description of argument(s): |
| # service_name Any service uri of the dbus. |
| # Eg : xyz.openbmc_project.FruDevice |
| # dbus_url Any dbus url of the dbus. |
| # Eg : /xyz/openbmc_project/FruDevice |
| |
| # Execute dbus tree command |
| ${bmc_response}= BMC Execute Command ${BUSCTL_TREE_COMMAND} |
| ${bmc_response}= Convert To List ${bmc_response} |
| ${bmc_response_output}= Get From List ${bmc_response} 0 |
| ${bmc_response_output_list}= Split String ${bmc_response_output} \n\n |
| # Identify the offset of the service name in the response. |
| ${service_name_index_value}= get_subsequent_value_from_list ${bmc_response_output_list} ${service_name} |
| ${service_name_index_value}= Get From List ${service_name_index_value} 0 |
| |
| # Get the service name and its corresponding URI's. |
| ${service_name_with_uri_list}= Get From List ${bmc_response_output_list} ${service_name_index_value} |
| ${service_name_with_uri_list}= Split String ${service_name_with_uri_list} \n |
| |
| # Find index of all the uris where the dbus URI matched. |
| ${uri_list_index}= get_subsequent_value_from_list ${service_name_with_uri_list} ${dbus_url} |
| FOR ${list_index} IN @{uri_list_index} |
| # For each index, get the URI and append to list |
| ${dbus_uri}= Get From List ${service_name_with_uri_list} ${list_index} |
| Append To List ${dbus_uri_list} ${dbus_uri} |
| END |
| |
| [Return] ${dbus_uri_list[1:]} |
| |
| |
| Fetch DBUS URI List Without Unicode |
| [Documentation] Gets the list of DBUS URI for the service and returns only sub URIs. |
| [Arguments] ${dbus_uri_list} |
| |
| # Return the dbus uris list without the unicodes. |
| # Description of argument(s): |
| # dbus_uri_list List of all the uris for the corresponding service name. |
| # Example: Converts " ├─/xyz/openbmc_project/FruDevice/device_0", |
| # ... to '/xyz/openbmc_project/FruDevice/device_0' |
| |
| @{dbus_list}= Create List |
| FOR ${item} IN @{dbus_uri_list} |
| ${item}= Set Variable ${item.strip()} |
| ${item}= return_decoded_string ${item} |
| Append To List ${dbus_list} ${item} |
| END |
| |
| [Return] ${dbus_list} |
| |
| |
| Execute DBUS Introspect Command |
| [Documentation] Execute the DBUS introspect command and return response. |
| [Arguments] ${dbus_command} |
| |
| # Execute the busctl instrospect command for the service name and dbus uri. |
| # Description of argument(s): |
| # dbus_command Command with service name and dbus uri for the fru device. |
| # Example : xyz.openbmc_project.FruDevice xyz/openbmc_project/FruDevice/device_0 |
| |
| ${cmd}= Catenate ${BUSCTL_INTROSPECT_COMMAND} ${dbus_command} |
| ${resp}= BMC Execute Command ${cmd} |
| |
| [Return] ${resp[0]} |