-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Labels
severity: mediumResults in substantial degraded or broken functionality for specfic workflowsResults in substantial degraded or broken functionality for specfic workflowsstatus: acceptedThis issue has been accepted for implementationThis issue has been accepted for implementationtype: bugA confirmed report of unexpected behavior in the applicationA confirmed report of unexpected behavior in the application
Description
Deployment Type
Self-hosted
NetBox Version
v4.2.3
Python Version
3.12
Steps to Reproduce
- Upload custom script to UI
from extras.scripts import Script
class Test(Script):
def run(self, data, commit):
self.log_info("Netbox Test")
Expected Behavior
The script should execute properly and accurate results show be rendered in UI
Observed Behavior
One of two outcomes can occur:
- When running the script via the UI, the script execution completes with an incorrect Error result in the UI
log:
netbox-worker-f9bb66977-p75nj netbox-worker 15:41:08 Successfully completed handle(commit=True, data={}, job=<Job: f78c9970-15e2-4afa-bc99-a5c2a0ef9f92>, request=<utilities.request.NetBoxFakeRequest object at 0x7fc1cdbf90d0>) job in 0:00:00.050665s on worker 49aec44fc373495eb3b5f05233990f88
netbox-worker-f9bb66977-p75nj netbox-worker 15:41:08 default: Job OK (f78c9970-15e2-4afa-bc99-a5c2a0ef9f92)
netbox-worker-f9bb66977-p75nj netbox-worker 15:41:08 Result is kept for 500 seconds
- When running the script via the UI, a server error occurs
Backtrace:
netbox-556b8d659f-zlg9p netbox Internal Server Error: /extras/scripts/results/61/
netbox-556b8d659f-zlg9p netbox Traceback (most recent call last):
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner
netbox-556b8d659f-zlg9p netbox response = get_response(request)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/core/handlers/base.py", line 197, in _get_response
netbox-556b8d659f-zlg9p netbox response = wrapped_callback(request, *callback_args, **callback_kwargs)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/views/generic/base.py", line 104, in view
netbox-556b8d659f-zlg9p netbox return self.dispatch(request, *args, **kwargs)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/netbox/netbox/views/generic/base.py", line 26, in dispatch
netbox-556b8d659f-zlg9p netbox return super().dispatch(request, *args, **kwargs)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/netbox/utilities/views.py", line 125, in dispatch
netbox-556b8d659f-zlg9p netbox return super().dispatch(request, *args, **kwargs)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/netbox/utilities/views.py", line 39, in dispatch
netbox-556b8d659f-zlg9p netbox return super().dispatch(request, *args, **kwargs)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/views/generic/base.py", line 143, in dispatch
netbox-556b8d659f-zlg9p netbox return handler(request, *args, **kwargs)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/netbox/extras/views.py", line 1409, in get
netbox-556b8d659f-zlg9p netbox return render(request, 'extras/script_result.html', context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/shortcuts.py", line 25, in render
netbox-556b8d659f-zlg9p netbox content = loader.render_to_string(template_name, context, request, using=using)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/loader.py", line 62, in render_to_string
netbox-556b8d659f-zlg9p netbox return template.render(context, request)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/backends/django.py", line 107, in render
netbox-556b8d659f-zlg9p netbox return self.template.render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 171, in render
netbox-556b8d659f-zlg9p netbox return self._render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 163, in _render
netbox-556b8d659f-zlg9p netbox return self.nodelist.render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 1008, in render
netbox-556b8d659f-zlg9p netbox return SafeString("".join([node.render_annotated(context) for node in self]))
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 969, in render_annotated
netbox-556b8d659f-zlg9p netbox return self.render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/loader_tags.py", line 159, in render
netbox-556b8d659f-zlg9p netbox return compiled_parent._render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 163, in _render
netbox-556b8d659f-zlg9p netbox return self.nodelist.render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 1008, in render
netbox-556b8d659f-zlg9p netbox return SafeString("".join([node.render_annotated(context) for node in self]))
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 969, in render_annotated
netbox-556b8d659f-zlg9p netbox return self.render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/loader_tags.py", line 159, in render
netbox-556b8d659f-zlg9p netbox return compiled_parent._render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 163, in _render
netbox-556b8d659f-zlg9p netbox return self.nodelist.render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 1008, in render
netbox-556b8d659f-zlg9p netbox return SafeString("".join([node.render_annotated(context) for node in self]))
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 969, in render_annotated
netbox-556b8d659f-zlg9p netbox return self.render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/loader_tags.py", line 159, in render
netbox-556b8d659f-zlg9p netbox return compiled_parent._render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 163, in _render
netbox-556b8d659f-zlg9p netbox return self.nodelist.render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 1008, in render
netbox-556b8d659f-zlg9p netbox return SafeString("".join([node.render_annotated(context) for node in self]))
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 969, in render_annotated
netbox-556b8d659f-zlg9p netbox return self.render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/loader_tags.py", line 65, in render
netbox-556b8d659f-zlg9p netbox result = block.nodelist.render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 1008, in render
netbox-556b8d659f-zlg9p netbox return SafeString("".join([node.render_annotated(context) for node in self]))
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 969, in render_annotated
netbox-556b8d659f-zlg9p netbox return self.render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/loader_tags.py", line 65, in render
netbox-556b8d659f-zlg9p netbox result = block.nodelist.render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 1008, in render
netbox-556b8d659f-zlg9p netbox return SafeString("".join([node.render_annotated(context) for node in self]))
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 969, in render_annotated
netbox-556b8d659f-zlg9p netbox return self.render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/defaulttags.py", line 327, in render
netbox-556b8d659f-zlg9p netbox return nodelist.render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 1008, in render
netbox-556b8d659f-zlg9p netbox return SafeString("".join([node.render_annotated(context) for node in self]))
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/base.py", line 969, in render_annotated
netbox-556b8d659f-zlg9p netbox return self.render(context)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/venv/lib/python3.12/site-packages/django/template/library.py", line 258, in render
netbox-556b8d659f-zlg9p netbox _dict = self.func(*resolved_args, **resolved_kwargs)
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/netbox/utilities/templatetags/helpers.py", line 263, in table_config_form
netbox-556b8d659f-zlg9p netbox 'form': TableConfigForm(table=table),
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox File "/opt/netbox/netbox/utilities/forms/forms.py", line 135, in __init__
netbox-556b8d659f-zlg9p netbox self.fields['available_columns'].choices = table.available_columns
netbox-556b8d659f-zlg9p netbox ^^^^^^^^^^^^^^^^^^^^^^^
netbox-556b8d659f-zlg9p netbox AttributeError: 'NoneType' object has no attribute 'available_columns'
The script runs successfully via the CLI and the results are displayed properly in the UI, but does not run successfully in the UI
$ python /opt/netbox/netbox/manage.py runscript netbox_test.Test
🧬 loaded config '/etc/netbox/config/configuration.py'
🧬 loaded config '/etc/netbox/config/extra.py'
🧬 loaded config '/etc/netbox/config/logging.py'
🧬 loaded config '/etc/netbox/config/plugins.py'
[2025-02-24 15:25:33,732][INFO] - Running script (commit=False)
[2025-02-24 15:25:33,733][INFO] - Netbox Test
[2025-02-24 15:25:33,733][INFO] - Database changes have been reverted automatically.
[2025-02-24 15:25:33,738][INFO] - Script completed in 0 minutes, 0.01 seconds
Deployed using netbox-community/netbox-chart
Metadata
Metadata
Assignees
Labels
severity: mediumResults in substantial degraded or broken functionality for specfic workflowsResults in substantial degraded or broken functionality for specfic workflowsstatus: acceptedThis issue has been accepted for implementationThis issue has been accepted for implementationtype: bugA confirmed report of unexpected behavior in the applicationA confirmed report of unexpected behavior in the application