render-config view sometimes crash when associated config template enables async support #7837

Closed
opened 2025-12-29 20:28:50 +01:00 by adam · 3 comments
Owner

Originally created by @abhi1693 on GitHub (Mar 31, 2023).

NetBox version

v3.5-beta1

Python version

3.10

Steps to Reproduce

These steps may not reliably reproduce the issue as this has only happened in my environment once so far.

  1. Create a datasource using https://github.com/jeremystretch/example-config-templates/
  2. Create a config template and choose the file roles/access-switch.j2 and env var set as {'trim_blocks': True, 'enable_async': True, 'lstrip_blocks': True}
  3. Apply the template on the device and view the config

Try to sync the datasource and open the render-config page as fast as possible, basically that's what caused the issue in my case atleast.

Expected Behavior

Config renders as per the template

Observed Behavior

[31/Mar/2023 19:12:12] "GET /extras/config-templates/1/ HTTP/1.1" 200 87680
Task was destroyed but it is pending!
task: <Task pending name='Task-72' coro=<<async_generator_athrow without __name__>()>>
Internal Server Error: /dcim/devices/14/render-config/
Traceback (most recent call last):
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 56, in inner
    response = get_response(request)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 103, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/base.py", line 26, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/netbox/utilities/views.py", line 99, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 142, in dispatch
    return handler(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/object_views.py", line 73, in get
    **self.get_extra_context(request, instance),
  File "/home/asaharan/PycharmProjects/netbox/netbox/dcim/views.py", line 2022, in get_extra_context
    rendered_config = config_template.render(context=context_data)
  File "/home/asaharan/PycharmProjects/netbox/netbox/extras/models/configs.py", line 252, in render
    output = template.render(**context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1291, in render
    return loop.run_until_complete(self.render_async(*args, **kwargs))
  File "/usr/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete
    return future.result()
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1324, in render_async
    return self.environment.handle_exception()
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 936, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1321, in <listcomp>
    [n async for n in self.root_render_func(ctx)]  # type: ignore
  File "roles/tor-switch.j2", line 1, in top-level template code
  File "base.j2", line 3, in top-level template code
  File "roles/tor-switch.j2", line 13, in block 'content'
  File "common/vlans.j2", line 4, in top-level template code
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 370, in __repr__
    data = list(self[: REPR_OUTPUT_SIZE + 1])
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 394, in __iter__
    self._fetch_all()
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 1867, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 87, in __iter__
    results = compiler.execute_sql(
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1396, in execute_sql
    cursor = self.connection.cursor()
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/utils/asyncio.py", line 24, in inner
    raise SynchronousOnlyOperation(message)
django.core.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async.
Internal Server Error: /dcim/devices/14/render-config/
Traceback (most recent call last):
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 56, in inner
    response = get_response(request)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 103, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/base.py", line 26, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/netbox/utilities/views.py", line 99, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 142, in dispatch
    return handler(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/object_views.py", line 73, in get
    **self.get_extra_context(request, instance),
  File "/home/asaharan/PycharmProjects/netbox/netbox/dcim/views.py", line 2022, in get_extra_context
    rendered_config = config_template.render(context=context_data)
  File "/home/asaharan/PycharmProjects/netbox/netbox/extras/models/configs.py", line 252, in render
    output = template.render(**context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1291, in render
    return loop.run_until_complete(self.render_async(*args, **kwargs))
  File "/usr/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete
    return future.result()
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1324, in render_async
    return self.environment.handle_exception()
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 936, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1321, in <listcomp>
    [n async for n in self.root_render_func(ctx)]  # type: ignore
  File "roles/tor-switch.j2", line 1, in top-level template code
  File "base.j2", line 3, in top-level template code
  File "roles/tor-switch.j2", line 13, in block 'content'
  File "common/vlans.j2", line 4, in top-level template code
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 370, in __repr__
    data = list(self[: REPR_OUTPUT_SIZE + 1])
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 394, in __iter__
    self._fetch_all()
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 1867, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 87, in __iter__
    results = compiler.execute_sql(
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1396, in execute_sql
    cursor = self.connection.cursor()
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/utils/asyncio.py", line 24, in inner
    raise SynchronousOnlyOperation(message)
django.core.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async.
[31/Mar/2023 19:12:14] "GET /dcim/devices/14/render-config/ HTTP/1.1" 500 196716
Task was destroyed but it is pending!
task: <Task pending name='Task-74' coro=<<async_generator_athrow without __name__>()>>
Internal Server Error: /dcim/devices/14/render-config/
Traceback (most recent call last):
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 56, in inner
    response = get_response(request)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 103, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/base.py", line 26, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/netbox/utilities/views.py", line 99, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 142, in dispatch
    return handler(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/object_views.py", line 73, in get
    **self.get_extra_context(request, instance),
  File "/home/asaharan/PycharmProjects/netbox/netbox/dcim/views.py", line 2022, in get_extra_context
    rendered_config = config_template.render(context=context_data)
  File "/home/asaharan/PycharmProjects/netbox/netbox/extras/models/configs.py", line 252, in render
    output = template.render(**context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1291, in render
    return loop.run_until_complete(self.render_async(*args, **kwargs))
  File "/usr/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete
    return future.result()
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1324, in render_async
    return self.environment.handle_exception()
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 936, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1321, in <listcomp>
    [n async for n in self.root_render_func(ctx)]  # type: ignore
  File "roles/tor-switch.j2", line 1, in top-level template code
  File "base.j2", line 3, in top-level template code
  File "roles/tor-switch.j2", line 13, in block 'content'
  File "common/vlans.j2", line 4, in top-level template code
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 370, in __repr__
    data = list(self[: REPR_OUTPUT_SIZE + 1])
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 394, in __iter__
    self._fetch_all()
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 1867, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 87, in __iter__
    results = compiler.execute_sql(
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1396, in execute_sql
    cursor = self.connection.cursor()
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/utils/asyncio.py", line 24, in inner
    raise SynchronousOnlyOperation(message)
django.core.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async.
Internal Server Error: /dcim/devices/14/render-config/
Traceback (most recent call last):
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 56, in inner
    response = get_response(request)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 103, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/base.py", line 26, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/netbox/utilities/views.py", line 99, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 142, in dispatch
    return handler(request, *args, **kwargs)
  File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/object_views.py", line 73, in get
    **self.get_extra_context(request, instance),
  File "/home/asaharan/PycharmProjects/netbox/netbox/dcim/views.py", line 2022, in get_extra_context
    rendered_config = config_template.render(context=context_data)
  File "/home/asaharan/PycharmProjects/netbox/netbox/extras/models/configs.py", line 252, in render
    output = template.render(**context)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1291, in render
    return loop.run_until_complete(self.render_async(*args, **kwargs))
  File "/usr/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete
    return future.result()
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1324, in render_async
    return self.environment.handle_exception()
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 936, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1321, in <listcomp>
    [n async for n in self.root_render_func(ctx)]  # type: ignore
  File "roles/tor-switch.j2", line 1, in top-level template code
  File "base.j2", line 3, in top-level template code
  File "roles/tor-switch.j2", line 13, in block 'content'
  File "common/vlans.j2", line 4, in top-level template code
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 370, in __repr__
    data = list(self[: REPR_OUTPUT_SIZE + 1])
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 394, in __iter__
    self._fetch_all()
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 1867, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 87, in __iter__
    results = compiler.execute_sql(
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1396, in execute_sql
    cursor = self.connection.cursor()
  File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/utils/asyncio.py", line 24, in inner
    raise SynchronousOnlyOperation(message)
django.core.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async.
[31/Mar/2023 19:12:14] "GET /dcim/devices/14/render-config/ HTTP/1.1" 500 196143

Originally created by @abhi1693 on GitHub (Mar 31, 2023). ### NetBox version v3.5-beta1 ### Python version 3.10 ### Steps to Reproduce These steps may not reliably reproduce the issue as this has only happened in my environment once so far. 1. Create a datasource using https://github.com/jeremystretch/example-config-templates/ 2. Create a config template and choose the file roles/access-switch.j2 and env var set as `{'trim_blocks': True, 'enable_async': True, 'lstrip_blocks': True}` 3. Apply the template on the device and view the config Try to sync the datasource and open the render-config page as fast as possible, basically that's what caused the issue in my case atleast. ### Expected Behavior Config renders as per the template ### Observed Behavior ``` [31/Mar/2023 19:12:12] "GET /extras/config-templates/1/ HTTP/1.1" 200 87680 Task was destroyed but it is pending! task: <Task pending name='Task-72' coro=<<async_generator_athrow without __name__>()>> Internal Server Error: /dcim/devices/14/render-config/ Traceback (most recent call last): File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 56, in inner response = get_response(request) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 103, in view return self.dispatch(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/base.py", line 26, in dispatch return super().dispatch(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/netbox/utilities/views.py", line 99, in dispatch return super().dispatch(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 142, in dispatch return handler(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/object_views.py", line 73, in get **self.get_extra_context(request, instance), File "/home/asaharan/PycharmProjects/netbox/netbox/dcim/views.py", line 2022, in get_extra_context rendered_config = config_template.render(context=context_data) File "/home/asaharan/PycharmProjects/netbox/netbox/extras/models/configs.py", line 252, in render output = template.render(**context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1291, in render return loop.run_until_complete(self.render_async(*args, **kwargs)) File "/usr/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete return future.result() File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1324, in render_async return self.environment.handle_exception() File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 936, in handle_exception raise rewrite_traceback_stack(source=source) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1321, in <listcomp> [n async for n in self.root_render_func(ctx)] # type: ignore File "roles/tor-switch.j2", line 1, in top-level template code File "base.j2", line 3, in top-level template code File "roles/tor-switch.j2", line 13, in block 'content' File "common/vlans.j2", line 4, in top-level template code File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 370, in __repr__ data = list(self[: REPR_OUTPUT_SIZE + 1]) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 394, in __iter__ self._fetch_all() File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 1867, in _fetch_all self._result_cache = list(self._iterable_class(self)) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 87, in __iter__ results = compiler.execute_sql( File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1396, in execute_sql cursor = self.connection.cursor() File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/utils/asyncio.py", line 24, in inner raise SynchronousOnlyOperation(message) django.core.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async. Internal Server Error: /dcim/devices/14/render-config/ Traceback (most recent call last): File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 56, in inner response = get_response(request) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 103, in view return self.dispatch(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/base.py", line 26, in dispatch return super().dispatch(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/netbox/utilities/views.py", line 99, in dispatch return super().dispatch(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 142, in dispatch return handler(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/object_views.py", line 73, in get **self.get_extra_context(request, instance), File "/home/asaharan/PycharmProjects/netbox/netbox/dcim/views.py", line 2022, in get_extra_context rendered_config = config_template.render(context=context_data) File "/home/asaharan/PycharmProjects/netbox/netbox/extras/models/configs.py", line 252, in render output = template.render(**context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1291, in render return loop.run_until_complete(self.render_async(*args, **kwargs)) File "/usr/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete return future.result() File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1324, in render_async return self.environment.handle_exception() File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 936, in handle_exception raise rewrite_traceback_stack(source=source) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1321, in <listcomp> [n async for n in self.root_render_func(ctx)] # type: ignore File "roles/tor-switch.j2", line 1, in top-level template code File "base.j2", line 3, in top-level template code File "roles/tor-switch.j2", line 13, in block 'content' File "common/vlans.j2", line 4, in top-level template code File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 370, in __repr__ data = list(self[: REPR_OUTPUT_SIZE + 1]) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 394, in __iter__ self._fetch_all() File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 1867, in _fetch_all self._result_cache = list(self._iterable_class(self)) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 87, in __iter__ results = compiler.execute_sql( File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1396, in execute_sql cursor = self.connection.cursor() File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/utils/asyncio.py", line 24, in inner raise SynchronousOnlyOperation(message) django.core.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async. [31/Mar/2023 19:12:14] "GET /dcim/devices/14/render-config/ HTTP/1.1" 500 196716 Task was destroyed but it is pending! task: <Task pending name='Task-74' coro=<<async_generator_athrow without __name__>()>> Internal Server Error: /dcim/devices/14/render-config/ Traceback (most recent call last): File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 56, in inner response = get_response(request) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 103, in view return self.dispatch(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/base.py", line 26, in dispatch return super().dispatch(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/netbox/utilities/views.py", line 99, in dispatch return super().dispatch(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 142, in dispatch return handler(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/object_views.py", line 73, in get **self.get_extra_context(request, instance), File "/home/asaharan/PycharmProjects/netbox/netbox/dcim/views.py", line 2022, in get_extra_context rendered_config = config_template.render(context=context_data) File "/home/asaharan/PycharmProjects/netbox/netbox/extras/models/configs.py", line 252, in render output = template.render(**context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1291, in render return loop.run_until_complete(self.render_async(*args, **kwargs)) File "/usr/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete return future.result() File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1324, in render_async return self.environment.handle_exception() File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 936, in handle_exception raise rewrite_traceback_stack(source=source) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1321, in <listcomp> [n async for n in self.root_render_func(ctx)] # type: ignore File "roles/tor-switch.j2", line 1, in top-level template code File "base.j2", line 3, in top-level template code File "roles/tor-switch.j2", line 13, in block 'content' File "common/vlans.j2", line 4, in top-level template code File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 370, in __repr__ data = list(self[: REPR_OUTPUT_SIZE + 1]) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 394, in __iter__ self._fetch_all() File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 1867, in _fetch_all self._result_cache = list(self._iterable_class(self)) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 87, in __iter__ results = compiler.execute_sql( File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1396, in execute_sql cursor = self.connection.cursor() File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/utils/asyncio.py", line 24, in inner raise SynchronousOnlyOperation(message) django.core.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async. Internal Server Error: /dcim/devices/14/render-config/ Traceback (most recent call last): File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 56, in inner response = get_response(request) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 103, in view return self.dispatch(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/base.py", line 26, in dispatch return super().dispatch(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/netbox/utilities/views.py", line 99, in dispatch return super().dispatch(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 142, in dispatch return handler(request, *args, **kwargs) File "/home/asaharan/PycharmProjects/netbox/netbox/netbox/views/generic/object_views.py", line 73, in get **self.get_extra_context(request, instance), File "/home/asaharan/PycharmProjects/netbox/netbox/dcim/views.py", line 2022, in get_extra_context rendered_config = config_template.render(context=context_data) File "/home/asaharan/PycharmProjects/netbox/netbox/extras/models/configs.py", line 252, in render output = template.render(**context) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1291, in render return loop.run_until_complete(self.render_async(*args, **kwargs)) File "/usr/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete return future.result() File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1324, in render_async return self.environment.handle_exception() File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 936, in handle_exception raise rewrite_traceback_stack(source=source) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/jinja2/environment.py", line 1321, in <listcomp> [n async for n in self.root_render_func(ctx)] # type: ignore File "roles/tor-switch.j2", line 1, in top-level template code File "base.j2", line 3, in top-level template code File "roles/tor-switch.j2", line 13, in block 'content' File "common/vlans.j2", line 4, in top-level template code File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 370, in __repr__ data = list(self[: REPR_OUTPUT_SIZE + 1]) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 394, in __iter__ self._fetch_all() File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 1867, in _fetch_all self._result_cache = list(self._iterable_class(self)) File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/query.py", line 87, in __iter__ results = compiler.execute_sql( File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/db/models/sql/compiler.py", line 1396, in execute_sql cursor = self.connection.cursor() File "/home/asaharan/PycharmProjects/netbox/venv/lib/python3.10/site-packages/django/utils/asyncio.py", line 24, in inner raise SynchronousOnlyOperation(message) django.core.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async. [31/Mar/2023 19:12:14] "GET /dcim/devices/14/render-config/ HTTP/1.1" 500 196143 ```
adam added the type: bugstatus: under reviewbeta labels 2025-12-29 20:28:50 +01:00
adam closed this issue 2025-12-29 20:28:50 +01:00
Author
Owner

@kkthxbye-code commented on GitHub (Apr 2, 2023):

Can you add some context as why using enable_async is expected to work, and why you would want to use it? Netbox is very much not running async as is, so I have a hard time seeing what running async templates would do.

@kkthxbye-code commented on GitHub (Apr 2, 2023): Can you add some context as why using enable_async is expected to work, and why you would want to use it? Netbox is very much not running async as is, so I have a hard time seeing what running async templates would do.
Author
Owner

@abhi1693 commented on GitHub (Apr 3, 2023):

I was just testing with random options that are provided by Jinja. I was curious as to what would happen if I used an async variable. To my surprise it didn't throw any errors while accessing the config for several hours. I did ask Jeremy whether to consider this as a bug or not to use async options and he wanted to document it, so I opened it up as a bug report.

@abhi1693 commented on GitHub (Apr 3, 2023): I was just testing with random options that are provided by Jinja. I was curious as to what would happen if I used an async variable. To my surprise it didn't throw any errors while accessing the config for several hours. I did ask Jeremy whether to consider this as a bug or not to use async options and he wanted to document it, so I opened it up as a bug report.
Author
Owner

@jeremystretch commented on GitHub (Apr 4, 2023):

Thanks for documenting this @abhi1693. After some thought, I don't think there's any action to take for this specific issue. Ultimately it's just an unsupported Jinja2 environment configuration, and the error message explains why.

I'm going to close this out for now, but happy to revisit if we notice a pattern of similar issues develop.

@jeremystretch commented on GitHub (Apr 4, 2023): Thanks for documenting this @abhi1693. After some thought, I don't think there's any action to take for this specific issue. Ultimately it's just an unsupported Jinja2 environment configuration, and the error message explains why. I'm going to close this out for now, but happy to revisit if we notice a pattern of similar issues develop.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/netbox#7837