10968237bSPatrick Williams#!/usr/bin/env python3 20f2e7fe1SRatan Gupta 3c5c1737cSPatrick Williamsimport argparse 40f2e7fe1SRatan Guptaimport os 50f2e7fe1SRatan Guptaimport sys 6c5c1737cSPatrick Williams 70f2e7fe1SRatan Guptaimport yaml 80f2e7fe1SRatan Guptafrom mako.template import Template 90f2e7fe1SRatan Gupta 100f2e7fe1SRatan Gupta 116eed4032SRatan Guptadef generate_cpp(inventory_yaml, output_dir): 12545a5d33SPatrick Williams with open(inventory_yaml, "r") as f: 130f2e7fe1SRatan Gupta ifile = yaml.safe_load(f) 143d0ce84bSBrad Bishop if not isinstance(ifile, dict): 153d0ce84bSBrad Bishop ifile = {} 160f2e7fe1SRatan Gupta 170f2e7fe1SRatan Gupta # Render the mako template 180f2e7fe1SRatan Gupta 19*0b0e1487SJayanth Othayoth t = Template(filename=os.path.join(script_dir, "writefru.cpp.mako")) 200f2e7fe1SRatan Gupta 216eed4032SRatan Gupta output_hpp = os.path.join(output_dir, "fru-gen.cpp") 22c5c1737cSPatrick Williams with open(output_hpp, "w") as fd: 230f2e7fe1SRatan Gupta fd.write(t.render(fruDict=ifile)) 240f2e7fe1SRatan Gupta 250f2e7fe1SRatan Gupta 260f2e7fe1SRatan Guptadef main(): 27c5c1737cSPatrick Williams valid_commands = {"generate-cpp": generate_cpp} 280f2e7fe1SRatan Gupta parser = argparse.ArgumentParser( 29c5c1737cSPatrick Williams description="IPMI FRU parser and code generator" 30c5c1737cSPatrick Williams ) 310f2e7fe1SRatan Gupta 320f2e7fe1SRatan Gupta parser.add_argument( 33c5c1737cSPatrick Williams "-i", 34c5c1737cSPatrick Williams "--inventory_yaml", 35c5c1737cSPatrick Williams dest="inventory_yaml", 36c5c1737cSPatrick Williams default="example.yaml", 37c5c1737cSPatrick Williams help="input inventory yaml file to parse", 38c5c1737cSPatrick Williams ) 390f2e7fe1SRatan Gupta 400f2e7fe1SRatan Gupta parser.add_argument( 41c5c1737cSPatrick Williams "-o", 42c5c1737cSPatrick Williams "--output-dir", 43c5c1737cSPatrick Williams dest="outputdir", 440f2e7fe1SRatan Gupta default=".", 45c5c1737cSPatrick Williams help="output directory", 46c5c1737cSPatrick Williams ) 470f2e7fe1SRatan Gupta 480f2e7fe1SRatan Gupta parser.add_argument( 49c5c1737cSPatrick Williams "command", 50c5c1737cSPatrick Williams metavar="COMMAND", 51c5c1737cSPatrick Williams type=str, 520968237bSPatrick Williams choices=list(valid_commands.keys()), 53c5c1737cSPatrick Williams help="Command to run.", 54c5c1737cSPatrick Williams ) 550f2e7fe1SRatan Gupta 560f2e7fe1SRatan Gupta args = parser.parse_args() 570f2e7fe1SRatan Gupta 58545a5d33SPatrick Williams if not (os.path.isfile(args.inventory_yaml)): 590f2e7fe1SRatan Gupta sys.exit("Can not find input yaml file " + args.inventory_yaml) 600f2e7fe1SRatan Gupta 610f2e7fe1SRatan Gupta function = valid_commands[args.command] 620f2e7fe1SRatan Gupta function(args.inventory_yaml, args.outputdir) 630f2e7fe1SRatan Gupta 64c5c1737cSPatrick Williams 65c5c1737cSPatrick Williamsif __name__ == "__main__": 660f2e7fe1SRatan Gupta script_dir = os.path.dirname(os.path.realpath(__file__)) 670f2e7fe1SRatan Gupta main() 68