Server Error on Object deletion. #2152

Closed
opened 2025-12-29 17:22:44 +01:00 by adam · 8 comments
Owner

Originally created by @martink2 on GitHub (Nov 28, 2018).

Environment

  • Python version: v3.5.2
  • NetBox version: v2.4.6

Steps to Reproduce

My users are reporting that they get intermittent errors deleting or manipulating objects.
They get those errors for a couple of minutes and after a couple of minutes the delete operations working fine.

Expected Behavior

The operation should not produce a internal server error.

Observed Behavior

Please find the error info generated when this happens.

Internal Server Error: /dcim/devices/1560/delete/

ValueError at /dcim/devices/1560/delete/
Cannot assign "<django.contrib.auth.models.AnonymousUser object at 0x7f91c58913c8>": "ObjectChange.user" must be a "User" instance.

Request Method: POST
Request URL: https://******/dcim/devices/1560/delete/
Django Version: 2.0.9
Python Executable: /usr/bin/python3
Python Version: 3.5.2
Python Path: ['/opt/netbox/netbox', '/usr/local/bin', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages']
Server time: Wed, 28 Nov 2018 10:02:42 +0000
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'corsheaders',
'debug_toolbar',
'django_filters',
'django_tables2',
'mptt',
'rest_framework',
'taggit',
'taggit_serializer',
'timezone_field',
'circuits',
'dcim',
'ipam',
'extras',
'secrets',
'tenancy',
'users',
'utilities',
'virtualization',
'drf_yasg']
Installed Middleware:
('debug_toolbar.middleware.DebugToolbarMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'utilities.middleware.ExceptionHandlingMiddleware',
'utilities.middleware.LoginRequiredMiddleware',
'utilities.middleware.APIVersionMiddleware',
'extras.middleware.ObjectChangeMiddleware')


Traceback:

File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py" in inner
  35.             response = get_response(request)

File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _get_response
  128.                 response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _get_response
  126.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/usr/local/lib/python3.5/dist-packages/django/views/generic/base.py" in view
  69.             return self.dispatch(request, *args, **kwargs)

File "/usr/local/lib/python3.5/dist-packages/django/contrib/auth/mixins.py" in dispatch
  85.         return super().dispatch(request, *args, **kwargs)

File "/usr/local/lib/python3.5/dist-packages/django/views/generic/base.py" in dispatch
  89.         return handler(request, *args, **kwargs)

File "/opt/netbox/netbox/utilities/views.py" in post
  280.                 obj.delete()

File "/usr/local/lib/python3.5/dist-packages/django/db/models/base.py" in delete
  891.         return collector.delete()

File "/usr/local/lib/python3.5/dist-packages/django/db/models/deletion.py" in delete
  307.                             sender=model, instance=obj, using=self.using

File "/usr/local/lib/python3.5/dist-packages/django/dispatch/dispatcher.py" in send
  178.             for receiver in self._live_receivers(sender)

File "/usr/local/lib/python3.5/dist-packages/django/dispatch/dispatcher.py" in <listcomp>
  178.             for receiver in self._live_receivers(sender)

File "/usr/local/lib/python3.5/dist-packages/django/utils/functional.py" in _curried
  11.         return _curried_func(*(args + moreargs), **dict(kwargs, **morekwargs))

File "/opt/netbox/netbox/extras/middleware.py" in _record_object_deleted
  37.         instance.log_change(request.user, request.id, OBJECTCHANGE_ACTION_DELETE)

File "/opt/netbox/netbox/dcim/models.py" in log_change
  53.             object_data=serialize_object(self)

File "/usr/local/lib/python3.5/dist-packages/django/db/models/base.py" in __init__
  477.                     _setattr(self, field.name, rel_obj)

File "/usr/local/lib/python3.5/dist-packages/django/db/models/fields/related_descriptors.py" in __set__
  197.                     self.field.remote_field.model._meta.object_name,

Exception Type: ValueError at /dcim/devices/1560/delete/
Exception Value: Cannot assign "<django.contrib.auth.models.AnonymousUser object at 0x7f91c58913c8>": "ObjectChange.user" must be a "User" instance.
Request information:
USER: d030973

GET: No GET data

POST:
_confirm = ''
csrfmiddlewaretoken = 'KmqqTvgwzElKzc4roJbhKzgikIo4IeCoGFMbiN8HOdHEEx1bRQYfmG8gLPSXf8OY'
return_url = ''
confirm = 'True'

FILES: No FILES data

COOKIES:
csrftoken = 'wuhIYpVN3GaToyqRY6ddw5qWfWbwDa9WsNDtnHNYifwNtTnBrd0b8ciUG3Fpa4lw'
sessionid = '0nhtm3k9xg79rca5xejnmcftyb25crlb'

META:
CONTENT_LENGTH = '119'
CONTENT_TYPE = 'application/x-www-form-urlencoded'
CSRF_COOKIE = 'wuhIYpVN3GaToyqRY6ddw5qWfWbwDa9WsNDtnHNYifwNtTnBrd0b8ciUG3Fpa4lw'
HTTP_ACCEPT = 'text/html, application/xhtml+xml, image/jxr, */*'
HTTP_ACCEPT_ENCODING = 'gzip, deflate'
HTTP_ACCEPT_LANGUAGE = 'de-DE'
HTTP_CACHE_CONTROL = 'no-cache'
HTTP_CONNECTION = 'close'
HTTP_COOKIE = 'csrftoken=wuhIYpVN3GaToyqRY6ddw5qWfWbwDa9WsNDtnHNYifwNtTnBrd0b8ciUG3Fpa4lw; sessionid=0nhtm3k9xg79rca5xejnmcftyb25crlb'
HTTP_HOST = '127.0.0.1:8001'
HTTP_REFERER = 'https://******/dcim/devices/1560/delete/'
HTTP_USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko'
HTTP_X_FORWARDED_HOST = '******'
HTTP_X_FORWARDED_PROTO = 'https'
HTTP_X_REAL_IP = '10.88.140.206'
PATH_INFO = '/dcim/devices/1560/delete/'
QUERY_STRING = ''
RAW_URI = '/dcim/devices/1560/delete/'
REMOTE_ADDR = '127.0.0.1'
REMOTE_PORT = '49032'
REQUEST_METHOD = 'POST'
SCRIPT_NAME = ''
SERVER_NAME = '127.0.0.1'
SERVER_PORT = '8001'
SERVER_PROTOCOL = 'HTTP/1.0'
SERVER_SOFTWARE = 'gunicorn/19.9.0'
gunicorn.socket = <socket.socket fd=12, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8001), raddr=('127.0.0.1', 49032)>
wsgi.errors = <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f91bf841c50>
wsgi.file_wrapper = ''
wsgi.input = <gunicorn.http.body.Body object at 0x7f91bf841cf8>
wsgi.multiprocess = True
wsgi.multithread = False
wsgi.run_once = False
wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'

Settings:
Using settings module netbox.settings
ABSOLUTE_URL_OVERRIDES = {}
ADMINS = [['******', '******']]
ALLOWED_HOSTS = ['10.67.74.97', '******']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = ['django_auth_ldap.backend.LDAPBackend', 'django.contrib.auth.backends.ModelBackend']
AUTH_LDAP_BIND_DN = 'CN=netbox-service,CN=Users,DC=ad,DC=global,DC=cloud,DC=sap'
AUTH_LDAP_BIND_PASSWORD = '********************'
AUTH_LDAP_CACHE_GROUPS = True
AUTH_LDAP_CONNECTION_OPTIONS = {8: 0}
AUTH_LDAP_FIND_GROUP_PERMS = True
AUTH_LDAP_GROUP_CACHE_TIMEOUT = 3600
AUTH_LDAP_GROUP_SEARCH = <LDAPSearch: OU=Permissions,OU=CCloud,DC=ad,DC=global,DC=cloud,DC=sap>
AUTH_LDAP_GROUP_TYPE = <django_auth_ldap.config.NestedGroupOfNamesType object at 0x7f91d8755710>
AUTH_LDAP_MIRROR_GROUPS = True
AUTH_LDAP_REQUIRE_GROUP = 'CN=CP_CONV_NETBOX_USE,OU=Permissions,OU=CCloud,DC=ad,DC=global,DC=cloud,DC=sap'
AUTH_LDAP_SERVER_URI = 'ldaps://ldap.global.cloud.sap'
AUTH_LDAP_USER_ATTR_MAP = {'last_name': 'sn', 'first_name': 'givenName'}
AUTH_LDAP_USER_DN_TEMPLATE = None
AUTH_LDAP_USER_FLAGS_BY_GROUP = {'is_active': 'CN=CP_CONV_NETBOX_USE,OU=Permissions,OU=CCloud,DC=ad,DC=global,DC=cloud,DC=sap'}
AUTH_LDAP_USER_SEARCH = <LDAPSearch: OU=Identities,DC=ad,DC=global,DC=cloud,DC=sap>
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BANNER_BOTTOM = ''
BANNER_LOGIN = ''
BANNER_TOP = ''
BASE_DIR = '/opt/netbox/netbox'
BASE_PATH = ''
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
CHANGELOG_RETENTION = 0
CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_REGEX_WHITELIST = []
CORS_ORIGIN_WHITELIST = []
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = ['10.67.74.97', '******']
CSRF_USE_SESSIONS = False
DATABASE = {'OPTIONS': {}, 'CONN_MAX_AGE': 0, 'HOST': 'localhost', 'NAME': 'netbox', 'PORT': '', 'PASSWORD': '********************', 'USER': 'netbox', 'TIME_ZONE': None, 'AUTOCOMMIT': True, 'ATOMIC_REQUESTS': False, 'TEST': {'NAME': None, 'COLLATION': None, 'CHARSET': None, 'MIRROR': None}, 'ENGINE': 'django.db.backends.postgresql'}
DATABASES = {'default': {'OPTIONS': {}, 'CONN_MAX_AGE': 0, 'HOST': 'localhost', 'NAME': 'netbox', 'PORT': '', 'PASSWORD': '********************', 'USER': 'netbox', 'TIME_ZONE': None, 'AUTOCOMMIT': True, 'ATOMIC_REQUESTS': False, 'TEST': {'NAME': None, 'COLLATION': None, 'CHARSET': None, 'MIRROR': None}, 'ENGINE': 'django.db.backends.postgresql'}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = None
DATETIME_FORMAT = 'N j, Y g:i a'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_CONTENT_TYPE = 'text/html'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'webmaster@localhost'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL = {'PORT': 25, 'SERVER': 'mail.sap.corp', 'USERNAME': '', 'TIMEOUT': 10, 'PASSWORD': '********************', 'FROM_EMAIL': 'test@sap.corp'}
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'mail.sap.corp'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[NetBox] '
EMAIL_TIMEOUT = 10
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
ENFORCE_GLOBAL_UNIQUE = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = None
FILE_UPLOAD_TEMP_DIR = None
FILTERS_NULL_CHOICE_LABEL = 'None'
FILTERS_NULL_CHOICE_VALUE = '0'
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HOSTNAME = '******'
IGNORABLE_404_URLS = []
INSTALLED_APPS = ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'corsheaders', 'debug_toolbar', 'django_filters', 'django_tables2', 'mptt', 'rest_framework', 'taggit', 'taggit_serializer', 'timezone_field', 'circuits', 'dcim', 'ipam', 'extras', 'secrets', 'tenancy', 'users', 'utilities', 'virtualization', 'drf_yasg']
INTERNAL_IPS = "('127.0.0.1', '::1')"
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LDAP_CONFIGURED = True
LDAP_IGNORE_CERT_ERRORS = True
LOCALE_PATHS = []
LOGGING = {}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = '/accounts/profile/'
LOGIN_REQUIRED = False
LOGIN_URL = '/login/'
LOGOUT_REDIRECT_URL = None
MAINTENANCE_MODE = False
MANAGERS = []
MAX_PAGE_SIZE = 0
MEDIA_ROOT = '/opt/netbox/netbox/media'
MEDIA_URL = '/media/'
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('debug_toolbar.middleware.DebugToolbarMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'utilities.middleware.ExceptionHandlingMiddleware', 'utilities.middleware.LoginRequiredMiddleware', 'utilities.middleware.APIVersionMiddleware', 'extras.middleware.ObjectChangeMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NAPALM_ARGS = {}
NAPALM_PASSWORD = '********************'
NAPALM_TIMEOUT = 30
NAPALM_USERNAME = ''
NUMBER_GROUPING = 0
PAGINATE_COUNT = 50
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
PREFER_IPV4 = True
PREPEND_WWW = False
REDIS = {'PORT': 6379, 'HOST': 'localhost', 'DEFAULT_TIMEOUT': 300, 'PASSWORD': '********************', 'DATABASE': 0}
REDIS_DATABASE = 0
REDIS_DEFAULT_TIMEOUT = 300
REDIS_HOST = 'localhost'
REDIS_PASSWORD = '********************'
REDIS_PORT = 6379
REPORTS_ROOT = '/opt/netbox-reports'
REST_FRAMEWORK = {'DEFAULT_PAGINATION_CLASS': 'netbox.api.OptionalLimitOffsetPagination', 'VIEW_NAME_FUNCTION': 'netbox.api.get_view_name', 'DEFAULT_RENDERER_CLASSES': ('rest_framework.renderers.JSONRenderer', 'netbox.api.FormlessBrowsableAPIRenderer'), 'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework.authentication.SessionAuthentication', 'netbox.api.TokenAuthentication'), 'PAGE_SIZE': 50, 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.AcceptHeaderVersioning', 'DEFAULT_VERSION': '2.4', 'ALLOWED_VERSIONS': ['2.4'], 'DEFAULT_PERMISSION_CLASSES': ('netbox.api.TokenPermissions',), 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)}
REST_FRAMEWORK_VERSION = '2.4'
ROOT_URLCONF = 'netbox.urls'
RQ_QUEUES = {'default': {'PORT': 6379, 'HOST': 'localhost', 'DEFAULT_TIMEOUT': 300, 'PASSWORD': '********************', 'DB': 0}}
SECRETS_MIN_PUBKEY_SIZE = '********************'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = False
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = "('HTTP_X_FORWARDED_PROTO', 'https')"
SECURE_REDIRECT_EXEMPT = []
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'test@sap.corp'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
SETTINGS_MODULE = 'netbox.settings'
SHORT_DATETIME_FORMAT = 'Y-m-d H:i'
SHORT_DATE_FORMAT = 'Y-m-d'
SHORT_TIME_FORMAT = 'H:i:s'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
STATICFILES_DIRS = "('/opt/netbox/netbox/project-static',)"
STATICFILES_FINDERS = ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder']
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/netbox/netbox/static/'
STATIC_URL = '/static/'
SWAGGER_SETTINGS = {'DEFAULT_FIELD_INSPECTORS': ['utilities.custom_inspectors.NullableBooleanFieldInspector', 'utilities.custom_inspectors.CustomChoiceFieldInspector', 'drf_yasg.inspectors.CamelCaseJSONFilter', 'drf_yasg.inspectors.ReferencingSerializerInspector', 'drf_yasg.inspectors.RelatedFieldInspector', 'drf_yasg.inspectors.ChoiceFieldInspector', 'drf_yasg.inspectors.FileFieldInspector', 'drf_yasg.inspectors.DictFieldInspector', 'drf_yasg.inspectors.SimpleFieldInspector', 'drf_yasg.inspectors.StringDefaultFieldInspector'], 'VALIDATOR_URL': None, 'DEFAULT_FILTER_INSPECTORS': ['utilities.custom_inspectors.IdInFilterInspector', 'drf_yasg.inspectors.CoreAPICompatInspector'], 'SECURITY_DEFINITIONS': {'Bearer': {'in': 'header', 'name': 'Authorization', 'type': 'apiKey'}}, 'DEFAULT_PAGINATOR_INSPECTORS': ['utilities.custom_inspectors.NullablePaginatorInspector', 'drf_yasg.inspectors.DjangoRestResponsePagination', 'drf_yasg.inspectors.CoreAPICompatInspector']}
TEMPLATES = [{'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.template.context_processors.media', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'utilities.context_processors.settings']}, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/opt/netbox/netbox/templates/'], 'APP_DIRS': True}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'g:i a'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_ETAGS = False
USE_I18N = True
USE_L10N = False
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
VERSION = '2.4.6'
WEBHOOKS_ENABLED = False
WSGI_APPLICATION = 'netbox.wsgi.application'
X_FRAME_OPTIONS = 'SAMEORIGIN'
YEAR_MONTH_FORMAT = 'F Y'
Originally created by @martink2 on GitHub (Nov 28, 2018). <!-- NOTE: This form is only for reproducible bugs. If you need assistance with NetBox installation, or if you have a general question, DO NOT open an issue. Instead, post to our mailing list: https://groups.google.com/forum/#!forum/netbox-discuss Please describe the environment in which you are running NetBox. Be sure that you are running an unmodified instance of the latest stable release before submitting a bug report. --> ### Environment * Python version: v3.5.2 * NetBox version: v2.4.6 <!-- Describe in detail the steps that someone else can take to reproduce this bug using the current stable release of NetBox (or the current beta release where applicable). --> ### Steps to Reproduce My users are reporting that they get intermittent errors deleting or manipulating objects. They get those errors for a couple of minutes and after a couple of minutes the delete operations working fine. ### Expected Behavior The operation should not produce a internal server error. <!-- What happened instead? --> ### Observed Behavior Please find the error info generated when this happens. ``` Internal Server Error: /dcim/devices/1560/delete/ ValueError at /dcim/devices/1560/delete/ Cannot assign "<django.contrib.auth.models.AnonymousUser object at 0x7f91c58913c8>": "ObjectChange.user" must be a "User" instance. Request Method: POST Request URL: https://******/dcim/devices/1560/delete/ Django Version: 2.0.9 Python Executable: /usr/bin/python3 Python Version: 3.5.2 Python Path: ['/opt/netbox/netbox', '/usr/local/bin', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages'] Server time: Wed, 28 Nov 2018 10:02:42 +0000 Installed Applications: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'corsheaders', 'debug_toolbar', 'django_filters', 'django_tables2', 'mptt', 'rest_framework', 'taggit', 'taggit_serializer', 'timezone_field', 'circuits', 'dcim', 'ipam', 'extras', 'secrets', 'tenancy', 'users', 'utilities', 'virtualization', 'drf_yasg'] Installed Middleware: ('debug_toolbar.middleware.DebugToolbarMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'utilities.middleware.ExceptionHandlingMiddleware', 'utilities.middleware.LoginRequiredMiddleware', 'utilities.middleware.APIVersionMiddleware', 'extras.middleware.ObjectChangeMiddleware') Traceback: File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py" in inner 35. response = get_response(request) File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _get_response 128. response = self.process_exception_by_middleware(e, request) File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _get_response 126. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/local/lib/python3.5/dist-packages/django/views/generic/base.py" in view 69. return self.dispatch(request, *args, **kwargs) File "/usr/local/lib/python3.5/dist-packages/django/contrib/auth/mixins.py" in dispatch 85. return super().dispatch(request, *args, **kwargs) File "/usr/local/lib/python3.5/dist-packages/django/views/generic/base.py" in dispatch 89. return handler(request, *args, **kwargs) File "/opt/netbox/netbox/utilities/views.py" in post 280. obj.delete() File "/usr/local/lib/python3.5/dist-packages/django/db/models/base.py" in delete 891. return collector.delete() File "/usr/local/lib/python3.5/dist-packages/django/db/models/deletion.py" in delete 307. sender=model, instance=obj, using=self.using File "/usr/local/lib/python3.5/dist-packages/django/dispatch/dispatcher.py" in send 178. for receiver in self._live_receivers(sender) File "/usr/local/lib/python3.5/dist-packages/django/dispatch/dispatcher.py" in <listcomp> 178. for receiver in self._live_receivers(sender) File "/usr/local/lib/python3.5/dist-packages/django/utils/functional.py" in _curried 11. return _curried_func(*(args + moreargs), **dict(kwargs, **morekwargs)) File "/opt/netbox/netbox/extras/middleware.py" in _record_object_deleted 37. instance.log_change(request.user, request.id, OBJECTCHANGE_ACTION_DELETE) File "/opt/netbox/netbox/dcim/models.py" in log_change 53. object_data=serialize_object(self) File "/usr/local/lib/python3.5/dist-packages/django/db/models/base.py" in __init__ 477. _setattr(self, field.name, rel_obj) File "/usr/local/lib/python3.5/dist-packages/django/db/models/fields/related_descriptors.py" in __set__ 197. self.field.remote_field.model._meta.object_name, Exception Type: ValueError at /dcim/devices/1560/delete/ Exception Value: Cannot assign "<django.contrib.auth.models.AnonymousUser object at 0x7f91c58913c8>": "ObjectChange.user" must be a "User" instance. Request information: USER: d030973 GET: No GET data POST: _confirm = '' csrfmiddlewaretoken = 'KmqqTvgwzElKzc4roJbhKzgikIo4IeCoGFMbiN8HOdHEEx1bRQYfmG8gLPSXf8OY' return_url = '' confirm = 'True' FILES: No FILES data COOKIES: csrftoken = 'wuhIYpVN3GaToyqRY6ddw5qWfWbwDa9WsNDtnHNYifwNtTnBrd0b8ciUG3Fpa4lw' sessionid = '0nhtm3k9xg79rca5xejnmcftyb25crlb' META: CONTENT_LENGTH = '119' CONTENT_TYPE = 'application/x-www-form-urlencoded' CSRF_COOKIE = 'wuhIYpVN3GaToyqRY6ddw5qWfWbwDa9WsNDtnHNYifwNtTnBrd0b8ciUG3Fpa4lw' HTTP_ACCEPT = 'text/html, application/xhtml+xml, image/jxr, */*' HTTP_ACCEPT_ENCODING = 'gzip, deflate' HTTP_ACCEPT_LANGUAGE = 'de-DE' HTTP_CACHE_CONTROL = 'no-cache' HTTP_CONNECTION = 'close' HTTP_COOKIE = 'csrftoken=wuhIYpVN3GaToyqRY6ddw5qWfWbwDa9WsNDtnHNYifwNtTnBrd0b8ciUG3Fpa4lw; sessionid=0nhtm3k9xg79rca5xejnmcftyb25crlb' HTTP_HOST = '127.0.0.1:8001' HTTP_REFERER = 'https://******/dcim/devices/1560/delete/' HTTP_USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko' HTTP_X_FORWARDED_HOST = '******' HTTP_X_FORWARDED_PROTO = 'https' HTTP_X_REAL_IP = '10.88.140.206' PATH_INFO = '/dcim/devices/1560/delete/' QUERY_STRING = '' RAW_URI = '/dcim/devices/1560/delete/' REMOTE_ADDR = '127.0.0.1' REMOTE_PORT = '49032' REQUEST_METHOD = 'POST' SCRIPT_NAME = '' SERVER_NAME = '127.0.0.1' SERVER_PORT = '8001' SERVER_PROTOCOL = 'HTTP/1.0' SERVER_SOFTWARE = 'gunicorn/19.9.0' gunicorn.socket = <socket.socket fd=12, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8001), raddr=('127.0.0.1', 49032)> wsgi.errors = <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f91bf841c50> wsgi.file_wrapper = '' wsgi.input = <gunicorn.http.body.Body object at 0x7f91bf841cf8> wsgi.multiprocess = True wsgi.multithread = False wsgi.run_once = False wsgi.url_scheme = 'https' wsgi.version = '(1, 0)' Settings: Using settings module netbox.settings ABSOLUTE_URL_OVERRIDES = {} ADMINS = [['******', '******']] ALLOWED_HOSTS = ['10.67.74.97', '******'] APPEND_SLASH = True AUTHENTICATION_BACKENDS = ['django_auth_ldap.backend.LDAPBackend', 'django.contrib.auth.backends.ModelBackend'] AUTH_LDAP_BIND_DN = 'CN=netbox-service,CN=Users,DC=ad,DC=global,DC=cloud,DC=sap' AUTH_LDAP_BIND_PASSWORD = '********************' AUTH_LDAP_CACHE_GROUPS = True AUTH_LDAP_CONNECTION_OPTIONS = {8: 0} AUTH_LDAP_FIND_GROUP_PERMS = True AUTH_LDAP_GROUP_CACHE_TIMEOUT = 3600 AUTH_LDAP_GROUP_SEARCH = <LDAPSearch: OU=Permissions,OU=CCloud,DC=ad,DC=global,DC=cloud,DC=sap> AUTH_LDAP_GROUP_TYPE = <django_auth_ldap.config.NestedGroupOfNamesType object at 0x7f91d8755710> AUTH_LDAP_MIRROR_GROUPS = True AUTH_LDAP_REQUIRE_GROUP = 'CN=CP_CONV_NETBOX_USE,OU=Permissions,OU=CCloud,DC=ad,DC=global,DC=cloud,DC=sap' AUTH_LDAP_SERVER_URI = 'ldaps://ldap.global.cloud.sap' AUTH_LDAP_USER_ATTR_MAP = {'last_name': 'sn', 'first_name': 'givenName'} AUTH_LDAP_USER_DN_TEMPLATE = None AUTH_LDAP_USER_FLAGS_BY_GROUP = {'is_active': 'CN=CP_CONV_NETBOX_USE,OU=Permissions,OU=CCloud,DC=ad,DC=global,DC=cloud,DC=sap'} AUTH_LDAP_USER_SEARCH = <LDAPSearch: OU=Identities,DC=ad,DC=global,DC=cloud,DC=sap> AUTH_PASSWORD_VALIDATORS = '********************' AUTH_USER_MODEL = 'auth.User' BANNER_BOTTOM = '' BANNER_LOGIN = '' BANNER_TOP = '' BASE_DIR = '/opt/netbox/netbox' BASE_PATH = '' CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}} CACHE_MIDDLEWARE_ALIAS = 'default' CACHE_MIDDLEWARE_KEY_PREFIX = '********************' CACHE_MIDDLEWARE_SECONDS = 600 CHANGELOG_RETENTION = 0 CORS_ORIGIN_ALLOW_ALL = False CORS_ORIGIN_REGEX_WHITELIST = [] CORS_ORIGIN_WHITELIST = [] CSRF_COOKIE_AGE = 31449600 CSRF_COOKIE_DOMAIN = None CSRF_COOKIE_HTTPONLY = False CSRF_COOKIE_NAME = 'csrftoken' CSRF_COOKIE_PATH = '/' CSRF_COOKIE_SECURE = False CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure' CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN' CSRF_TRUSTED_ORIGINS = ['10.67.74.97', '******'] CSRF_USE_SESSIONS = False DATABASE = {'OPTIONS': {}, 'CONN_MAX_AGE': 0, 'HOST': 'localhost', 'NAME': 'netbox', 'PORT': '', 'PASSWORD': '********************', 'USER': 'netbox', 'TIME_ZONE': None, 'AUTOCOMMIT': True, 'ATOMIC_REQUESTS': False, 'TEST': {'NAME': None, 'COLLATION': None, 'CHARSET': None, 'MIRROR': None}, 'ENGINE': 'django.db.backends.postgresql'} DATABASES = {'default': {'OPTIONS': {}, 'CONN_MAX_AGE': 0, 'HOST': 'localhost', 'NAME': 'netbox', 'PORT': '', 'PASSWORD': '********************', 'USER': 'netbox', 'TIME_ZONE': None, 'AUTOCOMMIT': True, 'ATOMIC_REQUESTS': False, 'TEST': {'NAME': None, 'COLLATION': None, 'CHARSET': None, 'MIRROR': None}, 'ENGINE': 'django.db.backends.postgresql'}} DATABASE_ROUTERS = [] DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 DATA_UPLOAD_MAX_NUMBER_FIELDS = None DATETIME_FORMAT = 'N j, Y g:i a' DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y'] DATE_FORMAT = 'N j, Y' DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y'] DEBUG = False DEBUG_PROPAGATE_EXCEPTIONS = False DECIMAL_SEPARATOR = '.' DEFAULT_CHARSET = 'utf-8' DEFAULT_CONTENT_TYPE = 'text/html' DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter' DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage' DEFAULT_FROM_EMAIL = 'webmaster@localhost' DEFAULT_INDEX_TABLESPACE = '' DEFAULT_TABLESPACE = '' DISALLOWED_USER_AGENTS = [] EMAIL = {'PORT': 25, 'SERVER': 'mail.sap.corp', 'USERNAME': '', 'TIMEOUT': 10, 'PASSWORD': '********************', 'FROM_EMAIL': 'test@sap.corp'} EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'mail.sap.corp' EMAIL_HOST_PASSWORD = '********************' EMAIL_HOST_USER = '' EMAIL_PORT = 25 EMAIL_SSL_CERTFILE = None EMAIL_SSL_KEYFILE = '********************' EMAIL_SUBJECT_PREFIX = '[NetBox] ' EMAIL_TIMEOUT = 10 EMAIL_USE_LOCALTIME = False EMAIL_USE_SSL = False EMAIL_USE_TLS = False ENFORCE_GLOBAL_UNIQUE = False FILE_CHARSET = 'utf-8' FILE_UPLOAD_DIRECTORY_PERMISSIONS = None FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler'] FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440 FILE_UPLOAD_PERMISSIONS = None FILE_UPLOAD_TEMP_DIR = None FILTERS_NULL_CHOICE_LABEL = 'None' FILTERS_NULL_CHOICE_VALUE = '0' FIRST_DAY_OF_WEEK = 0 FIXTURE_DIRS = [] FORCE_SCRIPT_NAME = None FORMAT_MODULE_PATH = None FORM_RENDERER = 'django.forms.renderers.DjangoTemplates' HOSTNAME = '******' IGNORABLE_404_URLS = [] INSTALLED_APPS = ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'corsheaders', 'debug_toolbar', 'django_filters', 'django_tables2', 'mptt', 'rest_framework', 'taggit', 'taggit_serializer', 'timezone_field', 'circuits', 'dcim', 'ipam', 'extras', 'secrets', 'tenancy', 'users', 'utilities', 'virtualization', 'drf_yasg'] INTERNAL_IPS = "('127.0.0.1', '::1')" LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')] LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur'] LANGUAGE_CODE = 'en-us' LANGUAGE_COOKIE_AGE = None LANGUAGE_COOKIE_DOMAIN = None LANGUAGE_COOKIE_NAME = 'django_language' LANGUAGE_COOKIE_PATH = '/' LDAP_CONFIGURED = True LDAP_IGNORE_CERT_ERRORS = True LOCALE_PATHS = [] LOGGING = {} LOGGING_CONFIG = 'logging.config.dictConfig' LOGIN_REDIRECT_URL = '/accounts/profile/' LOGIN_REQUIRED = False LOGIN_URL = '/login/' LOGOUT_REDIRECT_URL = None MAINTENANCE_MODE = False MANAGERS = [] MAX_PAGE_SIZE = 0 MEDIA_ROOT = '/opt/netbox/netbox/media' MEDIA_URL = '/media/' MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage' MESSAGE_TAGS = {40: 'danger'} MIDDLEWARE = "('debug_toolbar.middleware.DebugToolbarMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'utilities.middleware.ExceptionHandlingMiddleware', 'utilities.middleware.LoginRequiredMiddleware', 'utilities.middleware.APIVersionMiddleware', 'extras.middleware.ObjectChangeMiddleware')" MIGRATION_MODULES = {} MONTH_DAY_FORMAT = 'F j' NAPALM_ARGS = {} NAPALM_PASSWORD = '********************' NAPALM_TIMEOUT = 30 NAPALM_USERNAME = '' NUMBER_GROUPING = 0 PAGINATE_COUNT = 50 PASSWORD_HASHERS = '********************' PASSWORD_RESET_TIMEOUT_DAYS = '********************' PREFER_IPV4 = True PREPEND_WWW = False REDIS = {'PORT': 6379, 'HOST': 'localhost', 'DEFAULT_TIMEOUT': 300, 'PASSWORD': '********************', 'DATABASE': 0} REDIS_DATABASE = 0 REDIS_DEFAULT_TIMEOUT = 300 REDIS_HOST = 'localhost' REDIS_PASSWORD = '********************' REDIS_PORT = 6379 REPORTS_ROOT = '/opt/netbox-reports' REST_FRAMEWORK = {'DEFAULT_PAGINATION_CLASS': 'netbox.api.OptionalLimitOffsetPagination', 'VIEW_NAME_FUNCTION': 'netbox.api.get_view_name', 'DEFAULT_RENDERER_CLASSES': ('rest_framework.renderers.JSONRenderer', 'netbox.api.FormlessBrowsableAPIRenderer'), 'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework.authentication.SessionAuthentication', 'netbox.api.TokenAuthentication'), 'PAGE_SIZE': 50, 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.AcceptHeaderVersioning', 'DEFAULT_VERSION': '2.4', 'ALLOWED_VERSIONS': ['2.4'], 'DEFAULT_PERMISSION_CLASSES': ('netbox.api.TokenPermissions',), 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)} REST_FRAMEWORK_VERSION = '2.4' ROOT_URLCONF = 'netbox.urls' RQ_QUEUES = {'default': {'PORT': 6379, 'HOST': 'localhost', 'DEFAULT_TIMEOUT': 300, 'PASSWORD': '********************', 'DB': 0}} SECRETS_MIN_PUBKEY_SIZE = '********************' SECRET_KEY = '********************' SECURE_BROWSER_XSS_FILTER = False SECURE_CONTENT_TYPE_NOSNIFF = False SECURE_HSTS_INCLUDE_SUBDOMAINS = False SECURE_HSTS_PRELOAD = False SECURE_HSTS_SECONDS = 0 SECURE_PROXY_SSL_HEADER = "('HTTP_X_FORWARDED_PROTO', 'https')" SECURE_REDIRECT_EXEMPT = [] SECURE_SSL_HOST = None SECURE_SSL_REDIRECT = False SERVER_EMAIL = 'test@sap.corp' SESSION_CACHE_ALIAS = 'default' SESSION_COOKIE_AGE = 1209600 SESSION_COOKIE_DOMAIN = None SESSION_COOKIE_HTTPONLY = True SESSION_COOKIE_NAME = 'sessionid' SESSION_COOKIE_PATH = '/' SESSION_COOKIE_SECURE = False SESSION_ENGINE = 'django.contrib.sessions.backends.db' SESSION_EXPIRE_AT_BROWSER_CLOSE = False SESSION_FILE_PATH = None SESSION_SAVE_EVERY_REQUEST = False SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer' SETTINGS_MODULE = 'netbox.settings' SHORT_DATETIME_FORMAT = 'Y-m-d H:i' SHORT_DATE_FORMAT = 'Y-m-d' SHORT_TIME_FORMAT = 'H:i:s' SIGNING_BACKEND = 'django.core.signing.TimestampSigner' SILENCED_SYSTEM_CHECKS = [] STATICFILES_DIRS = "('/opt/netbox/netbox/project-static',)" STATICFILES_FINDERS = ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder'] STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage' STATIC_ROOT = '/opt/netbox/netbox/static/' STATIC_URL = '/static/' SWAGGER_SETTINGS = {'DEFAULT_FIELD_INSPECTORS': ['utilities.custom_inspectors.NullableBooleanFieldInspector', 'utilities.custom_inspectors.CustomChoiceFieldInspector', 'drf_yasg.inspectors.CamelCaseJSONFilter', 'drf_yasg.inspectors.ReferencingSerializerInspector', 'drf_yasg.inspectors.RelatedFieldInspector', 'drf_yasg.inspectors.ChoiceFieldInspector', 'drf_yasg.inspectors.FileFieldInspector', 'drf_yasg.inspectors.DictFieldInspector', 'drf_yasg.inspectors.SimpleFieldInspector', 'drf_yasg.inspectors.StringDefaultFieldInspector'], 'VALIDATOR_URL': None, 'DEFAULT_FILTER_INSPECTORS': ['utilities.custom_inspectors.IdInFilterInspector', 'drf_yasg.inspectors.CoreAPICompatInspector'], 'SECURITY_DEFINITIONS': {'Bearer': {'in': 'header', 'name': 'Authorization', 'type': 'apiKey'}}, 'DEFAULT_PAGINATOR_INSPECTORS': ['utilities.custom_inspectors.NullablePaginatorInspector', 'drf_yasg.inspectors.DjangoRestResponsePagination', 'drf_yasg.inspectors.CoreAPICompatInspector']} TEMPLATES = [{'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.template.context_processors.media', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'utilities.context_processors.settings']}, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/opt/netbox/netbox/templates/'], 'APP_DIRS': True}] TEST_NON_SERIALIZED_APPS = [] TEST_RUNNER = 'django.test.runner.DiscoverRunner' THOUSAND_SEPARATOR = ',' TIME_FORMAT = 'g:i a' TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] TIME_ZONE = 'UTC' USE_ETAGS = False USE_I18N = True USE_L10N = False USE_THOUSAND_SEPARATOR = False USE_TZ = True USE_X_FORWARDED_HOST = True USE_X_FORWARDED_PORT = False VERSION = '2.4.6' WEBHOOKS_ENABLED = False WSGI_APPLICATION = 'netbox.wsgi.application' X_FRAME_OPTIONS = 'SAMEORIGIN' YEAR_MONTH_FORMAT = 'F Y' ```
adam added the type: bugstatus: accepted labels 2025-12-29 17:22:44 +01:00
adam closed this issue 2025-12-29 17:22:44 +01:00
Author
Owner

@jeremystretch commented on GitHub (Nov 28, 2018):

Please post the steps someone else can take to recreate this issue.

@jeremystretch commented on GitHub (Nov 28, 2018): Please post the steps someone else can take to recreate this issue.
Author
Owner

@martink2 commented on GitHub (Nov 28, 2018):

The problem is i cannot re-create the issue on demand ... yet.
I just have a lot of user complaints and get around 10 to 15
errors a day like the above mailed to me on a mildly used installation.

So during normal operations from time to time my users get a server error like the above
when deleting objects or inventory items.

@martink2 commented on GitHub (Nov 28, 2018): The problem is i cannot re-create the issue on demand ... yet. I just have a lot of user complaints and get around 10 to 15 errors a day like the above mailed to me on a mildly used installation. So during normal operations from time to time my users get a server error like the above when deleting objects or inventory items.
Author
Owner

@jeremystretch commented on GitHub (Nov 30, 2018):

Closing this out for now as it is not actionable. Please request to have it re-opened if you are able to reliably reproduce the issue.

@jeremystretch commented on GitHub (Nov 30, 2018): Closing this out for now as it is not actionable. Please request to have it re-opened if you are able to reliably reproduce the issue.
Author
Owner

@jeremystretch commented on GitHub (Apr 18, 2019):

Re-opening this because it's the earliest report of a symptom which I believe is related to somewhat-randomly recurring bug. It seems that the changelog middleware has been running into the issue described here, where the user associated with the request is not authenticated prior to being captured for the ObjectChange being recorded.

@jeremystretch commented on GitHub (Apr 18, 2019): Re-opening this because it's the earliest report of a symptom which I believe is related to somewhat-randomly recurring bug. It seems that the changelog middleware has been running into [the issue described here](https://stackoverflow.com/questions/26240832/django-and-middleware-which-uses-request-user-is-always-anonymous), where the user associated with the request is not authenticated prior to being captured for the ObjectChange being recorded.
Author
Owner

@lampwins commented on GitHub (Apr 18, 2019):

In an effort to document our findings, we noticed develop-2.6 is not experiencing this issue. I ran an overnight endurance test to confirm this. The code changes we tried in #3081, unfortunately, did not work so we investigated what is different in develop-2.6. Upgrading the Django dependancy to 2.2 is only noticeable change so I reran my endurance test again with 2.2 in develop with great success.

At this point, we don't have a root cause but we know upgrading to Django 2.2 fixes the problem. Unfortunately, the release notes, don't seem to mention anything related.

So the question is do we pin develop to Django 2.2 or match the looser dependancy defined in develop-2.6? @jeremystretch do you know of any other Django changes that would make this problematic?

@lampwins commented on GitHub (Apr 18, 2019): In an effort to document our findings, we noticed `develop-2.6` is _not_ experiencing this issue. I ran an overnight endurance test to confirm this. The code changes we tried in #3081, unfortunately, did not work so we investigated what is different in `develop-2.6`. Upgrading the Django dependancy to 2.2 is only noticeable change so I reran my endurance test again with 2.2 in `develop` with great success. At this point, we don't have a root cause but we know upgrading to Django 2.2 fixes the problem. Unfortunately, the release notes, don't seem to mention anything related. So the question is do we pin `develop` to Django 2.2 or match the looser dependancy defined in `develop-2.6`? @jeremystretch do you know of any other Django changes that would make this problematic?
Author
Owner

@jeremystretch commented on GitHub (Apr 18, 2019):

I don't believe upgrading to Django 2.2 required any changes to NetBox. I think it's reasonable to have the 2.5 train match Django>=2.2,<2.3 to fix this issue.

@jeremystretch commented on GitHub (Apr 18, 2019): I don't believe upgrading to Django 2.2 required any changes to NetBox. I think it's reasonable to have the 2.5 train match `Django>=2.2,<2.3` to fix this issue.
Author
Owner

@a31amit commented on GitHub (Jul 22, 2019):

I think this bug still exists in 2.6.1. I found intermittent failure in Delete operations.

Internal Server Error: /api/dcim/interfaces/29089/
Internal Server Error: /api/dcim/devices/1860/
Internal Server Error: /api/dcim/devices/1865/
Internal Server Error: /api/dcim/devices/1863/
Internal Server Error: /api/ipam/ip-addresses/9202/
Internal Server Error: /api/dcim/devices/1858/
Internal Server Error: /api/dcim/devices/1859/
Internal Server Error: /api/dcim/inventory-items/130823/
Internal Server Error: /api/dcim/devices/1871/
Internal Server Error: /api/dcim/inventory-items/130826/
Internal Server Error: /api/dcim/interfaces/29123/
Internal Server Error: /api/dcim/devices/2007/
Internal Server Error: /api/dcim/devices/2008/
Internal Server Error: /api/dcim/devices/1995/
Internal Server Error: /api/dcim/inventory-items/131278/
Internal Server Error: /api/dcim/devices/2012/
Internal Server Error: /api/dcim/devices/2016/```


[22/Jul/2019 13:23:31] "GET /api/ipam/ip-addresses/?interface_id=29138 HTTP/1.1" 200 52
Internal Server Error: /api/dcim/devices/2016/
Traceback (most recent call last):
  File "/opt/netbox/python37/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/opt/netbox/python37/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/opt/netbox/python37/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/opt/netbox/python37/lib/python3.7/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/opt/netbox/python37/lib/python3.7/site-packages/rest_framework/viewsets.py", line 116, in view
    return self.dispatch(request, *args, **kwargs)
  File "/opt/netbox/netbox-2.6.1/netbox/utilities/api.py", line 279, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/opt/netbox/python37/lib/python3.7/site-packages/rest_framework/views.py", line 495, in dispatch
    response = self.handle_exception(exc)
  File "/opt/netbox/python37/lib/python3.7/site-packages/rest_framework/views.py", line 455, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/opt/netbox/python37/lib/python3.7/site-packages/rest_framework/views.py", line 492, in dispatch
    response = handler(request, *args, **kwargs)
  File "/opt/netbox/python37/lib/python3.7/site-packages/rest_framework/mixins.py", line 93, in destroy
    self.perform_destroy(instance)
  File "/opt/netbox/python37/lib/python3.7/site-packages/rest_framework/mixins.py", line 97, in perform_destroy
    instance.delete()
  File "/opt/netbox/python37/lib/python3.7/site-packages/django/db/models/base.py", line 919, in delete
    return collector.delete()
  File "/opt/netbox/python37/lib/python3.7/site-packages/django/db/models/deletion.py", line 318, in delete
    sender=model, instance=obj, using=self.using
  File "/opt/netbox/python37/lib/python3.7/site-packages/django/dispatch/dispatcher.py", line 175, in send
    for receiver in self._live_receivers(sender)
  File "/opt/netbox/python37/lib/python3.7/site-packages/django/dispatch/dispatcher.py", line 175, in <listcomp>
    for receiver in self._live_receivers(sender)
  File "/opt/netbox/python37/lib/python3.7/site-packages/django/utils/functional.py", line 14, in _curried
    return _curried_func(*args, *moreargs, **{**kwargs, **morekwargs})
  File "/opt/netbox/netbox-2.6.1/netbox/extras/middleware.py", line 35, in _record_object_deleted
    instance.log_change(request.user, request.id, OBJECTCHANGE_ACTION_DELETE)
  File "/opt/netbox/netbox-2.6.1/netbox/utilities/models.py", line 36, in log_change
    object_data=serialize_object(self)
  File "/opt/netbox/python37/lib/python3.7/site-packages/django/db/models/base.py", line 483, in __init__
    _setattr(self, field.name, rel_obj)
  File "/opt/netbox/python37/lib/python3.7/site-packages/django/db/models/fields/related_descriptors.py", line 211, in __set__
    self.field.remote_field.model._meta.object_name,
ValueError: Cannot assign "<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7f1ad13af048>>": "ObjectChange.user" must be a "User" instance.
[22/Jul/2019 13:23:31] "DELETE /api/dcim/devices/2016/ HTTP/1.1" 500 23771```
@a31amit commented on GitHub (Jul 22, 2019): I think this bug still exists in 2.6.1. I found intermittent failure in Delete operations. ```Internal Server Error: /api/dcim/devices/1851/ Internal Server Error: /api/dcim/interfaces/29089/ Internal Server Error: /api/dcim/devices/1860/ Internal Server Error: /api/dcim/devices/1865/ Internal Server Error: /api/dcim/devices/1863/ Internal Server Error: /api/ipam/ip-addresses/9202/ Internal Server Error: /api/dcim/devices/1858/ Internal Server Error: /api/dcim/devices/1859/ Internal Server Error: /api/dcim/inventory-items/130823/ Internal Server Error: /api/dcim/devices/1871/ Internal Server Error: /api/dcim/inventory-items/130826/ Internal Server Error: /api/dcim/interfaces/29123/ Internal Server Error: /api/dcim/devices/2007/ Internal Server Error: /api/dcim/devices/2008/ Internal Server Error: /api/dcim/devices/1995/ Internal Server Error: /api/dcim/inventory-items/131278/ Internal Server Error: /api/dcim/devices/2012/ Internal Server Error: /api/dcim/devices/2016/``` [22/Jul/2019 13:23:31] "GET /api/ipam/ip-addresses/?interface_id=29138 HTTP/1.1" 200 52 Internal Server Error: /api/dcim/devices/2016/ Traceback (most recent call last): File "/opt/netbox/python37/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/opt/netbox/python37/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response response = self.process_exception_by_middleware(e, request) File "/opt/netbox/python37/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/opt/netbox/python37/lib/python3.7/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view return view_func(*args, **kwargs) File "/opt/netbox/python37/lib/python3.7/site-packages/rest_framework/viewsets.py", line 116, in view return self.dispatch(request, *args, **kwargs) File "/opt/netbox/netbox-2.6.1/netbox/utilities/api.py", line 279, in dispatch return super().dispatch(request, *args, **kwargs) File "/opt/netbox/python37/lib/python3.7/site-packages/rest_framework/views.py", line 495, in dispatch response = self.handle_exception(exc) File "/opt/netbox/python37/lib/python3.7/site-packages/rest_framework/views.py", line 455, in handle_exception self.raise_uncaught_exception(exc) File "/opt/netbox/python37/lib/python3.7/site-packages/rest_framework/views.py", line 492, in dispatch response = handler(request, *args, **kwargs) File "/opt/netbox/python37/lib/python3.7/site-packages/rest_framework/mixins.py", line 93, in destroy self.perform_destroy(instance) File "/opt/netbox/python37/lib/python3.7/site-packages/rest_framework/mixins.py", line 97, in perform_destroy instance.delete() File "/opt/netbox/python37/lib/python3.7/site-packages/django/db/models/base.py", line 919, in delete return collector.delete() File "/opt/netbox/python37/lib/python3.7/site-packages/django/db/models/deletion.py", line 318, in delete sender=model, instance=obj, using=self.using File "/opt/netbox/python37/lib/python3.7/site-packages/django/dispatch/dispatcher.py", line 175, in send for receiver in self._live_receivers(sender) File "/opt/netbox/python37/lib/python3.7/site-packages/django/dispatch/dispatcher.py", line 175, in <listcomp> for receiver in self._live_receivers(sender) File "/opt/netbox/python37/lib/python3.7/site-packages/django/utils/functional.py", line 14, in _curried return _curried_func(*args, *moreargs, **{**kwargs, **morekwargs}) File "/opt/netbox/netbox-2.6.1/netbox/extras/middleware.py", line 35, in _record_object_deleted instance.log_change(request.user, request.id, OBJECTCHANGE_ACTION_DELETE) File "/opt/netbox/netbox-2.6.1/netbox/utilities/models.py", line 36, in log_change object_data=serialize_object(self) File "/opt/netbox/python37/lib/python3.7/site-packages/django/db/models/base.py", line 483, in __init__ _setattr(self, field.name, rel_obj) File "/opt/netbox/python37/lib/python3.7/site-packages/django/db/models/fields/related_descriptors.py", line 211, in __set__ self.field.remote_field.model._meta.object_name, ValueError: Cannot assign "<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7f1ad13af048>>": "ObjectChange.user" must be a "User" instance. [22/Jul/2019 13:23:31] "DELETE /api/dcim/devices/2016/ HTTP/1.1" 500 23771```
Author
Owner

@jeremystretch commented on GitHub (Sep 23, 2019):

This issue pertains to an old release of NetBox and has been resolved. If you experience similar issues on the current stable release of NetBox, please open a new issue.

@jeremystretch commented on GitHub (Sep 23, 2019): This issue pertains to an old release of NetBox and has been resolved. If you experience similar issues on the **current stable release** of NetBox, please open a new issue.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/netbox#2152