mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
'soft' delete of items #6606
Closed
opened 2025-12-29 19:43:00 +01:00 by adam
·
12 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
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#6606
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 @PieterL75 on GitHub (Jun 28, 2022).
NetBox version
v3.2.5
Feature type
Change to existing functionality
Proposed functionality
Hide models from standard views, based on the status.
Keep Changelog for the devices in that state
Use case
Currently, the only way to remove items from Netbox, is by really deleting them. By doing this, you loose all historical information on that item.
It would make sense to 'hide' items that have a certain state from the standard list view.
In our case, we would hide all 'Out of Production (OOP)' items. If historical data is need, then you could set the 'status' filter to 'OOP' and see those items.
This is a pretty standard way of removing items from a CMDB.
It would also benefit to keep the changelog of that device, to know who changed the status. (Or as in FR #9160 suggests, to keep a separate entry for state changes)
The states that shoud be 'default hidden' could be set in the configuration.py, or as an extra field on the status itself.
Database changes
None
External dependencies
No response
@kkthxbye-code commented on GitHub (Jun 28, 2022):
The changelog stays, or am I misunderstanding you?
@jeremystretch commented on GitHub (Jun 28, 2022):
The problem with such an approach is that it ignores the complex inter-object relationships across the application. Let's consider a simple example: I install device A in rack 1 position 10. I then delete it and install device B in that same rack and position. What happens when I decide to un-delete device A? Or should I not have been allowed to install device B?
As @kkthxbye-code points out, the global changelog retains history of objects after they've been deleted, which is generally sufficient to restore an object by hand if need be.
@PieterL75 commented on GitHub (Jun 28, 2022):
Setting custom validations, one could limit the conditions a device can be set to be ' hidden '
In our case, you can't go to oop when a device still is racked and has IP addresses.
But that should be left to the admin to decide what conditions need to be met.
But we still want the device and it's other properties to be retained, but hidden.
@jeremystretch commented on GitHub (Jun 28, 2022):
@PieterL75 I'm afraid that doesn't address my point. What behavior do you propose in the event that un-deleting an object would breach data integrity?
@PieterL75 commented on GitHub (Jun 29, 2022):
There is no difference in how such a hidden item works compared to a visible one. Anything assigned to that item stays assigned.
The only difference is, that the item will not be shown in regular searches, but only if you explicitly allow that state to be shown.
So there's is no data integrity issue.
@jeremystretch commented on GitHub (Jun 29, 2022):
So you're saying that I wouldn't be able to install device B in the unit previously occupied by device A, even though device A has been "deleted?"
@PieterL75 commented on GitHub (Jun 29, 2022):
That's where the custom validation comes in play.
That could limit the minimum state a device has to be in (not racked, no ip addresses) before it can go to that state.
We could come up with some hard-coded requirements (no child resources like rack location, ip addresses, ...)
and yes, it could be possible that a hidden device still takes that rackplace.
The idea is, that a certain state hides the device from a normal search. but if you check a rack, then you could still see that 'hidden, out of production' device, if one forgot to unrack it in netbox.
It should still be part of all validations and 'is this free' checks
@cybarox commented on GitHub (Jun 29, 2022):
My thoughts on this:
Maybe there should be rather an option to archive NetBox objects.
Said objects could be provided with an archive flag. The filled fields of the object could be stored in their last state and converted to strings.
This way the archived objects would no longer have any relation to existing obects. The stored information in the fields would then be preserved.
@kkthxbye-code commented on GitHub (Jun 29, 2022):
But that's basically the changelog.
I'm still not sure what is the actual usecase is here and the proposal seems like it needs a lot work. Maybe a discussion would be better suited to work out what you actually want before creating a FR?
@PieterL75 commented on GitHub (Jun 29, 2022):
From time to time, we find hardware in our racks, where someone removed it from the cmdb, but did not order a de-rack.
If this happens with netbox, then we cannot find the device and it's history anymore.
If the device basic info is still in netbox (name, serial, comments, tenants, ....) but it is hidden, then it is much easier to track those orphaned devices...
I'm sure this is not a corner case, but unfortunate real-life situations. (Some people don't understand the difference between a virtual and a physical device 🙃 )
@maximumG commented on GitHub (Jun 29, 2022):
Internally, we also expressed the need of being able to archive old physical devices in netbox. Those archived devices were only meant for some kind of historical reference in case someone wants to get basic information about this old device (name, SN, device type, platform, role & some Custom fields)
On our side we are thinking about creating a dedicated netbox plugin to handle such situation. When a device is deleted from netbox, the idea is to have its archived copy inside the plugin. Using a dedicated plugin with its own database models allows to deleteentirely the device from Netbox (data integrity that @jeremystretch is talking about) while keeping a "trace" of device inside the plugin.
@jeremystretch commented on GitHub (Jul 7, 2022):
I'm going to move this to a discussion, as no actual implementation has been proposed.