Unable to delete custom script when file is missing #11186

Closed
opened 2025-12-29 21:41:40 +01:00 by adam · 3 comments
Owner

Originally created by @llamafilm on GitHub (May 16, 2025).

Deployment Type

Self-hosted

NetBox Version

v4.3.1

Python Version

3.12

Steps to Reproduce

  1. Create a custom script in Netbox 4.2
  2. Delete the script file but do not delete the script from Netbox
  3. Upgrade to 4.3.1
  4. Notice that the script name is missing in the UI and the netbox.data_backends log shows Failed to load script: update_telegraf error: [Errno 2] No such file or directory: '/opt/netbox/netbox/scripts/update_telegraf.py' at debug level
  5. Try to delete the script from the webpage

Expected Behavior

I should be able to delete the script even though the file is missing

Observed Behavior

Internal Server Error: /extras/script-modules/90/delete/
Traceback (most recent call last):
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/relations.py", line 396, in to_representation
    url = self.get_url(value, self.view_name, request, format)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox/netbox/netbox/api/serializers/fields.py", line 37, in get_url
    return self.reverse(view_name, kwargs=kwargs, request=request, format=format)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/reverse.py", line 47, in reverse
    url = _reverse(viewname, args, kwargs, request, format, **extra)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/reverse.py", line 60, in _reverse
    url = django_reverse(viewname, args=args, kwargs=kwargs, **extra)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/urls/base.py", line 98, in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/urls/resolvers.py", line 831, in _reverse_with_prefix
    raise NoReverseMatch(msg)
django.urls.exceptions.NoReverseMatch: Reverse for 'scriptmodule-detail' not found. 'scriptmodule-detail' is not a valid view function or pattern name.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/views/generic/base.py", line 104, in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox/netbox/netbox/views/generic/base.py", line 26, in dispatch
    return super().dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox/netbox/utilities/views.py", line 125, in dispatch
    return super().dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox/netbox/utilities/views.py", line 39, in dispatch
    return super().dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/views/generic/base.py", line 143, in dispatch
    return handler(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox/netbox/netbox/views/generic/object_views.py", line 467, in post
    obj.delete()
  File "/opt/netbox/netbox/core/models/files.py", line 125, in delete
    return super().delete(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox/netbox/netbox/models/features.py", line 575, in delete
    return super().delete(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/db/models/base.py", line 1281, in delete
    return collector.delete()
           ^^^^^^^^^^^^^^^^^^
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/db/models/deletion.py", line 458, in delete
    signals.pre_delete.send(
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/dispatch/dispatcher.py", line 189, in send
    response = receiver(signal=self, sender=sender, **named)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox/netbox/core/signals.py", line 169, in handle_deleted_object
    enqueue_event(queue, instance, request.user, request.id, OBJECT_DELETED)
  File "/opt/netbox/netbox/extras/events.py", line 77, in enqueue_event
    'data': serialize_for_event(instance),
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox/netbox/extras/events.py", line 35, in serialize_for_event
    return serializer.data
           ^^^^^^^^^^^^^^^
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/serializers.py", line 573, in data
    ret = super().data
          ^^^^^^^^^^^^
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/serializers.py", line 251, in data
    self._data = self.to_representation(self.instance)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/serializers.py", line 540, in to_representation
    ret[field.field_name] = field.to_representation(attribute)
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/fields.py", line 1870, in to_representation
    return method(value)
           ^^^^^^^^^^^^^
  File "/opt/netbox/netbox/extras/api/serializers_/events.py", line 49, in get_action_object
    return ScriptSerializer(script, nested=True, context=context).data
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/serializers.py", line 573, in data
    ret = super().data
          ^^^^^^^^^^^^
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/serializers.py", line 251, in data
    self._data = self.to_representation(self.instance)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/serializers.py", line 540, in to_representation
    ret[field.field_name] = field.to_representation(attribute)
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/relations.py", line 411, in to_representation
    raise ImproperlyConfigured(msg % self.view_name)
django.core.exceptions.ImproperlyConfigured: Could not resolve URL for hyperlinked relationship using view name "". You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field.
Originally created by @llamafilm on GitHub (May 16, 2025). ### Deployment Type Self-hosted ### NetBox Version v4.3.1 ### Python Version 3.12 ### Steps to Reproduce 1. Create a custom script in Netbox 4.2 2. Delete the script file but do not delete the script from Netbox 3. Upgrade to 4.3.1 4. Notice that the script name is missing in the UI and the `netbox.data_backends` log shows `Failed to load script: update_telegraf error: [Errno 2] No such file or directory: '/opt/netbox/netbox/scripts/update_telegraf.py'` at debug level 5. Try to delete the script from the webpage ### Expected Behavior I should be able to delete the script even though the file is missing ### Observed Behavior ``` Internal Server Error: /extras/script-modules/90/delete/ Traceback (most recent call last): File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/relations.py", line 396, in to_representation url = self.get_url(value, self.view_name, request, format) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox/netbox/netbox/api/serializers/fields.py", line 37, in get_url return self.reverse(view_name, kwargs=kwargs, request=request, format=format) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/reverse.py", line 47, in reverse url = _reverse(viewname, args, kwargs, request, format, **extra) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/reverse.py", line 60, in _reverse url = django_reverse(viewname, args=args, kwargs=kwargs, **extra) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/urls/base.py", line 98, in reverse resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/urls/resolvers.py", line 831, in _reverse_with_prefix raise NoReverseMatch(msg) django.urls.exceptions.NoReverseMatch: Reverse for 'scriptmodule-detail' not found. 'scriptmodule-detail' is not a valid view function or pattern name. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/core/handlers/base.py", line 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/views/generic/base.py", line 104, in view return self.dispatch(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox/netbox/netbox/views/generic/base.py", line 26, in dispatch return super().dispatch(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox/netbox/utilities/views.py", line 125, in dispatch return super().dispatch(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox/netbox/utilities/views.py", line 39, in dispatch return super().dispatch(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/views/generic/base.py", line 143, in dispatch return handler(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox/netbox/netbox/views/generic/object_views.py", line 467, in post obj.delete() File "/opt/netbox/netbox/core/models/files.py", line 125, in delete return super().delete(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox/netbox/netbox/models/features.py", line 575, in delete return super().delete(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/db/models/base.py", line 1281, in delete return collector.delete() ^^^^^^^^^^^^^^^^^^ File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/db/models/deletion.py", line 458, in delete signals.pre_delete.send( File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/django/dispatch/dispatcher.py", line 189, in send response = receiver(signal=self, sender=sender, **named) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox/netbox/core/signals.py", line 169, in handle_deleted_object enqueue_event(queue, instance, request.user, request.id, OBJECT_DELETED) File "/opt/netbox/netbox/extras/events.py", line 77, in enqueue_event 'data': serialize_for_event(instance), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox/netbox/extras/events.py", line 35, in serialize_for_event return serializer.data ^^^^^^^^^^^^^^^ File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/serializers.py", line 573, in data ret = super().data ^^^^^^^^^^^^ File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/serializers.py", line 251, in data self._data = self.to_representation(self.instance) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/serializers.py", line 540, in to_representation ret[field.field_name] = field.to_representation(attribute) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/fields.py", line 1870, in to_representation return method(value) ^^^^^^^^^^^^^ File "/opt/netbox/netbox/extras/api/serializers_/events.py", line 49, in get_action_object return ScriptSerializer(script, nested=True, context=context).data ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/serializers.py", line 573, in data ret = super().data ^^^^^^^^^^^^ File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/serializers.py", line 251, in data self._data = self.to_representation(self.instance) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/serializers.py", line 540, in to_representation ret[field.field_name] = field.to_representation(attribute) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/netbox-4.3.1/venv/lib/python3.12/site-packages/rest_framework/relations.py", line 411, in to_representation raise ImproperlyConfigured(msg % self.view_name) django.core.exceptions.ImproperlyConfigured: Could not resolve URL for hyperlinked relationship using view name "". You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field. ```
adam added the type: bugpending closurestatus: revisions needed labels 2025-12-29 21:41:40 +01:00
adam closed this issue 2025-12-29 21:41:40 +01:00
Author
Owner

@jnovinger commented on GitHub (May 19, 2025):

Thank you for opening a bug report. I was unable to reproduce the reported behavior on upgrading NetBox v4.2.9 to v4.3.1. Please re-confirm the reported behavior on the current stable release and adjust your post above as necessary. Remember to provide detailed steps that someone else can follow using a clean installation of NetBox to reproduce the issue. Remember to include the steps taken to create any initial objects or other data.

@jnovinger commented on GitHub (May 19, 2025): Thank you for opening a bug report. I was unable to reproduce the reported behavior on upgrading NetBox v4.2.9 to v4.3.1. Please re-confirm the reported behavior on the current stable release and adjust your post above as necessary. Remember to provide detailed steps that someone else can follow using a clean installation of NetBox to reproduce the issue. Remember to include the steps taken to create any initial objects or other data.
Author
Owner

@github-actions[bot] commented on GitHub (May 27, 2025):

This is a reminder that additional information is needed in order to further triage this issue. If the requested details are not provided, the issue will soon be closed automatically.

@github-actions[bot] commented on GitHub (May 27, 2025): This is a reminder that additional information is needed in order to further triage this issue. If the requested details are not provided, the issue will soon be closed automatically.
Author
Owner

@github-actions[bot] commented on GitHub (Jun 3, 2025):

This issue is being closed as no further information has been provided. If you would like to revisit this topic, please first modify your original post to include all the requested detail, and then ask that the issue be reopened.

@github-actions[bot] commented on GitHub (Jun 3, 2025): This issue is being closed as no further information has been provided. If you would like to revisit this topic, please first modify your original post to include all the requested detail, and then ask that the issue be reopened.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/netbox#11186