#!/usr/bin/env python r""" PLDM functions. """ import re import var_funcs as vf import func_args as fa import bmc_ssh_utils as bsu def pldmtool(option_string, parse_results=1, **bsu_options): r""" Run pldmtool on the BMC with the caller's option string and return the result. Example: ${pldm_results}= Pldmtool base GetPLDMTypes Rprint Vars pldm_results pldm_results: [request_message]: 08 01 80 00 04 [success_in_creating_the_socket]: RC = 3 [success_in_connecting_to_socket]: RC = 0 [success_in_sending_message_type_as_pldm_to_mctp]:RC = 0 [write_to_socket_successful]: RC = 5 [total_length]: 14 [loopback_response_message]: 08 01 80 00 04 [on_first_recv(),response_==_request]: RC = 0 [shutdown_socket_successful]: RC = 0 [response_message]: 08 01 00 00 04 00 0d 00 00 00 00 00 00 00 [supported_types]: [raw]: [0]: 0 [1]: 2 [2]: 3 [text]: [0]: base [1]: platform [2]: bios Description of argument(s): option_string A string of options which are to be processed by the pldmtool command. parse_results Parse the pldmtool results and return a dictionary rather than the raw pldmtool output. bsu_options Options to be passed directly to bmc_execute_command. See its prolog for details. """ # This allows callers to specify arguments in python style (e.g. print_out=1 vs. print_out=${1}). bsu_options = fa.args_to_objects(bsu_options) stdout, stderr, rc = bsu.bmc_execute_command('pldmtool ' + option_string, **bsu_options) if parse_results: # Remove linefeeds following colons. stdout = re.sub(":\n", ":", stdout) # Remove first line (e.g. "Encode request successfully"). stdout = re.sub("^.*\\n", "", stdout) result = vf.key_value_outbuf_to_dict(stdout) if 'supported_types' in result: # 'supported types' begins like this: # 0(base) 2(platform) 3(bios) # Parsing it to look like it does in the example above. supported_types = {'raw': [], 'text': []} for entry in result['supported_types'].split(" "): record = entry.split("(") supported_types['raw'].append(record[0]) supported_types['text'].append(record[1].rstrip(")")) result['supported_types'] = supported_types return result return stdout