mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Adding a Site relation to the VRF Model #5122
Closed
opened 2025-12-29 19:24:30 +01:00 by adam
·
6 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#5122
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 @martijnremmen on GitHub (Jul 30, 2021).
NetBox version
v2.11.9
Feature type
Data model extension
Proposed functionality
Addition of a Site relation to the VRF Model.
Use case
Our company manages a very diverse selection of sites for many different costumers. Some of our sites are campuses in which we use VRF's and in some/most, we don't.
This way we manage VRF's means that we associate them directly with a certain site and are not just global across all costumers/sites. Some Sites have multiple VRFs and some only the implied 'default'. Currently we put the site name in the VRF name separated with an underscore (eg 'amsterdam_default'), but this is suboptimal for obvious reasons.
For us, adding a Site relation to the VRF Model would be extremely helpful (and borderline required for accurately representing our organizational structure).
Database changes
Site relation field to the VRF table
External dependencies
None
@DanSheps commented on GitHub (Jul 30, 2021):
Can you elaborate more on your use case, this doesn't sound like best practices. If you have VRF x at site y and VRF x at site z, and they use the same RD and targets they are the same VRF and you should not be creating different VRFs in Netbox to model that. If they use different targets then how are you routing between the networks?
If they have different RD's at sites, then you should be using the RD to locate them. I don't see us adding this into core any time soon.
@jeremystretch commented on GitHub (Jul 30, 2021):
Honestly it sounds like you're not using VRFs for their intended purpose. A VRF is a layer three routing domain: it's not typically bound to a specific location. Rather, you have multiple VRFs present at each location. I agree with @DanSheps that adding this would not agree with NetBox's employment of the VRF concept.
@martijnremmen commented on GitHub (Aug 3, 2021):
I think I jumped the gun on this solution. So I'll take a step back here and explain our situation in more detail.
Scenario
We are a service provider with multiple different customers. So our situation might look like this (note that we have a lot more customers and sites):
Customer A
Customer B
Our own company C
To explain what's going on
Customer A is a typical scenario, they have a couple of sites with unique prefixes (including an azure 'site'). The only thing to note is that we can have more customers that use overlapping prefixes. So this 'routing domain' is in this case limited to one particular customer. All prefixes within that customer/routing domain are unique.
Customer B represents a campus. We provide some more advanced services at campuses. Like we give tenants the ability to choose their own subnets, by providing them with their own VRF. These VRFs are scoped to this particular tenant, at this particular campus.
Customer C represents our own company (we do our own networking). There's nothing weird here, it's like Customer A.
Problem
The only way to model these different routing domains in Netbox is by using VRFs (?). But then it's relatively easy to loose track of which VRF represents which routing domain. We'd have to resort to a fairly complex naming scheme which isn't ideal for this many different customers. Not to mention we are modeling something as being a VRF that isn't an actual VRF.
For example, this obviously happens without using VRFs to seperate the two customer routing domains.

Conclusion
I'd like to hear any suggestions on how to model this scenario in Netbox. But it does raise the question whether Netbox currently supports a Service Provider use case
I'd be happy to answer any questions
@jeremystretch commented on GitHub (Aug 4, 2021):
I'm afraid I don't follow. VRFs are not a concept unique to NetBox: They are well-defined constructs that can be employed to manage separate L3 routing domains on a shared infrastructure (using MPLS/VPN, for instance). Each VRF is a separate routing table, and routes can be exchanged among VRFs using route targets (which can also be modeled in NetBox).
If each customer has its own routing domain, each should get its own VRF.
I'd have to disagree. Providers routinely manage many thousands of customers using VRFs. Each VRF can also be assigned to a tenant in NetBox, which may simplify things significantly.
@martijnremmen commented on GitHub (Aug 5, 2021):
We are not a "internet service provider" nor do we have a central platform to which all customers attach. We simply manage the LAN networks of multiple completely different companies. We're totally aware of the usecase of VRF's since we apply those at the large campus networks that some of our customers have.
The solution we're looking for is a way to use 1 single netbox instance for all our customers, instead of a separate netbox instance per customer (with their own campus VRF's). Currently we only run into the issue that prefixes of totally different customers overlap, but are combined within Netbox. The only way to separate them is to link them to "VRFs that don't really exist" since those customers do not share a network.
@jeremystretch commented on GitHub (Aug 5, 2021):
Again, a VRF is a discrete L3 routing domain, of which you have many. So, using a VRF for each customer makes sense. But that's tangential to the feature request you submitted.
The FR is to add a relationship from the VRF model to the site model, which doesn't make sense: Even where you have unique prefixes per site, they are presumably part of the same routing domain. (Why else would they be unique?)
This should be modeled in NetBox as a single VRF per customer (tenant), with each prefix being assigned to the appropriate site. This approach is supported today and requires no changes to the code.