mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Remove Manufacturer constraint on Platform to Device assignment #10850
Closed
opened 2025-12-29 21:36:41 +01:00 by adam
·
10 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
No Label
type: feature
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#10850
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 @empusas on GitHub (Mar 5, 2025).
NetBox version
v4.2
Feature type
Change to existing functionality
Proposed functionality
Currently, NetBox imposes a constraint that a Platform can only be assigned to a Device if the Manufacturer matches or if no Manufacturer is set on the Platform.
While this restriction may be reasonable for most network devices (about 95% of cases), it proves impractical for nearly everything else.
The only apparent purpose of this limitation seems to be restricting options in the UI.
Use case
As mentioned above, for about 95% of network devices, there may be a 1:1 relationship between the hardware manufacturer and the software provider.
However, in the compute world, this is not the case. Your server hardware might be from Dell or Lenovo, while the operating system could be provided by Red Hat or Microsoft.
Currently, the only workaround is to remove the Manufacturer from the Platform, which technically works but also removes valuable information that could be useful in other scenarios.
And to the argument that “NetBox is primarily for networking, not compute or storage,” I would counter:
How can you achieve a comprehensive view of infrastructure if NetBox only includes network data for cabling and IPAM, but lacks visibility into compute and storage?
Database changes
No response
External dependencies
No response
@Andres1357 commented on GitHub (Mar 5, 2025):
I had assumed this limitation was only present for the default manufacturer field for device types but you're right, it is actually there for the platform field on devices, as well.
Maybe a workaround is to set no manufacturer on the platforms Windows, Linux, etc. Or maybe that's the intended method.
@empusas commented on GitHub (Mar 5, 2025):
As I mentioned, removing the Manufacturer from the Platform is currently the only workaround. However, I believe that removing data to work around a constraint that offers little to no real advantage is not the right solution.
That said, if someone can explain why this constraint is so beneficial that it outweighs the value of having accurate and complete data in the system, I’d be happy to understand the reasoning.
@ITJamie commented on GitHub (Mar 5, 2025):
adding a boolean option platform model "only allow this platform on matching device manufacturer" would be more useful in the long term and update checks to verify against that field on platform assignment.
Weve seen similar for palo and cisco virtual appliances.
@empusas commented on GitHub (Mar 6, 2025):
That would probably be a better solution to the problem, but it would require significantly more effort to modify the code accordingly.
Once again, I ask: What benefit does this restriction provide that would justify such effort?
@sleepinggenius2 commented on GitHub (Mar 6, 2025):
Your examples are for servers. As a service provider, we only have network equipment to document in our NetBox instance and all Platforms have a Manufacturer that matches the device Manufacturer. So, with all the different equipment vendors we use, having a couple values in the dropdown versus 60+ different values that you have to remember what the particular vendor's OS is called is a huge time savings and helps maintain data integrity. As we also tie platforms to integrations/automations, selecting the correct value is critical. I can tell you from experience that when this was broken back when the selector was added, our Engineering teams were all up in arms about having a giant list to scroll through each time.
For your argument about losing valuable data, there is nothing stopping you from adding an object type custom field to the Platform model to capture the Manufacturer of the OS vendor, or whatever you want to call it, which would allow you to leave the Manufacturer field blank and achieve your desired functionality without creating a product regression for others.
@empusas commented on GitHub (Mar 7, 2025):
Well, good for you if you only need to document network devices. However, many users deal with a broader range of infrastructure, where this is not the case.
Even then, I would assume you’ve encountered at least a few network vendors where the 1:1 relationship between hardware and OS does not apply. If not, here’s a quick list:
• SONiC runs on hardware from Dell, Arista, Cisco, Edgecore, Mellanox (NVIDIA), and Broadcom.
• OS10 runs on hardware from Dell and Big Switch Networks.
• EOS runs on hardware from Arista, Big Switch Networks, and even Dell.
• Comware runs on hardware from Huawei and H3C.
• VyOS runs on hardware from Ubiquiti, Vyatta, and MikroTik.
• Cumulus Linux runs on various white-box switches like Mellanox (NVIDIA), Dell, Edgecore, and HPE.
Just because you haven’t seen these combinations or your company doesn’t use them doesn’t mean they don’t exist for others.
BTW: There’s a search function in every dropdown—users don’t have to scroll manually. Or do your users also scroll through the entire device list in each form?
@luteijn commented on GitHub (Mar 7, 2025):
Also, companies not infrequently get taken over, e.g. Bay, Nortel, Avaya, Extreme - but newer software still runs on older hardware.
If you're scrolling through a list in a GUI for more than a small correction, haven't you already lost the game? But even then, just showing the short list at first and a {I know what I'm doing, show all} button to give the option to add a non matching combination would give both camps what they think they need.
In my mind the data you want to enter should not be limited to some arbitrary criteria a priori, but only when you try to use it, you check if you have all you need. Of course, giving a warning that 'vendors don't match' is fine, but don't stop me from entering partial data, or force me to put in dummy or wrong data.
@Domoninic commented on GitHub (Mar 12, 2025):
When you create a Device does it inherit the Default Platform from the Device type ?
If you only ever need a 1:1 mapping of Platform to Device does this this not cover your needs ?
@sleepinggenius2 commented on GitHub (Mar 13, 2025):
We have the Default Platform set on our Device Types, but have run into a number of challenges using it in practice. For example, we can't make platform a required field while relying on the default value, because the default is only set on the object during
save(), but validators run on thepost_cleansignal. The default is also only set if the platform is not provided, and since platform is part ofclone_fieldson the Device object, if an Engineer is building out a new site and adds an IOS XR router, then clicks Create & Add Another to add an IOS XE switch, the platform will still say IOS XR unless they clear or change it. Usually they would just change it today, because it's about the same level of effort to pick the correct choice from the limited number of options. It's also not always a 1:1 mapping. For example, IOS XR 32-bit vs IOS XR 64-bit or IOS XR 6 vs IOS XR 7 are important distinctions and can usually run on the same Device Type, so the Default Platform would just be IOS XR and then we could use that in a custom validator to make sure that a more specific option was selected in a scalable way.@jeremystretch commented on GitHub (Mar 13, 2025):
The manufacturer field exists on the platform model specifically for this purpose: To limit the devices/VMs to which the platform may be assigned. I see no benefit to removing this functionality.
These are not manufacturers in this sense; they are software publishers. If you need to correlate a software platform to its publisher (which again, is not a function of the manufacturer field), this could be done via a custom field, tag, or plugin.