#!/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 import json def pldmtool(option_string, **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: pldmtool base GetPLDMVersion -t 0 { "Response": "1.0.0" } pldmtool base GetTID { "Response": 1 } 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) return json.loads(stdout) def GenerateBIOSAttrHandleValueDict(attr_val_table_data): """ From pldmtool bios GetBIOSTable of AttributeValueTable generate dictionary of for BIOS attribute and its value. Description of argument(s): attr_val_table_data pldmtool output from GetBIOSTable table type AttributeValueTable e.g. [{ "AttributeHandle": 20, "AttributeNameHandle": "23(pvm-pcie-error-inject)", "AttributeType": "BIOSEnumeration", "NumberOfPossibleValues": 2, "PossibleValueStringHandle[0]": "3(Disabled)", "PossibleValueStringHandle[1]": "4(Enabled)", "NumberOfDefaultValues": 1, "DefaultValueStringHandleIndex[0]": 1, "StringHandle": "4(Enabled)" }, { "AttributeHandle": 26, "AttributeNameHandle": "28(pvm_fw_boot_side)", "AttributeType": "BIOSEnumeration", "NumberOfPossibleValues": 2, "PossibleValueStringHandle[0]": "11(Perm)", "PossibleValueStringHandle[1]": "15(Temp)", "NumberOfDefaultValues": 1, "DefaultValueStringHandleIndex[0]": 1, "StringHandle": "15(Temp)" }] @return Dictionary of BIOS attribute and its value. e.g. { 'pvm_pcie_error_inject': ['Disabled', 'Enabled'], 'pvm-fw-boot-side': ['Perm', 'Temp'] } """ attr_val_data_dict = {} for item in attr_val_table_data: for attr in item: if (attr == "NumberOfPossibleValues"): value_list = [] for i in range(0, int(item[attr])): attr_values = item["PossibleValueStringHandle[" + str(i) + "]"] value = re.search(r'\((.*?)\)', attr_values).group(1) if value: # Example: # value = '"Power Off"' if ' ' in value: value = '"' + value + '"' value_list.append(value) else: value_list.append('') attr_handle = re.findall(r'\(.*?\)', item["AttributeNameHandle"]) attr_val_data_dict[attr_handle[0][1:-1]] = value_list return attr_val_data_dict