From 74cdf3ea93fb3a91ed03924fdb17076d36fc4cb9 Mon Sep 17 00:00:00 2001 From: Alexandru Avadanii Date: Mon, 18 Sep 2017 20:11:12 +0200 Subject: [PATCH] config/utils: Add generate_config.py Previously, generate_config.py resided in securedlab git repo, but since we want to be able to use it in both securedlab (for validation of new PDF files during verify jobs) and installer projects (for actually parsing the PDF file into usable installer inputs), we decided to move it to a common location, also available for regular users. This change merely replicates the file from securedlab git repo. Change-Id: I9ff7889e408338d3911853fe01b752b013de1db7 Signed-off-by: Alexandru Avadanii --- config/utils/generate_config.py | 53 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100755 config/utils/generate_config.py diff --git a/config/utils/generate_config.py b/config/utils/generate_config.py new file mode 100755 index 00000000..a32367af --- /dev/null +++ b/config/utils/generate_config.py @@ -0,0 +1,53 @@ +#!/usr/bin/python +"""This module does blah blah.""" +import argparse +import ipaddress +import yaml +from jinja2 import Environment, FileSystemLoader + +PARSER = argparse.ArgumentParser() +PARSER.add_argument("--yaml", "-y", type=str, required=True) +PARSER.add_argument("--jinja2", "-j", type=str, required=True) +ARGS = PARSER.parse_args() + +# Processor architecture vs DPKG architecture mapping +DPKG_ARCH_TABLE = { + 'aarch64': 'arm64', + 'x86_64': 'amd64', +} +ARCH_DPKG_TABLE = dict(zip(DPKG_ARCH_TABLE.values(), DPKG_ARCH_TABLE.keys())) + +# Custom filter to allow simple IP address operations returning +# a new address from an upper or lower (negative) index +def ipaddr_index(base_address, index): + """Return IP address in given network at given index""" + try: + base_address_str = unicode(base_address) + #pylint: disable=unused-variable + except NameError as ex: + base_address_str = str(base_address) + return ipaddress.ip_address(base_address_str) + int(index) + +# Custom filter to convert between processor architecture +# (as reported by $(uname -m)) and DPKG-style architecture +def dpkg_arch(arch, to_dpkg=True): + """Return DPKG-compatible from processor arch and vice-versa""" + if to_dpkg: + return DPKG_ARCH_TABLE[arch] + else: + return ARCH_DPKG_TABLE[arch] + +ENV = Environment(loader=FileSystemLoader('./')) +ENV.filters['ipaddr_index'] = ipaddr_index +ENV.filters['dpkg_arch'] = dpkg_arch + +with open(ARGS.yaml) as _: + DICT = yaml.safe_load(_) + +# Print dictionary generated from yaml (uncomment for debug) +# print(DICT) + +# Render template and print generated conf to console +TEMPLATE = ENV.get_template(ARGS.jinja2) +#pylint: disable=superfluous-parens +print(TEMPLATE.render(conf=DICT)) -- 2.16.6