'iscsi': self.iscsi_service,
}
- self.template = TemplateMgr()
+ self.template = TemplateMgr(self)
self.requires_post_actions = set()
'path': path
}
- custom_template = self.get_store('lsmcli_blink_lights_cmd', None)
- if custom_template:
- lsmcli_blink_lights_cmd = self.template.engine.render_plain(custom_template, j2_ctx)
- else:
- lsmcli_blink_lights_cmd = self.template.render('lsmcli_blink_lights_cmd.j2', j2_ctx)
+ lsmcli_blink_lights_cmd = self.template.render('lsmcli_blink_lights_cmd.j2', j2_ctx)
cmd = shlex.split(lsmcli_blink_lights_cmd)
import copy
-from typing import Optional
+from typing import Optional, TYPE_CHECKING
from jinja2 import Environment, PackageLoader, select_autoescape, StrictUndefined, Template
from jinja2 import exceptions as j2_exceptions
+if TYPE_CHECKING:
+ from cephadm.module import CephadmOrchestrator
+
class TemplateError(Exception):
pass
class TemplateMgr:
- def __init__(self):
+ def __init__(self, mgr: "CephadmOrchestrator"):
self.engine = Jinja2Engine()
self.base_context = {
'cephadm_managed': 'This file is generated by cephadm.'
}
+ self.mgr = mgr
def render(self, name: str, context: Optional[dict] = None, managed_context=True) -> str:
"""Render a string from a template with context.
ctx = copy.deepcopy(self.base_context)
if context is not None:
ctx = {**ctx, **context}
- return self.engine.render(name, ctx)
+ store_name = name.replace('/', '_').rstrip('.j2')
+ custom_template = self.mgr.get_store(store_name, None)
+ if custom_template:
+ return self.engine.render_plain(custom_template, ctx)
+ else:
+ return self.engine.render(name, ctx)
import pytest
+from cephadm.tests.fixtures import cephadm_module
from cephadm.template import TemplateMgr, UndefinedError, TemplateNotFoundError
-def test_render(fs):
+def test_render(cephadm_module, fs):
template_base = (pathlib.Path(__file__).parent / '../templates').resolve()
fake_template = template_base / 'foo/bar'
fs.create_file(fake_template, contents='{{ cephadm_managed }}{{ var }}')
- template_mgr = TemplateMgr()
+ template_mgr = TemplateMgr(cephadm_module)
value = 'test'
# with base context