Skip to content
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

Closed
robduffy2010 opened this issue Sep 13, 2024 · 3 comments · Fixed by #18106
Closed

Config Template unable to dynamically include templates #17490

robduffy2010 opened this issue Sep 13, 2024 · 3 comments · Fixed by #18106
Assignees
Labels
netbox severity: low Does not significantly disrupt application functionality, or a workaround is available status: accepted This issue has been accepted for implementation type: bug A confirmed report of unexpected behavior in the application

Comments

@robduffy2010
Copy link
Contributor

Deployment Type

Self-hosted

NetBox Version

v4.0.9

Python Version

3.10

Steps to Reproduce

  1. Create the following template in a data store, as well as child templates in the blocks directory. In this example a template named interface.j2 is located in the blocks/TEST/ directory.
  2. Assign the template to a device
  3. Attempt to render the template

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

@robduffy2010 robduffy2010 added status: needs triage This issue is awaiting triage by a maintainer type: bug A confirmed report of unexpected behavior in the application labels Sep 13, 2024
@DanSheps DanSheps added severity: low Does not significantly disrupt application functionality, or a workaround is available status: needs owner This issue is tentatively accepted pending a volunteer committed to its implementation and removed status: needs triage This issue is awaiting triage by a maintainer labels Sep 13, 2024
@DanSheps
Copy link
Member

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.

@robduffy2010
Copy link
Contributor Author

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.

@jeremystretch jeremystretch changed the title Config Template unable to dynamically include templates Config Template unable to dynamically include templates Nov 1, 2024
@jeremystretch jeremystretch added the netbox label Nov 1, 2024 — with Linear
robduffy2010 added a commit to robduffy2010/netbox that referenced this issue Nov 26, 2024
@jeremystretch jeremystretch added status: accepted This issue has been accepted for implementation and removed status: needs owner This issue is tentatively accepted pending a volunteer committed to its implementation labels Dec 2, 2024
@robduffy2010
Copy link
Contributor Author

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?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
netbox severity: low Does not significantly disrupt application functionality, or a workaround is available status: accepted This issue has been accepted for implementation type: bug A confirmed report of unexpected behavior in the application
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants