mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
STORAGES Dictionary Ignores OPTIONS for Azure Storage in NetBox 4.2.7 #11015
Closed
opened 2025-12-29 21:39:10 +01:00 by adam
·
11 comments
No Branch/Tag Specified
main
update-changelog-comments-docs
feature-removal-issue-type
20911-dropdown
20239-plugin-menu-classes-mutable-state
21097-graphql-id-lookups
feature
fix_module_substitution
20923-dcim-templates
20044-elevation-stuck-lightmode
feature-ip-prefix-link
v4.5-beta1-release
20068-import-moduletype-attrs
20766-fix-german-translation-code-literals
20378-del-script
7604-filter-modifiers-v3
circuit-swap
12318-case-insensitive-uniqueness
20637-improve-device-q-filter
20660-script-load
19724-graphql
20614-update-ruff
14884-script
02496-max-page
19720-macaddress-interface-generic-relation
19408-circuit-terminations-export-templates
20203-openapi-check
fix-19669-api-image-download
7604-filter-modifiers
19275-fixes-interface-bulk-edit
fix-17794-get_field_value_return_list
11507-show-aggregate-and-rir-on-api
9583-add_column_specific_search_field_to_tables
v4.5.0
v4.4.10
v4.4.9
v4.5.0-beta1
v4.4.8
v4.4.7
v4.4.6
v4.4.5
v4.4.4
v4.4.3
v4.4.2
v4.4.1
v4.4.0
v4.3.7
v4.4.0-beta1
v4.3.6
v4.3.5
v4.3.4
v4.3.3
v4.3.2
v4.3.1
v4.3.0
v4.2.9
v4.3.0-beta2
v4.2.8
v4.3.0-beta1
v4.2.7
v4.2.6
v4.2.5
v4.2.4
v4.2.3
v4.2.2
v4.2.1
v4.2.0
v4.1.11
v4.1.10
v4.1.9
v4.1.8
v4.2-beta1
v4.1.7
v4.1.6
v4.1.5
v4.1.4
v4.1.3
v4.1.2
v4.1.1
v4.1.0
v4.0.11
v4.0.10
v4.0.9
v4.1-beta1
v4.0.8
v4.0.7
v4.0.6
v4.0.5
v4.0.3
v4.0.2
v4.0.1
v4.0.0
v3.7.8
v3.7.7
v4.0-beta2
v3.7.6
v3.7.5
v4.0-beta1
v3.7.4
v3.7.3
v3.7.2
v3.7.1
v3.7.0
v3.6.9
v3.6.8
v3.6.7
v3.7-beta1
v3.6.6
v3.6.5
v3.6.4
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.5.9
v3.6-beta2
v3.5.8
v3.6-beta1
v3.5.7
v3.5.6
v3.5.5
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.4.10
v3.4.9
v3.5-beta2
v3.4.8
v3.5-beta1
v3.4.7
v3.4.6
v3.4.5
v3.4.4
v3.4.3
v3.4.2
v3.4.1
v3.4.0
v3.3.10
v3.3.9
v3.4-beta1
v3.3.8
v3.3.7
v3.3.6
v3.3.5
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.2.9
v3.2.8
v3.3-beta2
v3.2.7
v3.3-beta1
v3.2.6
v3.2.5
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.1.11
v3.1.10
v3.2-beta2
v3.1.9
v3.2-beta1
v3.1.8
v3.1.7
v3.1.6
v3.1.5
v3.1.4
v3.1.3
v3.1.2
v3.1.1
v3.1.0
v3.0.12
v3.0.11
v3.0.10
v3.1-beta1
v3.0.9
v3.0.8
v3.0.7
v3.0.6
v3.0.5
v3.0.4
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v2.11.12
v3.0-beta2
v2.11.11
v2.11.10
v3.0-beta1
v2.11.9
v2.11.8
v2.11.7
v2.11.6
v2.11.5
v2.11.4
v2.11.3
v2.11.2
v2.11.1
v2.11.0
v2.10.10
v2.10.9
v2.11-beta1
v2.10.8
v2.10.7
v2.10.6
v2.10.5
v2.10.4
v2.10.3
v2.10.2
v2.10.1
v2.10.0
v2.9.11
v2.10-beta2
v2.9.10
v2.10-beta1
v2.9.9
v2.9.8
v2.9.7
v2.9.6
v2.9.5
v2.9.4
v2.9.3
v2.9.2
v2.9.1
v2.9.0
v2.9-beta2
v2.8.9
v2.9-beta1
v2.8.8
v2.8.7
v2.8.6
v2.8.5
v2.8.4
v2.8.3
v2.8.2
v2.8.1
v2.8.0
v2.7.12
v2.7.11
v2.7.10
v2.7.9
v2.7.8
v2.7.7
v2.7.6
v2.7.5
v2.7.4
v2.7.3
v2.7.2
v2.7.1
v2.7.0
v2.6.12
v2.6.11
v2.6.10
v2.6.9
v2.7-beta1
Solcon-2020-01-06
v2.6.8
v2.6.7
v2.6.6
v2.6.5
v2.6.4
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.13
v2.5.12
v2.6-beta1
v2.5.11
v2.5.10
v2.5.9
v2.5.8
v2.5.7
v2.5.6
v2.5.5
v2.5.4
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.9
v2.5-beta2
v2.4.8
v2.5-beta1
v2.4.7
v2.4.6
v2.4.5
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.7
v2.4-beta1
v2.3.6
v2.3.5
v2.3.4
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.10
v2.3-beta2
v2.2.9
v2.3-beta1
v2.2.8
v2.2.7
v2.2.6
v2.2.5
v2.2.4
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.6
v2.2-beta2
v2.1.5
v2.2-beta1
v2.1.4
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.10
v2.1-beta1
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v2.0.0
v2.0-beta3
v1.9.6
v1.9.5
v2.0-beta2
v1.9.4-r1
v1.9.3
v2.0-beta1
v1.9.2
v1.9.1
v1.9.0-r1
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.3
v1.7.2-r1
v1.7.1
v1.7.0
v1.6.3
v1.6.2-r1
v1.6.1-r1
1.6.1
v1.6.0
v1.5.2
v1.5.1
v1.5.0
v1.4.2
v1.4.1
v1.4.0
v1.3.2
v1.3.1
v1.3.0
v1.2.2
v1.2.1
v1.2.0
v1.1.0
v1.0.7-r1
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3-r1
v1.0.3
1.0.0
Labels
Clear labels
beta
breaking change
complexity: high
complexity: low
complexity: medium
needs milestone
netbox
pending closure
plugin candidate
pull-request
severity: high
severity: low
severity: medium
status: accepted
status: backlog
status: blocked
status: duplicate
status: needs owner
status: needs triage
status: revisions needed
status: under review
topic: GraphQL
topic: Internationalization
topic: OpenAPI
topic: UI/UX
topic: cabling
topic: event rules
topic: htmx navigation
topic: industrialization
topic: migrations
topic: plugins
topic: scripts
topic: templating
topic: testing
type: bug
type: deprecation
type: documentation
type: feature
type: housekeeping
type: translation
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#11015
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @dattebayo-ua on GitHub (Apr 11, 2025).
Deployment Type
Self-hosted
NetBox Version
v4.2.7
Python Version
3.12
Steps to Reproduce
Summary
When attempting to configure Azure blob storage for NetBox 4.2.7 via the new STORAGES dictionary (Django 5.1.8), Server appears to override the custom “default” backend and remove the "OPTIONS" key. Consequently, an error is raised about a missing container name.
Environment Details
• NetBox Version: 4.2.7
• Django Version: 5.1.8
• Python Version: 3.12.3
• Plugins: None installed
• Azure-Related Packages:
Steps to Reproduce
sudo systemctl restart netbox netbox-rqThe OPTIONS block is gone.
This implies the Azure backend never received 'azure_container': 'media'.
Additional Notes
• NetBox 4.2.x historically relies on STORAGE_BACKEND / STORAGE_CONFIG for remote storage.
• Using Django 4.2+ STORAGES dictionary may not be fully supported or is overridden by NetBox’s Django (?) internal logic.
• No plugins or environment variables appear to override these settings.
• The environment has django-storages[azure] and azure-identity installed
Clarification: Is NetBox 4.2.x expected to support the new STORAGES dict approach from Django ≥4.2?
Expected Behavior
NetBox should respect the user-supplied STORAGES dictionary, including "OPTIONS". If "azure_container" is provided in the config, it shouldn’t raise a ValueError about missing container name.
Observed Behavior
@bctiemann commented on GitHub (Apr 11, 2025):
No; currently only
NETBOX_BACKENDandNETBOX_CONFIGas documented is supported in NetBox 4.2.x. However, in NetBox 4.3 there will be support for overridingSTORAGESdirectly inconfiguration.py, which will be merged into the defaultSTORAGESinsettings.py.@dattebayo-ua commented on GitHub (Apr 11, 2025):
@bctiemann Thank you for your reply. Unfortunately, I've encountered issues when configuring STORAGE_BACKEND and STORAGE_CONFIG as well:
Here's the output when checking the configured settings:

sudo -u netbox /opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py diffsettings --all | grep 'STORAGE'The same error persists:
@bctiemann commented on GitHub (Apr 11, 2025):
Hi @dattebayo-ua -- could you check my linked PR? I'm proposing to populate
STORAGE_CONFIGdirectly intoOPTIONSfor the default backend. I'm not sure if that will have any side effects with backends I don't have available but maybe you could verify whether that does the trick?@dattebayo-ua commented on GitHub (Apr 11, 2025):
@bctiemann I updated the code locally in my development environment and I can confirm it resolves the issue — media files are now uploading to the storage account. However, it still requires configuring STORAGE_BACKEND and STORAGE_CONFIG. As a result, 'staticfiles' still lacks its own 'OPTIONS' object.
So working code it:
sudo -u netbox /opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py collectstatic --no-input --clear -v 3static blob in SA:
media blob:
@bctiemann commented on GitHub (Apr 14, 2025):
@dattebayo-ua Good point -- I've updated my PR to be more comprehensive and merge the entirety of
STORAGESfromconfiguration.pyrather than just focusing onSTORAGE_CONFIG. Could you see if this works better?@dattebayo-ua commented on GitHub (Apr 14, 2025):
Hi @bctiemann ,
I have updates settings.py
where removed previous change and add only
But now after
'm getting the following error message:
That's how netbox loads configurations:
PS I tried different approaches where I also configured STORAGE_BACKEND or STORAGE_CONFIG or both of them together with STORAGES and same issue
PSS
Also when statfiles is not configured in STORAGES then everything is working as expected and medias are saved to azure SA, but static files as expected are saved on local storage
@bctiemann commented on GitHub (Apr 15, 2025):
Since I don't have access to Azure storage all I can do is verify that
settings.STORAGESlooks correct, i.e.:Out of curiosity, what happens if you comment out this block?
ba5769f256/netbox/netbox/settings.py (L257-L262)It may be that the monkey-patch is no longer necessary if
STORAGESis being set outright.@bctiemann commented on GitHub (Apr 15, 2025):
@dattebayo-ua Because the handling of
STORAGEShas been reworked in NetBox v4.3 and the 4.3 beta is out now, could you please check that version and see if this is still an issue there? If so please retarget this issue for 4.3. If not I'm inclined to close this and my PR as there are diminishing returns for trying to chase a behavior in code that has no further lifecycle path.@dattebayo-ua commented on GitHub (Apr 16, 2025):
Hi @bctiemann,
I'd be happy to test the beta release! I'll need to wait until I return from vacation though, as I will not have access to my company environment. I'll let you know my feedback once I'm back :)
@dattebayo-ua commented on GitHub (Apr 16, 2025):
Nah, did not want to wait :D
I tested it together with saving scripts in remote storage. All three types(media,static and scripts) are stored in our storage account and it unblocks us of using dynamic Netbox env with container apps.
But I noticed that pages are not rendering properly( there are missed some contents like arrows near expanded options only squares)
So I guess this issue could be close
@dattebayo-ua commented on GitHub (May 5, 2025):
UPDATE: If you are facing same issue you would need to configure CORS for azure storage