blob: 5241f2fbce7626e553d17bc7a5f5ca0f8d38da64 [file] [log] [blame]
Patrick Williams09682372020-04-03 15:10:31 -05001#!/usr/bin/env python3
Ratan Gupta0f2e7fe2016-12-22 19:00:41 +05302
3import os
4import sys
5import yaml
6import argparse
7from mako.template import Template
8
9
Ratan Gupta6eed4032017-02-10 15:59:31 +053010def generate_cpp(inventory_yaml, output_dir):
Ratan Gupta0f2e7fe2016-12-22 19:00:41 +053011 with open(os.path.join(script_dir, inventory_yaml), 'r') as f:
12 ifile = yaml.safe_load(f)
Brad Bishop3d0ce842017-02-07 08:33:56 -050013 if not isinstance(ifile, dict):
14 ifile = {}
Ratan Gupta0f2e7fe2016-12-22 19:00:41 +053015
16 # Render the mako template
17
18 t = Template(filename=os.path.join(
19 script_dir,
Ratan Gupta6eed4032017-02-10 15:59:31 +053020 "writefru.mako.cpp"))
Ratan Gupta0f2e7fe2016-12-22 19:00:41 +053021
Ratan Gupta6eed4032017-02-10 15:59:31 +053022 output_hpp = os.path.join(output_dir, "fru-gen.cpp")
Ratan Gupta0f2e7fe2016-12-22 19:00:41 +053023 with open(output_hpp, 'w') as fd:
24 fd.write(t.render(fruDict=ifile))
25
26
27def main():
28
29 valid_commands = {
Ratan Gupta6eed4032017-02-10 15:59:31 +053030 'generate-cpp': generate_cpp
Ratan Gupta0f2e7fe2016-12-22 19:00:41 +053031 }
32 parser = argparse.ArgumentParser(
33 description="IPMI FRU parser and code generator")
34
35 parser.add_argument(
36 '-i', '--inventory_yaml', dest='inventory_yaml',
37 default='example.yaml', help='input inventory yaml file to parse')
38
39 parser.add_argument(
40 "-o", "--output-dir", dest="outputdir",
41 default=".",
42 help="output directory")
43
44 parser.add_argument(
45 'command', metavar='COMMAND', type=str,
Patrick Williams09682372020-04-03 15:10:31 -050046 choices=list(valid_commands.keys()),
Ratan Gupta0f2e7fe2016-12-22 19:00:41 +053047 help='Command to run.')
48
49 args = parser.parse_args()
50
51 if (not (os.path.isfile(os.path.join(script_dir, args.inventory_yaml)))):
52 sys.exit("Can not find input yaml file " + args.inventory_yaml)
53
54 function = valid_commands[args.command]
55 function(args.inventory_yaml, args.outputdir)
56
57if __name__ == '__main__':
58 script_dir = os.path.dirname(os.path.realpath(__file__))
59 main()