mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
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:
parent
fa3a59e70c
commit
aa435b2e03
1 changed files with 10 additions and 1 deletions
|
|
@ -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")
|
||||
|
|
|
|||
Loading…
Reference in a new issue