blob: e22af25b9a6d090251b79d42d8fdbb28042c81cd [file] [log] [blame]
#!/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