-
Notifications
You must be signed in to change notification settings - Fork 2.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Config Template unable to dynamically include templates #17490
Comments
Tested this and confirmed this does indeed not import the template. I honestly have no idea what could be going wrong here as most of the jinja rendering happens within jinja itself. This may be an upstream bug but I am not sure. |
Thanks for checking. It's very odd alright. I have unittests on the Gitlab repo which hosts the config template, which renders the templates using some test data. It works perfectly on there. I had a look at the Netbox code and suspect it might could have something to do with the jinja2 sandbox being used but I'm really not sure. I'll have to do some more testing to emulate it as closely as possible. |
…nclude templates
I submitted a pull request for this one last Tuesday but the workflows and review are still pending. Is there anything else I need to do to get this accepted? Or does it just take time? |
Deployment Type
Self-hosted
NetBox Version
v4.0.9
Python Version
3.10
Steps to Reproduce
Example of template. This has been tested manually using Jinja2. The configuration blocks referenced are from a plugin.
config system interface
{% for config_block in device.site.configblock_set.all() %}
{% include "blocks/" + custom_block.name + "/interface.j2" %}
{% endfor %}
end
Expected Behavior
Expected behaviour is that the template renders and imports the relevant includes.
Observed Behavior
Traceback (most recent call last):
File "/opt/netbox/netbox/utilities/jinja2.py", line 26, in get_source
template_source = self._template_cache[template]
KeyError: 'blocks/TEST/interface.j2'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/netbox/netbox/dcim/views.py", line 2060, in get_extra_context
rendered_config = config_template.render(context=context_data)
File "/opt/netbox/netbox/extras/models/configs.py", line 282, in render
output = template.render(**_context)
File "/usr/local/lib/python3.10/site-packages/jinja2/environment.py", line 1304, in render
self.environment.handle_exception()
File "/usr/local/lib/python3.10/site-packages/jinja2/environment.py", line 939, in handle_exception
raise rewrite_traceback_stack(source=source)
File "block-config.j2", line 49, in top-level template code
File "/opt/netbox/netbox/utilities/jinja2.py", line 28, in get_source
raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: blocks/TEST/interface.j2
The text was updated successfully, but these errors were encountered: