mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-13 13:53:31 +01:00
Relax naming constraints for Devices #871
Closed
opened 2025-12-29 16:26:31 +01:00 by adam
·
7 comments
No Branch/Tag Specified
main
21102-fix-graphiql-explorer
update-changelog-comments-docs
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
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#871
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 @bellwood on GitHub (Apr 18, 2017).
Branching this off from #238
I'm running into issues where my real-world naming consistencies are not allowed within Netbox due to unique constraints.
Some background:
I have Site A -> Site C, each site has Zone 1 -> Zone 5, each zone has Rack 1 -> Rack 50, each rack has PDU-A -> PDU-B
The first issue I run into is that I cannot have two racks named R1 in a single site even though they are in separate rack groups.
As a result I have to preface it with the Zone, so R1 in Z1 becomes R101.
Next issue, devices, I cannot have multiple PDUs (rPDUS) called PDU-A and PDU-B, nor can I have multiple rack prefixed PDU's, R1-PDU-A.
As a result, I have to pre and post fix the name with a rack and zone: R1-PDU-A.Z1
Next issue, I cannot have the same devices names even if they are in different sites, R1-PDU-A.Z1 in site A cannot co-exist with R1-PDU-A.Z1 in site B, this not considered unique.
Why is this such a problem?
Well I have hostnames defined on our methodologies:
R#-PDU-#.Z#.SITE#.DOMAIN.TLD
With the advancements netbox is making, I'm already invisioning hacks beyond hacks to build the proper FQDN's to represent my physical world to interact.
It also means storing redundant data, like zone/rack, or irrelevant data, like rack zone prefixing.
Ideally:
Racks:
Rack-Slug.RackGroup-Slug.Site-Slug.DOMAIN.TLD
Devices:
DeviceName.RackGroup-Slug.Site-Slug.DOMAIN.TLD
Where in the uniquity is scoped to the rack group.
@jeremystretch commented on GitHub (Apr 18, 2017):
This is covered by #238. Let's not duplicate the discussion here.
Uniqueness 😄
Currently, NetBox requires each device to have either a unique name, or no name. The proposal to shrink the scope of uniqueness to a rack group is problematic because racks don't need to be assigned to rack groups, and devices don't even need to be assigned to racks. This leads to very complex validation logic because (AFAIK) we can't just use the
unique_togetherMeta attribute to enforce uniqueness across multiple tables at the database level. It would be feasible to make device names unique per site, but I'm not sure how useful that would be.The other problem is that, similar to #238, referencing a device by name now requires a tuple of (parent object name, device name). So importing interface connections, for example, would now require the user to first determine the site or rack in which every device exists. This is a substantial additional burden for users, especially those who employ only unique device names.
As a workaround, could you name the PDUs following the pattern
R<rack>-PDU-[AB].<zone>.<site>? I understand it's not the ideal solution, but it seems like it would work.@bellwood commented on GitHub (Apr 18, 2017):
So I can, but, if I go that route, I might as well treat device and rack "names" as hostnames, which would easily be unique, but, requires redundantly storing the rack group and site slugs within and makes the UI real messy, especially on mobile devices.
Perhaps we could allow a mask on "name" such that it "hides" those redundant bits, this way the backend logic stays nice and simple and on the front end things look nice and clean.
This would also allow for ideal utilization in enhancements going forward where in the stored value:
device.name = R1-PDU-A.Z1.SITE1
could be used as:
device.named.masked = R1-PDU-A
...and one could then build:
{device.name.masked}.{rack_group_slug}.{site_slug}.DOMAIN.TLD
Would masking be possible as a compromise?
@jeremystretch commented on GitHub (Apr 18, 2017):
I'm opposed to building in any methods which intentionally omit data. A device's name should always be displayed in its full form within NetBox; any manipulation would need to be performed by an export template or external consumer.
@bellwood commented on GitHub (Apr 18, 2017):
OK, what if we had a user-definable column and the ability to hide a column (visible by default)
The user definable column could be built upon using available slugs/names/other bits and some basic regex capabilities?
Just spit balling
@bellwood commented on GitHub (Apr 19, 2017):
So in lieu of any added work on your end and before I dump, mass-modify and attempt to reload all my inventory, can you let me know if the Facility ID is a unique field as well for racks?
If that field is looser then I think I can make it work - thanks =)
@bellwood commented on GitHub (Apr 19, 2017):
OK, reloaded all my data... This will work... Once version 2 drops I think we might need to look at making the tables responsive in a way that works better for mobile devices...
I don't mind taking a whack at that when the time comes and either making PR's or dropping screencaps on the discuss group
Feel free to close this if you have no other input, thanks @jeremystretch =)
@jeremystretch commented on GitHub (Apr 19, 2017):
Just FYI, you can find this in dcim/models.py. The
facility_idfield is defined underclass Rackas:blank=Trueindicates that the field is not required. Although the field is not globally unique,indicates that, like the rack name, the facility ID must be unique per site.