#!/usr/bin/env python3 import argparse import os import sys import yaml from mako.template import Template def generate_cpp(inventory_yaml, output_dir): with open(inventory_yaml, "r") as f: ifile = yaml.safe_load(f) if not isinstance(ifile, dict): ifile = {} # Render the mako template t = Template(filename=os.path.join(script_dir, "readfru.mako.cpp")) output_hpp = os.path.join(output_dir, "fru-read-gen.cpp") with open(output_hpp, "w") as fd: fd.write(t.render(fruDict=ifile)) def main(): valid_commands = {"generate-cpp": generate_cpp} parser = argparse.ArgumentParser(description="IPMI FRU map code generator") parser.add_argument( "-i", "--inventory_yaml", dest="inventory_yaml", default="example.yaml", help="input inventory yaml file to parse", ) parser.add_argument( "-o", "--output-dir", dest="outputdir", default=".", help="output directory", ) parser.add_argument( "command", metavar="COMMAND", type=str, choices=valid_commands.keys(), help="Command to run.", ) args = parser.parse_args() if not (os.path.isfile(args.inventory_yaml)): sys.exit("Can not find input yaml file " + args.inventory_yaml) function = valid_commands[args.command] function(args.inventory_yaml, args.outputdir) if __name__ == "__main__": script_dir = os.path.dirname(os.path.realpath(__file__)) main()