Add a directory-specific nameserver data to templates

If a template is being rendered into a directory that represents a
nameserver (e.g. "ns1"), include a nameserver-specific information in
the data - variable called "ns" which has information about the
nameserver this file belongs to.

Ensure the "ns" variable is only exposed to the template when rendered,
without affecting the environment variables (always work with a copy of
the env_vars).
This commit is contained in:
Nicki Křížek 2026-04-01 17:10:08 +02:00
parent fa3a59e70c
commit aa435b2e03

View file

@ -13,6 +13,7 @@
from dataclasses import dataclass
from pathlib import Path
from re import compile as Re
from typing import Any
import re
@ -22,6 +23,8 @@ import jinja2
from .log import debug
from .vars import ALL
NS_DIR_RE = Re(r"^(a?ns([0-9]+))/")
class TemplateEngine:
"""
@ -63,10 +66,16 @@ class TemplateEngine:
raise RuntimeError('No jinja2 template found for "{output}"')
if data is None:
data = self.env_vars
data = {**self.env_vars}
else:
data = {**self.env_vars, **data}
# directory-specific "ns" var
assert "ns" not in data, '"ns" variable is reserved for nameserver data'
match = NS_DIR_RE.search(output)
if match:
data["ns"] = Nameserver(match.group(1))
debug("rendering template `%s` to file `%s`", template, output)
stream = self.j2env.get_template(template).stream(data)
stream.dump(output, encoding="utf-8")