1#!/usr/bin/env python
2
3r"""
4VPD functions.
5"""
6
7import func_args as fa
8import bmc_ssh_utils as bsu
9import json
10
11
12def vpdtool(option_string, **bsu_options):
13    r"""
14    Run vpdtool on the BMC with the caller's option string and return the result.
15
16    Example:
17
18    ${vpd_results}=  vpd-tool -i
19    Rprint Vars  vpd_results
20
21    vpd_results:
22      [/system/chassis/motherboard]:
23        [PN]:                                         PN12345
24        [SN]:                                         YL2E2D010000
25        [LocationCode]:                               U78DA.ND1.       -P0
26        [CC]:                                         2E2D
27        [DR]:                                         SYSTEM BACKPLANE
28        [FN]:                                         F191014
29        [type]:                                       xyz.openbmc_project.Inventory.Item.Board.Motherboard
30      [/system/chassis/motherboard/ebmc_card_bmc]:
31        [PN]:                                         PN12345
32        [SN]:                                         YL6B58010000
33        [LocationCode]:                               U78DA.ND1.       -P0-C5
34        [CC]:                                         6B58
35        [DR]:                                         EBMC
36        [FN]:                                         F191014
37        [type]:                                       xyz.openbmc_project.Inventory.Item.Bmc
38
39    Description of argument(s):
40    option_string                   A string of options which are to be processed by the vpd-tool command.
41    bsu_options                     Options to be passed directly to bmc_execute_command. See its prolog for
42                                    details.
43    """
44
45    bsu_options = fa.args_to_objects(bsu_options)
46    out_buf, stderr, rc = bsu.bmc_execute_command('vpd-tool ' + option_string, **bsu_options)
47
48    # Only return output if its not a VPD write command.
49    if '-w' not in option_string:
50        out_buf = json.loads(out_buf)
51        if '-r' in option_string:
52            return out_buf
53        else:
54            return out_buf[0]
55