Pass config to node renderer
This commit is contained in:
21
tools/render
21
tools/render
@@ -35,12 +35,12 @@ TEMPLATES = Environment(
|
||||
)
|
||||
|
||||
|
||||
def render_templates(node: dict):
|
||||
def render_templates(node: dict, args: dict):
|
||||
class Inner(json.JSONEncoder):
|
||||
def default(self, o):
|
||||
if isinstance(o, Template):
|
||||
try:
|
||||
rendered = o.render(node)
|
||||
rendered = o.render(args | node)
|
||||
except Exception as e:
|
||||
e.add_note(f"While rendering for: {node['hostname']}")
|
||||
raise e
|
||||
@@ -131,6 +131,11 @@ def walk_files(root: pathlib.Path):
|
||||
|
||||
|
||||
def main():
|
||||
with open(ROOT.joinpath("config.yaml")) as fyaml:
|
||||
config = yaml.safe_load(fyaml)
|
||||
|
||||
template_args = {"config": config, "root": ROOT}
|
||||
|
||||
nodes = []
|
||||
for fullname in walk_files(NODES):
|
||||
filename = str(fullname.relative_to(NODES).parent) + "/" + fullname.stem
|
||||
@@ -145,7 +150,10 @@ def main():
|
||||
# Quick and dirty way to resolve all the templates using a custom encoder
|
||||
nodes = list(
|
||||
map(
|
||||
lambda node: json.loads(json.dumps(node, cls=render_templates(node))), nodes
|
||||
lambda node: json.loads(
|
||||
json.dumps(node, cls=render_templates(node, template_args))
|
||||
),
|
||||
nodes,
|
||||
)
|
||||
)
|
||||
|
||||
@@ -155,16 +163,13 @@ def main():
|
||||
dict(s) for s in set(frozenset(node["cluster"].items()) for node in nodes)
|
||||
]
|
||||
|
||||
with open(ROOT.joinpath("config.yaml")) as fyaml:
|
||||
config = yaml.safe_load(fyaml)
|
||||
template_args |= {"nodes": nodes, "clusters": clusters}
|
||||
|
||||
RENDERED.mkdir(exist_ok=True)
|
||||
for template_name in TEMPLATES.list_templates():
|
||||
template = TEMPLATES.get_template(template_name)
|
||||
|
||||
rendered = template.render(
|
||||
nodes=nodes, clusters=clusters, config=config, root=ROOT
|
||||
)
|
||||
rendered = template.render(template_args)
|
||||
with open(RENDERED.joinpath(template_name), "w") as f:
|
||||
f.write(rendered)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user