RecursionError at / - maximum recursion depth exceeded #275

Closed
opened 2026-04-05 16:24:24 +02:00 by MrUnknownDE · 0 comments
Owner

Originally created by @moseisleydk on 2/26/2026

NetBox Edition

NetBox Community

NetBox Version

v4.5.3

Python Version

3.12

Steps to Reproduce

We have a well running 4.4.6 in Docker.

If we opgrade this to 4.5.3 (with or without plugins - it does not matter) - after some time it fails with:

Request Method: | GET
-- | --
https://netboxtest.netic.dk/
5.2.11
RecursionError
maximum recursion depth exceeded
/opt/netbox/venv/lib/python3.12/site-packages/debug_toolbar/panels/cache.py, line 40, in wrapper
netbox.views.misc.HomeView
/opt/netbox/venv/bin/python3
3.12.3
['/opt/netbox/netbox',  '/opt/netbox/netbox',  '/opt/netbox/venv/bin',  '/usr/lib/python312.zip',  '/usr/lib/python3.12',  '/usr/lib/python3.12/lib-dynload',  '/opt/netbox/venv/lib/python3.12/site-packages']
Thu, 26 Feb 2026 09:17:36 +0100

This is repeatble, tested with 3 upgrades.

Expected Behavior

That it keeps working

Observed Behavior

The upgrade seems to go fine - all upgrade are executed:

`
netbox-1 | ⚙️ Applying database migrations

netbox-1 | /opt/netbox/netbox/netbox/settings.py:226: UserWarning: API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used.
netbox-1 | warnings.warn("API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used.")
netbox-1 | 🧬 loaded config '/etc/netbox/config/configuration.py'
netbox-1 | 🧬 loaded config '/etc/netbox/config/extra.py'
netbox-1 | 🧬 loaded config '/etc/netbox/config/logging.py'
netbox-1 | 🧬 loaded config '/etc/netbox/config/plugins.py'
netbox-1 | Operations to perform:
netbox-1 | Apply all migrations: account, auth, circuits, contenttypes, core, dcim, django_rq, extras, ipam, sessions, social_django, taggit, tenancy, thumbnail, users, virtualization, vpn, wireless
netbox-1 | Running migrations:
netbox-1 | Applying users.0013_user_remove_is_staff... OK
netbox-1 | Applying users.0014_users_token_v2... OK
netbox-1 | Applying users.0015_owner... OK
netbox-1 | Applying extras.0134_owner... OK
netbox-1 | Applying dcim.0216_latitude_longitude_validators... OK
netbox-1 | Applying dcim.0217_poweroutlettemplate_color... OK
netbox-1 | Applying dcim.0218_owner... OK
netbox-1 | Applying dcim.0219_devicetype_device_count... OK
netbox-1 | Applying dcim.0220_cable_profile... OK
netbox-1 | Applying dcim.0221_cable_connector_positions... OK
netbox-1 | Applying dcim.0222_port_mappings... OK
netbox-1 | Applying dcim.0223_frontport_positions... OK
netbox-1 | Applying dcim.0224_add_comments_to_organizationalmodel... OK
netbox-1 | Applying circuits.0053_owner... OK
netbox-1 | Applying circuits.0054_cable_connector_positions... OK
netbox-1 | Applying circuits.0055_add_comments_to_organizationalmodel... OK
netbox-1 | Applying circuits.0056_gfk_indexes... OK
netbox-1 | Applying core.0020_owner... OK
netbox-1 | Applying core.0021_job_queue_name... OK
netbox-1 | Applying tenancy.0021_owner... OK
netbox-1 | Applying tenancy.0022_add_comments_to_organizationalmodel... OK
netbox-1 | Applying dcim.0225_gfk_indexes... OK
netbox-1 | Applying dcim.0226_add_mptt_tree_indexes... OK
netbox-1 | Applying ipam.0084_owner... OK
netbox-1 | Applying ipam.0085_add_comments_to_organizationalmodel... OK
netbox-1 | Applying ipam.0086_gfk_indexes... OK
netbox-1 | Applying tenancy.0023_add_mptt_tree_indexes... OK
netbox-1 | Applying virtualization.0049_owner... OK
netbox-1 | Applying virtualization.0050_virtualmachine_start_on_boot... OK
netbox-1 | Applying virtualization.0051_add_comments_to_organizationalmodel... OK
netbox-1 | Applying virtualization.0052_gfk_indexes... OK
netbox-1 | Applying vpn.0010_owner... OK
netbox-1 | Applying vpn.0011_add_comments_to_organizationalmodel... OK
netbox-1 | Applying wireless.0016_owner... OK
netbox-1 | Applying wireless.0017_gfk_indexes... OK
redis-1 | 1:M 25 Feb 2026 08:14:48.030 * 10000 changes in 60 seconds. Saving...
redis-1 | 1:M 25 Feb 2026 08:14:48.031 * Background saving started by pid 14
redis-1 | 14:C 25 Feb 2026 08:14:48.039 * DB saved on disk
redis-1 | 14:C 25 Feb 2026 08:14:48.040 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB
redis-1 | 1:M 25 Feb 2026 08:14:48.132 * Background saving terminated with success
netbox-1 | Applying wireless.0018_add_mptt_tree_indexes... OK
netbox-1 | ⚙️ Running trace_paths
netbox-1 | /opt/netbox/netbox/netbox/settings.py:226: UserWarning: API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used.
netbox-1 | warnings.warn("API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used.")
netbox-1 | 🧬 loaded config '/etc/netbox/config/configuration.py'
netbox-1 | 🧬 loaded config '/etc/netbox/config/extra.py'
netbox-1 | 🧬 loaded config '/etc/netbox/config/logging.py'
netbox-1 | 🧬 loaded config '/etc/netbox/config/plugins.py'
netbox-1 | Found no missing console port paths; skipping
netbox-1 | Found no missing console server port paths; skipping
netbox-1 | Found no missing interface paths; skipping
netbox-1 | Found no missing power feed paths; skipping
netbox-1 | Found no missing power outlet paths; skipping
netbox-1 | Found no missing power port paths; skipping
netbox-1 | Finished.
netbox-1 | ⚙️ Removing stale content types
netbox-1 | /opt/netbox/netbox/netbox/settings.py:226: UserWarning: API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used.
netbox-1 | warnings.warn("API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used.")
netbox-1 | 🧬 loaded config '/etc/netbox/config/configuration.py'
netbox-1 | 🧬 loaded config '/etc/netbox/config/extra.py'
netbox-1 | 🧬 loaded config '/etc/netbox/config/logging.py'
netbox-1 | 🧬 loaded config '/etc/netbox/config/plugins.py'
netbox-1 | ⚙️ Removing expired user sessions
netbox-1 | /opt/netbox/netbox/netbox/settings.py:226: UserWarning: API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used.
netbox-1 | warnings.warn("API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used.")
netbox-1 | 🧬 loaded config '/etc/netbox/config/configuration.py'
netbox-1 | 🧬 loaded config '/etc/netbox/config/extra.py'
netbox-1 | 🧬 loaded config '/etc/netbox/config/logging.py'
netbox-1 | 🧬 loaded config '/etc/netbox/config/plugins.py'
netbox-1 | ⚙️ Building search index (lazy)
netbox-1 | /opt/netbox/netbox/netbox/settings.py:226: UserWarning: API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used.
netbox-1 | warnings.warn("API_TOKEN_PEPPERS is not defined

`

I am aware of the API_TOKEN_PEPPERS

The it works fine for some hours, and typically next morning we see the recursion error.

Settings:

`

ABSOLUTE_URL_OVERRIDES {}
ADMINS []
ALLOWED_HOSTS ['*']
API_TOKEN_PEPPERS '********************'
APPEND_SLASH True
AUTHENTICATION_BACKENDS '********************'
AUTH_PASSWORD_VALIDATORS '********************'
AUTH_USER_MODEL '********************'
BANNER_BOTTOM 'This is the Test System'
BANNER_LOGIN 'This is the Test System'
BANNER_TOP 'This is the Test System'
BASE_DIR '/opt/netbox/netbox'
BASE_PATH ''
CACHES {'default': {'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://redis-cache:6379/1', 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient', 'PASSWORD': '********************'}}}
CACHE_MIDDLEWARE_ALIAS 'default'
CACHE_MIDDLEWARE_KEY_PREFIX '********************'
CACHE_MIDDLEWARE_SECONDS 600
CACHING_REDIS_CA_CERT_PATH False
CACHING_REDIS_DATABASE 1
CACHING_REDIS_HOST 'redis-cache'
CACHING_REDIS_PASSWORD '********************'
CACHING_REDIS_PORT 6379
CACHING_REDIS_PROTO 'redis'
CACHING_REDIS_SENTINELS []
CACHING_REDIS_SENTINEL_SERVICE 'default'
CACHING_REDIS_SKIP_TLS_VERIFY False
CACHING_REDIS_URL 'redis://redis-cache:6379/1'
CACHING_REDIS_USERNAME ''
CACHING_REDIS_USERNAME_HOST 'redis-cache'
CENSUS_REPORTING_ENABLED True
CENSUS_URL 'https://census.netbox.oss.netboxlabs.com/api/v1/'
CHANGELOG_RETENTION 1830
CHANGELOG_SKIP_EMPTY_CHANGES True
CONFIG_PARAMS (<netbox.config.parameters.ConfigParam object at 0x7fc0df9087d0>, <netbox.config.parameters.ConfigParam object at 0x7fc0df55db80>, <netbox.config.parameters.ConfigParam object at 0x7fc0df591010>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ff3b0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ff440>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ff530>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ff620>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ff710>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ff800>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ff8f0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ff9e0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ffb90>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ffbf0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ffc80>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ffda0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ffec0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8fffb0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de74c0e0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de74c1d0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de74c2c0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de74c3b0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de74c4a0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de74c590>)
CORS_ORIGIN_ALLOW_ALL True
CORS_ORIGIN_REGEX_WHITELIST []
CORS_ORIGIN_WHITELIST ['https://localhost']
CSRF_COOKIE_AGE 31449600
CSRF_COOKIE_DOMAIN None
CSRF_COOKIE_HTTPONLY True
CSRF_COOKIE_NAME 'csrftoken'
CSRF_COOKIE_PATH '/'
CSRF_COOKIE_SAMESITE 'Lax'
CSRF_COOKIE_SECURE False
CSRF_FAILURE_VIEW 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS []
CSRF_USE_SESSIONS False
CUSTOM_VALIDATORS {'dcim.device': (<.UniqueName object at 0x7fc0de38ba40>, <.CheckSerialExists object at 0x7fc0de38b9b0>, <.UniqueSerial object at 0x7fc0de1b83e0>)}
DATABASE {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_HEALTH_CHECKS': False, 'CONN_MAX_AGE': 300, 'DISABLE_SERVER_SIDE_CURSORS': False, 'ENGINE': 'django.db.backends.postgresql', 'HOST': 'postgres', 'NAME': 'netbox', 'OPTIONS': {'sslmode': 'prefer'}, 'PASSWORD': '********************', 'PORT': '', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': 'netbox'}
DATABASES {'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_HEALTH_CHECKS': False, 'CONN_MAX_AGE': 300, 'DISABLE_SERVER_SIDE_CURSORS': False, 'ENGINE': 'django.db.backends.postgresql', 'HOST': 'postgres', 'NAME': 'netbox', 'OPTIONS': {'sslmode': 'prefer'}, 'PASSWORD': '********************', 'PORT': '', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': 'netbox'}}
DATABASE_ROUTERS []
DATA_UPLOAD_MAX_MEMORY_SIZE 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS None
DATA_UPLOAD_MAX_NUMBER_FILES 100
DATETIME_FORMAT 'N j, Y, P'
DATETIME_INPUT_FORMATS ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
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 True
DEBUG_PROPAGATE_EXCEPTIONS False
DECIMAL_SEPARATOR '.'
DEFAULT_AUTO_FIELD 'django.db.models.BigAutoField'
DEFAULT_CHARSET 'utf-8'
DEFAULT_DASHBOARD None
DEFAULT_EXCEPTION_REPORTER 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FROM_EMAIL 'webmaster@localhost'
DEFAULT_INDEX_TABLESPACE ''
DEFAULT_PERMISSIONS {'extras.add_bookmark': ({'user': '$user'},), 'extras.add_notification': ({'user': '$user'},), 'extras.add_subscription': ({'user': '$user'},), 'extras.change_bookmark': ({'user': '$user'},), 'extras.change_notification': ({'user': '$user'},), 'extras.change_subscription': ({'user': '$user'},), 'extras.delete_bookmark': ({'user': '$user'},), 'extras.delete_notification': ({'user': '$user'},), 'extras.delete_subscription': ({'user': '$user'},), 'extras.view_bookmark': ({'user': '$user'},), 'extras.view_notification': ({'user': '$user'},), 'extras.view_subscription': ({'user': '$user'},), 'users.add_token': '', 'users.change_token': '', 'users.delete_token': '', 'users.view_token': ''}
DEFAULT_STORAGES {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'}, 'scripts': {'BACKEND': 'extras.storage.ScriptFileSystemStorage', 'OPTIONS': {'allow_overwrite': True}}, 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}}
DEFAULT_TABLESPACE ''
DEPLOYMENT_ID 'c221bcece48c0f25'
DEVELOPER False
DISALLOWED_USER_AGENTS []
DISK_BASE_UNIT 1000
DOCS_ROOT '/opt/netbox/docs'
EMAIL {'FROM_EMAIL': 'netbox@bar.com', 'PASSWORD': '', 'PORT': 25, 'SERVER': 'localhost', 'SSL_CERTFILE': '', 'SSL_KEYFILE': '', 'TIMEOUT': 5, 'USERNAME': 'netbox', 'USE_SSL': False, 'USE_TLS': False}
EMAIL_BACKEND 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST 'localhost'
EMAIL_HOST_PASSWORD '********************'
EMAIL_HOST_USER 'netbox'
EMAIL_PORT 25
EMAIL_SSL_CERTFILE ''
EMAIL_SSL_KEYFILE '********************'
EMAIL_SUBJECT_PREFIX '[NetBox] '
EMAIL_TIMEOUT 5
EMAIL_USE_LOCALTIME False
EMAIL_USE_SSL False
EMAIL_USE_TLS False
EVENTS_PIPELINE ['extras.events.process_event_queue']
EXEMPT_EXCLUDE_MODELS (('extras', 'configrevision'), ('users', 'group'), ('users', 'objectpermission'), ('users', 'token'), ('users', 'user'))
EXEMPT_VIEW_PERMISSIONS []
FIELD_CHOICES {}
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 420
FILE_UPLOAD_TEMP_DIR None
FILTERS_NULL_CHOICE_LABEL 'None'
FILTERS_NULL_CHOICE_VALUE 'null'
FIRST_DAY_OF_WEEK 0
FIXTURE_DIRS []
FORCE_SCRIPT_NAME None
FORMAT_MODULE_PATH None
FORMS_URLFIELD_ASSUME_HTTPS False
FORM_RENDERER 'django.forms.renderers.TemplatesSetting'
GRAPHQL_DEFAULT_VERSION 1
GRAPHQL_ENABLED True
GRAPHQL_MAX_ALIASES 10
HOSTNAME 'c139f160ddcd'
HTTP_PROXIES {}
IGNORABLE_404_URLS []
INSTALLED_APPS ['django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'django.forms', 'corsheaders', 'debug_toolbar', 'django_filters', 'django_htmx', 'django_tables2', 'django_prometheus', 'strawberry_django', 'mptt', 'rest_framework', 'social_django', 'sorl.thumbnail', 'taggit', 'timezone_field', 'core', 'account', 'circuits', 'dcim', 'ipam', 'extras', 'tenancy', 'users', 'utilities', 'virtualization', 'vpn', 'wireless', 'django_rq', 'drf_spectacular', 'drf_spectacular_sidecar']
INTERNAL_IPS ['127.0.0.1', '::1']
ISOLATED_DEPLOYMENT False
JINJA2_FILTERS {}
LANGUAGES (('cs', 'Czech'), ('da', 'Danish'), ('de', 'German'), ('en', 'English'), ('es', 'Spanish'), ('fr', 'French'), ('it', 'Italian'), ('ja', 'Japanese'), ('lv', 'Latvian'), ('nl', 'Dutch'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('ru', 'Russian'), ('tr', 'Turkish'), ('uk', 'Ukrainian'), ('zh', 'Chinese'))
LANGUAGES_BIDI ['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ug', 'ur']
LANGUAGE_CODE 'en-us'
LANGUAGE_COOKIE_AGE None
LANGUAGE_COOKIE_DOMAIN None
LANGUAGE_COOKIE_HTTPONLY False
LANGUAGE_COOKIE_NAME 'django_language'
LANGUAGE_COOKIE_PATH '/'
LANGUAGE_COOKIE_SAMESITE None
LANGUAGE_COOKIE_SECURE False
LOCALE_PATHS ('/opt/netbox/netbox/translations',)
LOGGING {}
LOGGING_CONFIG 'logging.config.dictConfig'
LOGIN_FORM_HIDDEN False
LOGIN_PERSISTENCE False
LOGIN_REDIRECT_URL '/'
LOGIN_REQUIRED False
LOGIN_TIMEOUT 1209600
LOGIN_URL '/login/'
LOGOUT_REDIRECT_URL 'home'
MAINTENANCE_EXEMPT_PATHS ('/extras/config-revisions/', '/login/', '/', 'home')
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'}
METRICS_ENABLED False
MIDDLEWARE ['strawberry_django.middlewares.debug_toolbar.DebugToolbarMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', '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', 'django_htmx.middleware.HtmxMiddleware', 'netbox.middleware.RemoteUserMiddleware', 'netbox.middleware.CoreMiddleware', 'netbox.middleware.MaintenanceModeMiddleware']
MIGRATION_MODULES {'debug_toolbar': None}
MONTH_DAY_FORMAT 'F j'
NETBOX_COPILOT_URL 'https://static.copilot.netboxlabs.ai/load.js'
NUMBER_GROUPING 0
PASSWORD_HASHERS '********************'
PASSWORD_RESET_TIMEOUT '********************'
PLUGINS []
PLUGINS_CATALOG_CONFIG {}
PLUGINS_CONFIG {}
PLUGIN_CATALOG_URL 'https://api.netbox.oss.netboxlabs.com/v1/plugins'
PREPEND_WWW False
PROMETHEUS_EXPORT_MIGRATIONS False
PROXY_ROUTERS ['utilities.proxy.DefaultProxyRouter']
QUEUE_MAPPINGS {}
RAM_BASE_UNIT 1000
REDIS {'caching': {'DATABASE': 1, 'HOST': 'redis-cache', 'INSECURE_SKIP_TLS_VERIFY': False, 'PASSWORD': '', 'PORT': 6379, 'SSL': False, 'USERNAME': ''}, 'tasks': {'DATABASE': 0, 'HOST': 'redis', 'INSECURE_SKIP_TLS_VERIFY': False, 'PASSWORD': '', 'PORT': 6379, 'SSL': False, 'USERNAME': ''}}
RELEASE ReleaseInfo(version='4.5.3', edition='Community', published=datetime.datetime(2026, 2, 17, 0, 0), designation=None, build='Docker-4.0.1', features=FeatureSet(commercial=False, help_center=False))
RELEASE_CHECK_URL 'https://api.github.com/repos/netbox-community/netbox/releases'
REMOTE_AUTH_AUTO_CREATE_GROUPS '********************'
REMOTE_AUTH_AUTO_CREATE_USER '********************'
REMOTE_AUTH_BACKEND '********************'
REMOTE_AUTH_DEFAULT_GROUPS '********************'
REMOTE_AUTH_DEFAULT_PERMISSIONS '********************'
REMOTE_AUTH_ENABLED '********************'
REMOTE_AUTH_GROUP_HEADER '********************'
REMOTE_AUTH_GROUP_SEPARATOR '********************'
REMOTE_AUTH_GROUP_SYNC_ENABLED '********************'
REMOTE_AUTH_HEADER '********************'
REMOTE_AUTH_SUPERUSERS '********************'
REMOTE_AUTH_SUPERUSER_GROUPS '********************'
REMOTE_AUTH_USER_EMAIL '********************'
REMOTE_AUTH_USER_FIRST_NAME '********************'
REMOTE_AUTH_USER_LAST_NAME '********************'
REPORTS_ROOT '/opt/netbox/netbox/reports'
REST_FRAMEWORK {'ALLOWED_VERSIONS': ['4.5'], 'COERCE_DECIMAL_TO_STRING': False, 'DEFAULT_AUTHENTICATION_CLASSES': '********************', 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend', 'rest_framework.filters.OrderingFilter'), 'DEFAULT_METADATA_CLASS': 'netbox.api.metadata.BulkOperationMetadata', 'DEFAULT_PAGINATION_CLASS': 'netbox.api.pagination.OptionalLimitOffsetPagination', 'DEFAULT_PARSER_CLASSES': ('rest_framework.parsers.JSONParser', 'rest_framework.parsers.MultiPartParser'), 'DEFAULT_PERMISSION_CLASSES': ('netbox.api.authentication.TokenPermissions',), 'DEFAULT_RENDERER_CLASSES': ('rest_framework.renderers.JSONRenderer', 'netbox.api.renderers.FormlessBrowsableAPIRenderer'), 'DEFAULT_SCHEMA_CLASS': 'core.api.schema.NetBoxAutoSchema', 'DEFAULT_VERSION': '4.5', 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.AcceptHeaderVersioning', 'SCHEMA_COERCE_METHOD_NAMES': {'bulk_destroy': 'bulk_delete', 'destroy': 'delete', 'retrieve': 'read'}, 'VIEW_NAME_FUNCTION': 'utilities.api.get_view_name'}
REST_FRAMEWORK_VERSION '4.5'
ROOT_URLCONF 'netbox.urls'
RQ_DEFAULT_TIMEOUT 300
RQ_PARAMS {'DB': 0, 'DEFAULT_TIMEOUT': 300, 'HOST': 'redis', 'PASSWORD': '********************', 'PORT': 6379, 'SSL': False, 'SSL_CERT_REQS': 'required', 'USERNAME': ''}
RQ_QUEUES {'default': {'DB': 0, 'DEFAULT_TIMEOUT': 300, 'HOST': 'redis', 'PASSWORD': '', 'PORT': 6379, 'SSL': False, 'SSL_CERT_REQS': 'required', 'USERNAME': ''}, 'high': {'DB': 0, 'DEFAULT_TIMEOUT': 300, 'HOST': 'redis', 'PASSWORD': '', 'PORT': 6379, 'SSL': False, 'SSL_CERT_REQS': 'required', 'USERNAME': ''}, 'low': {'DB': 0, 'DEFAULT_TIMEOUT': 300, 'HOST': 'redis', 'PASSWORD': '********************', 'PORT': 6379, 'SSL': False, 'SSL_CERT_REQS': 'required', 'USERNAME': ''}}
RQ_QUEUE_DEFAULT 'default'
RQ_QUEUE_HIGH 'high'
RQ_QUEUE_LOW 'low'
RQ_RETRY_INTERVAL 60
RQ_RETRY_MAX 0
SCRIPTS_ROOT '/opt/netbox/netbox/scripts'
SEARCH_BACKEND 'netbox.search.backends.CachedValueSearchBackend'
SECRET_KEY '********************'
SECRET_KEY_FALLBACKS '********************'
SECURE_CONTENT_TYPE_NOSNIFF True
SECURE_CROSS_ORIGIN_OPENER_POLICY 'same-origin'
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_REFERRER_POLICY 'same-origin'
SECURE_SSL_HOST None
SECURE_SSL_REDIRECT False
SENTRY_CONFIG {}
SENTRY_DSN None
SENTRY_ENABLED False
SENTRY_SAMPLE_RATE 1.0
SENTRY_SEND_DEFAULT_PII False
SENTRY_TAGS {}
SENTRY_TRACES_SAMPLE_RATE 0
SERIALIZATION_MODULES {'json': 'utilities.serializers.json'}
SERVER_EMAIL 'netbox@bar.com'
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_SAMESITE 'Lax'
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 'm/d/Y P'
SHORT_DATE_FORMAT 'm/d/Y'
SIGNING_BACKEND 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS []
SOCIAL_AUTH_CLEAN_USERNAME_FUNCTION '********************'
SOCIAL_AUTH_JSONFIELD_ENABLED '********************'
SOCIAL_AUTH_PIPELINE '********************'
SOCIAL_AUTH_USER_MODEL '********************'
SPECTACULAR_SETTINGS {'COMPONENT_SPLIT_REQUEST': True, 'LICENSE': {'name': 'Apache v2 License'}, 'POSTPROCESSING_HOOKS': [], 'REDOC_DIST': 'SIDECAR', 'SERVERS': [{'description': 'NetBox', 'url': ''}], 'SWAGGER_UI_DIST': 'SIDECAR', 'SWAGGER_UI_FAVICON_HREF': 'SIDECAR', 'TITLE': 'NetBox REST API', 'VERSION': '4.5.3-Docker-4.0.1'}
STATICFILES_DIRS ('/opt/netbox/netbox/project-static/dist', '/opt/netbox/netbox/project-static/img', '/opt/netbox/netbox/project-static/js', ('docs', '/opt/netbox/netbox/project-static/docs'))
STATICFILES_FINDERS ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder']
STATIC_ROOT '/opt/netbox/netbox/static'
STATIC_URL '/static/'
STORAGES {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'}, 'scripts': {'BACKEND': 'extras.storage.ScriptFileSystemStorage', 'OPTIONS': {'allow_overwrite': True}}, 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}}
STORAGE_BACKEND None
STORAGE_CONFIG None
STRAWBERRY_DJANGO {'DEFAULT_PK_FIELD_NAME': 'id', 'PAGINATION_DEFAULT_LIMIT': 100, 'TYPE_DESCRIPTION_FROM_MODEL_DOCSTRING': True}
TASKS_REDIS {'DATABASE': 0, 'HOST': 'redis', 'INSECURE_SKIP_TLS_VERIFY': False, 'PASSWORD': '********************', 'PORT': 6379, 'SSL': False, 'USERNAME': ''}
TASKS_REDIS_CA_CERT_PATH False
TASKS_REDIS_DATABASE 0
TASKS_REDIS_HOST 'redis'
TASKS_REDIS_PASSWORD '********************'
TASKS_REDIS_PORT 6379
TASKS_REDIS_SENTINELS []
TASKS_REDIS_SENTINEL_SERVICE 'default'
TASKS_REDIS_SENTINEL_TIMEOUT 10
TASKS_REDIS_SKIP_TLS_VERIFY False
TASKS_REDIS_SSL False
TASKS_REDIS_URL None
TASKS_REDIS_USERNAME ''
TASKS_REDIS_USING_SENTINEL False
TEMPLATES [{'APP_DIRS': True, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/opt/netbox/netbox/templates'], 'OPTIONS': {'builtins': ['utilities.templatetags.builtins.filters', 'utilities.templatetags.builtins.tags'], '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', 'netbox.context_processors.settings', 'netbox.context_processors.config', 'netbox.context_processors.registry', 'netbox.context_processors.preferences']}}]
TEMPLATES_DIR '/opt/netbox/netbox/templates'
TEST_NON_SERIALIZED_APPS []
TEST_RUNNER 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR ','
TIME_FORMAT 'P'
TIME_INPUT_FORMATS ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE 'Europe/Copenhagen'
TRANSLATION_ENABLED True
USE_I18N True
USE_THOUSAND_SEPARATOR False
USE_TZ True
USE_X_FORWARDED_HOST True
USE_X_FORWARDED_PORT False
VERSION '4.5.3-Docker-4.0.1'
WSGI_APPLICATION 'netbox.wsgi.application'
X_FRAME_OPTIONS 'SAMEORIGIN'
YEAR_MONTH_FORMAT 'F Y'

`

*Originally created by @moseisleydk on 2/26/2026* ### NetBox Edition NetBox Community ### NetBox Version v4.5.3 ### Python Version 3.12 ### Steps to Reproduce We have a well running 4.4.6 in Docker. If we opgrade this to 4.5.3 (with or without plugins - it does not matter) - after some time it fails with: ``` Request Method: | GET -- | -- https://netboxtest.netic.dk/ 5.2.11 RecursionError maximum recursion depth exceeded /opt/netbox/venv/lib/python3.12/site-packages/debug_toolbar/panels/cache.py, line 40, in wrapper netbox.views.misc.HomeView /opt/netbox/venv/bin/python3 3.12.3 ['/opt/netbox/netbox', '/opt/netbox/netbox', '/opt/netbox/venv/bin', '/usr/lib/python312.zip', '/usr/lib/python3.12', '/usr/lib/python3.12/lib-dynload', '/opt/netbox/venv/lib/python3.12/site-packages'] Thu, 26 Feb 2026 09:17:36 +0100 ``` This is repeatble, tested with 3 upgrades. ### Expected Behavior That it keeps working ### Observed Behavior The upgrade seems to go fine - all upgrade are executed: ` netbox-1 \| ⚙️ Applying database migrations -- netbox-1 \| /opt/netbox/netbox/netbox/settings.py:226: UserWarning: API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used. netbox-1 \| warnings.warn("API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used.") netbox-1 \| 🧬 loaded config '/etc/netbox/config/configuration.py' netbox-1 \| 🧬 loaded config '/etc/netbox/config/extra.py' netbox-1 \| 🧬 loaded config '/etc/netbox/config/logging.py' netbox-1 \| 🧬 loaded config '/etc/netbox/config/plugins.py' netbox-1 \| Operations to perform: netbox-1 \| Apply all migrations: account, auth, circuits, contenttypes, core, dcim, django_rq, extras, ipam, sessions, social_django, taggit, tenancy, thumbnail, users, virtualization, vpn, wireless netbox-1 \| Running migrations: netbox-1 \| Applying users.0013_user_remove_is_staff... OK netbox-1 \| Applying users.0014_users_token_v2... OK netbox-1 \| Applying users.0015_owner... OK netbox-1 \| Applying extras.0134_owner... OK netbox-1 \| Applying dcim.0216_latitude_longitude_validators... OK netbox-1 \| Applying dcim.0217_poweroutlettemplate_color... OK netbox-1 \| Applying dcim.0218_owner... OK netbox-1 \| Applying dcim.0219_devicetype_device_count... OK netbox-1 \| Applying dcim.0220_cable_profile... OK netbox-1 \| Applying dcim.0221_cable_connector_positions... OK netbox-1 \| Applying dcim.0222_port_mappings... OK netbox-1 \| Applying dcim.0223_frontport_positions... OK netbox-1 \| Applying dcim.0224_add_comments_to_organizationalmodel... OK netbox-1 \| Applying circuits.0053_owner... OK netbox-1 \| Applying circuits.0054_cable_connector_positions... OK netbox-1 \| Applying circuits.0055_add_comments_to_organizationalmodel... OK netbox-1 \| Applying circuits.0056_gfk_indexes... OK netbox-1 \| Applying core.0020_owner... OK netbox-1 \| Applying core.0021_job_queue_name... OK netbox-1 \| Applying tenancy.0021_owner... OK netbox-1 \| Applying tenancy.0022_add_comments_to_organizationalmodel... OK netbox-1 \| Applying dcim.0225_gfk_indexes... OK netbox-1 \| Applying dcim.0226_add_mptt_tree_indexes... OK netbox-1 \| Applying ipam.0084_owner... OK netbox-1 \| Applying ipam.0085_add_comments_to_organizationalmodel... OK netbox-1 \| Applying ipam.0086_gfk_indexes... OK netbox-1 \| Applying tenancy.0023_add_mptt_tree_indexes... OK netbox-1 \| Applying virtualization.0049_owner... OK netbox-1 \| Applying virtualization.0050_virtualmachine_start_on_boot... OK netbox-1 \| Applying virtualization.0051_add_comments_to_organizationalmodel... OK netbox-1 \| Applying virtualization.0052_gfk_indexes... OK netbox-1 \| Applying vpn.0010_owner... OK netbox-1 \| Applying vpn.0011_add_comments_to_organizationalmodel... OK netbox-1 \| Applying wireless.0016_owner... OK netbox-1 \| Applying wireless.0017_gfk_indexes... OK redis-1 \| 1:M 25 Feb 2026 08:14:48.030 * 10000 changes in 60 seconds. Saving... redis-1 \| 1:M 25 Feb 2026 08:14:48.031 * Background saving started by pid 14 redis-1 \| 14:C 25 Feb 2026 08:14:48.039 * DB saved on disk redis-1 \| 14:C 25 Feb 2026 08:14:48.040 * Fork CoW for RDB: current 0 MB, peak 0 MB, average 0 MB redis-1 \| 1:M 25 Feb 2026 08:14:48.132 * Background saving terminated with success netbox-1 \| Applying wireless.0018_add_mptt_tree_indexes... OK netbox-1 \| ⚙️ Running trace_paths netbox-1 \| /opt/netbox/netbox/netbox/settings.py:226: UserWarning: API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used. netbox-1 \| warnings.warn("API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used.") netbox-1 \| 🧬 loaded config '/etc/netbox/config/configuration.py' netbox-1 \| 🧬 loaded config '/etc/netbox/config/extra.py' netbox-1 \| 🧬 loaded config '/etc/netbox/config/logging.py' netbox-1 \| 🧬 loaded config '/etc/netbox/config/plugins.py' netbox-1 \| Found no missing console port paths; skipping netbox-1 \| Found no missing console server port paths; skipping netbox-1 \| Found no missing interface paths; skipping netbox-1 \| Found no missing power feed paths; skipping netbox-1 \| Found no missing power outlet paths; skipping netbox-1 \| Found no missing power port paths; skipping netbox-1 \| Finished. netbox-1 \| ⚙️ Removing stale content types netbox-1 \| /opt/netbox/netbox/netbox/settings.py:226: UserWarning: API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used. netbox-1 \| warnings.warn("API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used.") netbox-1 \| 🧬 loaded config '/etc/netbox/config/configuration.py' netbox-1 \| 🧬 loaded config '/etc/netbox/config/extra.py' netbox-1 \| 🧬 loaded config '/etc/netbox/config/logging.py' netbox-1 \| 🧬 loaded config '/etc/netbox/config/plugins.py' netbox-1 \| ⚙️ Removing expired user sessions netbox-1 \| /opt/netbox/netbox/netbox/settings.py:226: UserWarning: API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used. netbox-1 \| warnings.warn("API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used.") netbox-1 \| 🧬 loaded config '/etc/netbox/config/configuration.py' netbox-1 \| 🧬 loaded config '/etc/netbox/config/extra.py' netbox-1 \| 🧬 loaded config '/etc/netbox/config/logging.py' netbox-1 \| 🧬 loaded config '/etc/netbox/config/plugins.py' netbox-1 \| ⚙️ Building search index (lazy) netbox-1 \| /opt/netbox/netbox/netbox/settings.py:226: UserWarning: API_TOKEN_PEPPERS is not defined. v2 API tokens cannot be used. netbox-1 \| warnings.warn("API_TOKEN_PEPPERS is not defined ` I am aware of the API_TOKEN_PEPPERS The it works fine for some hours, and typically next morning we see the recursion error. Settings: ` ABSOLUTE_URL_OVERRIDES | {} -- | -- ADMINS | [] ALLOWED_HOSTS | ['*'] API_TOKEN_PEPPERS | '********************' APPEND_SLASH | True AUTHENTICATION_BACKENDS | '********************' AUTH_PASSWORD_VALIDATORS | '********************' AUTH_USER_MODEL | '********************' BANNER_BOTTOM | 'This is the Test System' BANNER_LOGIN | 'This is the Test System' BANNER_TOP | 'This is the Test System' BASE_DIR | '/opt/netbox/netbox' BASE_PATH | '' CACHES | {'default': {'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://redis-cache:6379/1', 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient', 'PASSWORD': '********************'}}} CACHE_MIDDLEWARE_ALIAS | 'default' CACHE_MIDDLEWARE_KEY_PREFIX | '********************' CACHE_MIDDLEWARE_SECONDS | 600 CACHING_REDIS_CA_CERT_PATH | False CACHING_REDIS_DATABASE | 1 CACHING_REDIS_HOST | 'redis-cache' CACHING_REDIS_PASSWORD | '********************' CACHING_REDIS_PORT | 6379 CACHING_REDIS_PROTO | 'redis' CACHING_REDIS_SENTINELS | [] CACHING_REDIS_SENTINEL_SERVICE | 'default' CACHING_REDIS_SKIP_TLS_VERIFY | False CACHING_REDIS_URL | 'redis://redis-cache:6379/1' CACHING_REDIS_USERNAME | '' CACHING_REDIS_USERNAME_HOST | 'redis-cache' CENSUS_REPORTING_ENABLED | True CENSUS_URL | 'https://census.netbox.oss.netboxlabs.com/api/v1/' CHANGELOG_RETENTION | 1830 CHANGELOG_SKIP_EMPTY_CHANGES | True CONFIG_PARAMS | (<netbox.config.parameters.ConfigParam object at 0x7fc0df9087d0>, <netbox.config.parameters.ConfigParam object at 0x7fc0df55db80>, <netbox.config.parameters.ConfigParam object at 0x7fc0df591010>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ff3b0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ff440>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ff530>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ff620>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ff710>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ff800>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ff8f0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ff9e0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ffb90>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ffbf0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ffc80>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ffda0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8ffec0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de8fffb0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de74c0e0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de74c1d0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de74c2c0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de74c3b0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de74c4a0>, <netbox.config.parameters.ConfigParam object at 0x7fc0de74c590>) CORS_ORIGIN_ALLOW_ALL | True CORS_ORIGIN_REGEX_WHITELIST | [] CORS_ORIGIN_WHITELIST | ['https://localhost'] CSRF_COOKIE_AGE | 31449600 CSRF_COOKIE_DOMAIN | None CSRF_COOKIE_HTTPONLY | True CSRF_COOKIE_NAME | 'csrftoken' CSRF_COOKIE_PATH | '/' CSRF_COOKIE_SAMESITE | 'Lax' CSRF_COOKIE_SECURE | False CSRF_FAILURE_VIEW | 'django.views.csrf.csrf_failure' CSRF_HEADER_NAME | 'HTTP_X_CSRFTOKEN' CSRF_TRUSTED_ORIGINS | [] CSRF_USE_SESSIONS | False CUSTOM_VALIDATORS | {'dcim.device': (<.UniqueName object at 0x7fc0de38ba40>, <.CheckSerialExists object at 0x7fc0de38b9b0>, <.UniqueSerial object at 0x7fc0de1b83e0>)} DATABASE | {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_HEALTH_CHECKS': False, 'CONN_MAX_AGE': 300, 'DISABLE_SERVER_SIDE_CURSORS': False, 'ENGINE': 'django.db.backends.postgresql', 'HOST': 'postgres', 'NAME': 'netbox', 'OPTIONS': {'sslmode': 'prefer'}, 'PASSWORD': '********************', 'PORT': '', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': 'netbox'} DATABASES | {'default': {'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_HEALTH_CHECKS': False, 'CONN_MAX_AGE': 300, 'DISABLE_SERVER_SIDE_CURSORS': False, 'ENGINE': 'django.db.backends.postgresql', 'HOST': 'postgres', 'NAME': 'netbox', 'OPTIONS': {'sslmode': 'prefer'}, 'PASSWORD': '********************', 'PORT': '', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}, 'TIME_ZONE': None, 'USER': 'netbox'}} DATABASE_ROUTERS | [] DATA_UPLOAD_MAX_MEMORY_SIZE | 2621440 DATA_UPLOAD_MAX_NUMBER_FIELDS | None DATA_UPLOAD_MAX_NUMBER_FILES | 100 DATETIME_FORMAT | 'N j, Y, P' DATETIME_INPUT_FORMATS | ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M'] 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 | True DEBUG_PROPAGATE_EXCEPTIONS | False DECIMAL_SEPARATOR | '.' DEFAULT_AUTO_FIELD | 'django.db.models.BigAutoField' DEFAULT_CHARSET | 'utf-8' DEFAULT_DASHBOARD | None DEFAULT_EXCEPTION_REPORTER | 'django.views.debug.ExceptionReporter' DEFAULT_EXCEPTION_REPORTER_FILTER | 'django.views.debug.SafeExceptionReporterFilter' DEFAULT_FROM_EMAIL | 'webmaster@localhost' DEFAULT_INDEX_TABLESPACE | '' DEFAULT_PERMISSIONS | {'extras.add_bookmark': ({'user': '$user'},), 'extras.add_notification': ({'user': '$user'},), 'extras.add_subscription': ({'user': '$user'},), 'extras.change_bookmark': ({'user': '$user'},), 'extras.change_notification': ({'user': '$user'},), 'extras.change_subscription': ({'user': '$user'},), 'extras.delete_bookmark': ({'user': '$user'},), 'extras.delete_notification': ({'user': '$user'},), 'extras.delete_subscription': ({'user': '$user'},), 'extras.view_bookmark': ({'user': '$user'},), 'extras.view_notification': ({'user': '$user'},), 'extras.view_subscription': ({'user': '$user'},), 'users.add_token': '********************', 'users.change_token': '********************', 'users.delete_token': '********************', 'users.view_token': '********************'} DEFAULT_STORAGES | {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'}, 'scripts': {'BACKEND': 'extras.storage.ScriptFileSystemStorage', 'OPTIONS': {'allow_overwrite': True}}, 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}} DEFAULT_TABLESPACE | '' DEPLOYMENT_ID | 'c221bcece48c0f25' DEVELOPER | False DISALLOWED_USER_AGENTS | [] DISK_BASE_UNIT | 1000 DOCS_ROOT | '/opt/netbox/docs' EMAIL | {'FROM_EMAIL': 'netbox@bar.com', 'PASSWORD': '********************', 'PORT': 25, 'SERVER': 'localhost', 'SSL_CERTFILE': '', 'SSL_KEYFILE': '********************', 'TIMEOUT': 5, 'USERNAME': 'netbox', 'USE_SSL': False, 'USE_TLS': False} EMAIL_BACKEND | 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST | 'localhost' EMAIL_HOST_PASSWORD | '********************' EMAIL_HOST_USER | 'netbox' EMAIL_PORT | 25 EMAIL_SSL_CERTFILE | '' EMAIL_SSL_KEYFILE | '********************' EMAIL_SUBJECT_PREFIX | '[NetBox] ' EMAIL_TIMEOUT | 5 EMAIL_USE_LOCALTIME | False EMAIL_USE_SSL | False EMAIL_USE_TLS | False EVENTS_PIPELINE | ['extras.events.process_event_queue'] EXEMPT_EXCLUDE_MODELS | (('extras', 'configrevision'), ('users', 'group'), ('users', 'objectpermission'), ('users', 'token'), ('users', 'user')) EXEMPT_VIEW_PERMISSIONS | [] FIELD_CHOICES | {} 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 | 420 FILE_UPLOAD_TEMP_DIR | None FILTERS_NULL_CHOICE_LABEL | 'None' FILTERS_NULL_CHOICE_VALUE | 'null' FIRST_DAY_OF_WEEK | 0 FIXTURE_DIRS | [] FORCE_SCRIPT_NAME | None FORMAT_MODULE_PATH | None FORMS_URLFIELD_ASSUME_HTTPS | False FORM_RENDERER | 'django.forms.renderers.TemplatesSetting' GRAPHQL_DEFAULT_VERSION | 1 GRAPHQL_ENABLED | True GRAPHQL_MAX_ALIASES | 10 HOSTNAME | 'c139f160ddcd' HTTP_PROXIES | {} IGNORABLE_404_URLS | [] INSTALLED_APPS | ['django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'django.forms', 'corsheaders', 'debug_toolbar', 'django_filters', 'django_htmx', 'django_tables2', 'django_prometheus', 'strawberry_django', 'mptt', 'rest_framework', 'social_django', 'sorl.thumbnail', 'taggit', 'timezone_field', 'core', 'account', 'circuits', 'dcim', 'ipam', 'extras', 'tenancy', 'users', 'utilities', 'virtualization', 'vpn', 'wireless', 'django_rq', 'drf_spectacular', 'drf_spectacular_sidecar'] INTERNAL_IPS | ['127.0.0.1', '::1'] ISOLATED_DEPLOYMENT | False JINJA2_FILTERS | {} LANGUAGES | (('cs', 'Czech'), ('da', 'Danish'), ('de', 'German'), ('en', 'English'), ('es', 'Spanish'), ('fr', 'French'), ('it', 'Italian'), ('ja', 'Japanese'), ('lv', 'Latvian'), ('nl', 'Dutch'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('ru', 'Russian'), ('tr', 'Turkish'), ('uk', 'Ukrainian'), ('zh', 'Chinese')) LANGUAGES_BIDI | ['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ug', 'ur'] LANGUAGE_CODE | 'en-us' LANGUAGE_COOKIE_AGE | None LANGUAGE_COOKIE_DOMAIN | None LANGUAGE_COOKIE_HTTPONLY | False LANGUAGE_COOKIE_NAME | 'django_language' LANGUAGE_COOKIE_PATH | '/' LANGUAGE_COOKIE_SAMESITE | None LANGUAGE_COOKIE_SECURE | False LOCALE_PATHS | ('/opt/netbox/netbox/translations',) LOGGING | {} LOGGING_CONFIG | 'logging.config.dictConfig' LOGIN_FORM_HIDDEN | False LOGIN_PERSISTENCE | False LOGIN_REDIRECT_URL | '/' LOGIN_REQUIRED | False LOGIN_TIMEOUT | 1209600 LOGIN_URL | '/login/' LOGOUT_REDIRECT_URL | 'home' MAINTENANCE_EXEMPT_PATHS | ('/extras/config-revisions/', '/login/', '/', 'home') 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'} METRICS_ENABLED | False MIDDLEWARE | ['strawberry_django.middlewares.debug_toolbar.DebugToolbarMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', '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', 'django_htmx.middleware.HtmxMiddleware', 'netbox.middleware.RemoteUserMiddleware', 'netbox.middleware.CoreMiddleware', 'netbox.middleware.MaintenanceModeMiddleware'] MIGRATION_MODULES | {'debug_toolbar': None} MONTH_DAY_FORMAT | 'F j' NETBOX_COPILOT_URL | 'https://static.copilot.netboxlabs.ai/load.js' NUMBER_GROUPING | 0 PASSWORD_HASHERS | '********************' PASSWORD_RESET_TIMEOUT | '********************' PLUGINS | [] PLUGINS_CATALOG_CONFIG | {} PLUGINS_CONFIG | {} PLUGIN_CATALOG_URL | 'https://api.netbox.oss.netboxlabs.com/v1/plugins' PREPEND_WWW | False PROMETHEUS_EXPORT_MIGRATIONS | False PROXY_ROUTERS | ['utilities.proxy.DefaultProxyRouter'] QUEUE_MAPPINGS | {} RAM_BASE_UNIT | 1000 REDIS | {'caching': {'DATABASE': 1, 'HOST': 'redis-cache', 'INSECURE_SKIP_TLS_VERIFY': False, 'PASSWORD': '********************', 'PORT': 6379, 'SSL': False, 'USERNAME': ''}, 'tasks': {'DATABASE': 0, 'HOST': 'redis', 'INSECURE_SKIP_TLS_VERIFY': False, 'PASSWORD': '********************', 'PORT': 6379, 'SSL': False, 'USERNAME': ''}} RELEASE | ReleaseInfo(version='4.5.3', edition='Community', published=datetime.datetime(2026, 2, 17, 0, 0), designation=None, build='Docker-4.0.1', features=FeatureSet(commercial=False, help_center=False)) RELEASE_CHECK_URL | 'https://api.github.com/repos/netbox-community/netbox/releases' REMOTE_AUTH_AUTO_CREATE_GROUPS | '********************' REMOTE_AUTH_AUTO_CREATE_USER | '********************' REMOTE_AUTH_BACKEND | '********************' REMOTE_AUTH_DEFAULT_GROUPS | '********************' REMOTE_AUTH_DEFAULT_PERMISSIONS | '********************' REMOTE_AUTH_ENABLED | '********************' REMOTE_AUTH_GROUP_HEADER | '********************' REMOTE_AUTH_GROUP_SEPARATOR | '********************' REMOTE_AUTH_GROUP_SYNC_ENABLED | '********************' REMOTE_AUTH_HEADER | '********************' REMOTE_AUTH_SUPERUSERS | '********************' REMOTE_AUTH_SUPERUSER_GROUPS | '********************' REMOTE_AUTH_USER_EMAIL | '********************' REMOTE_AUTH_USER_FIRST_NAME | '********************' REMOTE_AUTH_USER_LAST_NAME | '********************' REPORTS_ROOT | '/opt/netbox/netbox/reports' REST_FRAMEWORK | {'ALLOWED_VERSIONS': ['4.5'], 'COERCE_DECIMAL_TO_STRING': False, 'DEFAULT_AUTHENTICATION_CLASSES': '********************', 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend', 'rest_framework.filters.OrderingFilter'), 'DEFAULT_METADATA_CLASS': 'netbox.api.metadata.BulkOperationMetadata', 'DEFAULT_PAGINATION_CLASS': 'netbox.api.pagination.OptionalLimitOffsetPagination', 'DEFAULT_PARSER_CLASSES': ('rest_framework.parsers.JSONParser', 'rest_framework.parsers.MultiPartParser'), 'DEFAULT_PERMISSION_CLASSES': ('netbox.api.authentication.TokenPermissions',), 'DEFAULT_RENDERER_CLASSES': ('rest_framework.renderers.JSONRenderer', 'netbox.api.renderers.FormlessBrowsableAPIRenderer'), 'DEFAULT_SCHEMA_CLASS': 'core.api.schema.NetBoxAutoSchema', 'DEFAULT_VERSION': '4.5', 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.AcceptHeaderVersioning', 'SCHEMA_COERCE_METHOD_NAMES': {'bulk_destroy': 'bulk_delete', 'destroy': 'delete', 'retrieve': 'read'}, 'VIEW_NAME_FUNCTION': 'utilities.api.get_view_name'} REST_FRAMEWORK_VERSION | '4.5' ROOT_URLCONF | 'netbox.urls' RQ_DEFAULT_TIMEOUT | 300 RQ_PARAMS | {'DB': 0, 'DEFAULT_TIMEOUT': 300, 'HOST': 'redis', 'PASSWORD': '********************', 'PORT': 6379, 'SSL': False, 'SSL_CERT_REQS': 'required', 'USERNAME': ''} RQ_QUEUES | {'default': {'DB': 0, 'DEFAULT_TIMEOUT': 300, 'HOST': 'redis', 'PASSWORD': '********************', 'PORT': 6379, 'SSL': False, 'SSL_CERT_REQS': 'required', 'USERNAME': ''}, 'high': {'DB': 0, 'DEFAULT_TIMEOUT': 300, 'HOST': 'redis', 'PASSWORD': '********************', 'PORT': 6379, 'SSL': False, 'SSL_CERT_REQS': 'required', 'USERNAME': ''}, 'low': {'DB': 0, 'DEFAULT_TIMEOUT': 300, 'HOST': 'redis', 'PASSWORD': '********************', 'PORT': 6379, 'SSL': False, 'SSL_CERT_REQS': 'required', 'USERNAME': ''}} RQ_QUEUE_DEFAULT | 'default' RQ_QUEUE_HIGH | 'high' RQ_QUEUE_LOW | 'low' RQ_RETRY_INTERVAL | 60 RQ_RETRY_MAX | 0 SCRIPTS_ROOT | '/opt/netbox/netbox/scripts' SEARCH_BACKEND | 'netbox.search.backends.CachedValueSearchBackend' SECRET_KEY | '********************' SECRET_KEY_FALLBACKS | '********************' SECURE_CONTENT_TYPE_NOSNIFF | True SECURE_CROSS_ORIGIN_OPENER_POLICY | 'same-origin' 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_REFERRER_POLICY | 'same-origin' SECURE_SSL_HOST | None SECURE_SSL_REDIRECT | False SENTRY_CONFIG | {} SENTRY_DSN | None SENTRY_ENABLED | False SENTRY_SAMPLE_RATE | 1.0 SENTRY_SEND_DEFAULT_PII | False SENTRY_TAGS | {} SENTRY_TRACES_SAMPLE_RATE | 0 SERIALIZATION_MODULES | {'json': 'utilities.serializers.json'} SERVER_EMAIL | 'netbox@bar.com' 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_SAMESITE | 'Lax' 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 | 'm/d/Y P' SHORT_DATE_FORMAT | 'm/d/Y' SIGNING_BACKEND | 'django.core.signing.TimestampSigner' SILENCED_SYSTEM_CHECKS | [] SOCIAL_AUTH_CLEAN_USERNAME_FUNCTION | '********************' SOCIAL_AUTH_JSONFIELD_ENABLED | '********************' SOCIAL_AUTH_PIPELINE | '********************' SOCIAL_AUTH_USER_MODEL | '********************' SPECTACULAR_SETTINGS | {'COMPONENT_SPLIT_REQUEST': True, 'LICENSE': {'name': 'Apache v2 License'}, 'POSTPROCESSING_HOOKS': [], 'REDOC_DIST': 'SIDECAR', 'SERVERS': [{'description': 'NetBox', 'url': ''}], 'SWAGGER_UI_DIST': 'SIDECAR', 'SWAGGER_UI_FAVICON_HREF': 'SIDECAR', 'TITLE': 'NetBox REST API', 'VERSION': '4.5.3-Docker-4.0.1'} STATICFILES_DIRS | ('/opt/netbox/netbox/project-static/dist', '/opt/netbox/netbox/project-static/img', '/opt/netbox/netbox/project-static/js', ('docs', '/opt/netbox/netbox/project-static/docs')) STATICFILES_FINDERS | ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder'] STATIC_ROOT | '/opt/netbox/netbox/static' STATIC_URL | '/static/' STORAGES | {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'}, 'scripts': {'BACKEND': 'extras.storage.ScriptFileSystemStorage', 'OPTIONS': {'allow_overwrite': True}}, 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}} STORAGE_BACKEND | None STORAGE_CONFIG | None STRAWBERRY_DJANGO | {'DEFAULT_PK_FIELD_NAME': 'id', 'PAGINATION_DEFAULT_LIMIT': 100, 'TYPE_DESCRIPTION_FROM_MODEL_DOCSTRING': True} TASKS_REDIS | {'DATABASE': 0, 'HOST': 'redis', 'INSECURE_SKIP_TLS_VERIFY': False, 'PASSWORD': '********************', 'PORT': 6379, 'SSL': False, 'USERNAME': ''} TASKS_REDIS_CA_CERT_PATH | False TASKS_REDIS_DATABASE | 0 TASKS_REDIS_HOST | 'redis' TASKS_REDIS_PASSWORD | '********************' TASKS_REDIS_PORT | 6379 TASKS_REDIS_SENTINELS | [] TASKS_REDIS_SENTINEL_SERVICE | 'default' TASKS_REDIS_SENTINEL_TIMEOUT | 10 TASKS_REDIS_SKIP_TLS_VERIFY | False TASKS_REDIS_SSL | False TASKS_REDIS_URL | None TASKS_REDIS_USERNAME | '' TASKS_REDIS_USING_SENTINEL | False TEMPLATES | [{'APP_DIRS': True, 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': ['/opt/netbox/netbox/templates'], 'OPTIONS': {'builtins': ['utilities.templatetags.builtins.filters', 'utilities.templatetags.builtins.tags'], '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', 'netbox.context_processors.settings', 'netbox.context_processors.config', 'netbox.context_processors.registry', 'netbox.context_processors.preferences']}}] TEMPLATES_DIR | '/opt/netbox/netbox/templates' TEST_NON_SERIALIZED_APPS | [] TEST_RUNNER | 'django.test.runner.DiscoverRunner' THOUSAND_SEPARATOR | ',' TIME_FORMAT | 'P' TIME_INPUT_FORMATS | ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] TIME_ZONE | 'Europe/Copenhagen' TRANSLATION_ENABLED | True USE_I18N | True USE_THOUSAND_SEPARATOR | False USE_TZ | True USE_X_FORWARDED_HOST | True USE_X_FORWARDED_PORT | False VERSION | '4.5.3-Docker-4.0.1' WSGI_APPLICATION | 'netbox.wsgi.application' X_FRAME_OPTIONS | 'SAMEORIGIN' YEAR_MONTH_FORMAT | 'F Y' `
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github/netbox#275