Skip to content

Commit 0b61d69

Browse files
Fixes #20713: Record pre-change snapshots on VC members being added/removed (#20714)
1 parent df688ce commit 0b61d69

File tree

2 files changed

+12
-18
lines changed

2 files changed

+12
-18
lines changed

netbox/dcim/forms/object_create.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,7 @@ def save(self, *args, **kwargs):
453453
if instance.pk and self.cleaned_data['members']:
454454
initial_position = self.cleaned_data.get('initial_position', 1)
455455
for i, member in enumerate(self.cleaned_data['members'], start=initial_position):
456+
member.snapshot()
456457
member.virtual_chassis = instance
457458
member.vc_position = i
458459
member.save()

netbox/dcim/views.py

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3779,6 +3779,7 @@ def get(self, request, pk):
37793779
def post(self, request, pk):
37803780

37813781
virtual_chassis = get_object_or_404(self.queryset, pk=pk)
3782+
virtual_chassis.snapshot()
37823783
VCMemberFormSet = modelformset_factory(
37833784
model=Device,
37843785
form=forms.DeviceVCMembershipForm,
@@ -3831,9 +3832,7 @@ def get_required_permission(self):
38313832
return 'dcim.change_virtualchassis'
38323833

38333834
def get(self, request, pk):
3834-
38353835
virtual_chassis = get_object_or_404(self.queryset, pk=pk)
3836-
38373836
initial_data = {k: request.GET[k] for k in request.GET}
38383837
member_select_form = forms.VCMemberSelectForm(initial=initial_data)
38393838
membership_form = forms.DeviceVCMembershipForm(initial=initial_data)
@@ -3846,20 +3845,20 @@ def get(self, request, pk):
38463845
})
38473846

38483847
def post(self, request, pk):
3849-
38503848
virtual_chassis = get_object_or_404(self.queryset, pk=pk)
3851-
38523849
member_select_form = forms.VCMemberSelectForm(request.POST)
38533850

38543851
if member_select_form.is_valid():
3855-
38563852
device = member_select_form.cleaned_data['device']
3853+
device.snapshot()
38573854
device.virtual_chassis = virtual_chassis
3858-
data = {k: request.POST[k] for k in ['vc_position', 'vc_priority']}
3855+
data = {
3856+
'vc_position': request.POST['vc_position'],
3857+
'vc_priority': request.POST['vc_priority'],
3858+
}
38593859
membership_form = forms.DeviceVCMembershipForm(data=data, validate_vc_position=True, instance=device)
38603860

38613861
if membership_form.is_valid():
3862-
38633862
membership_form.save()
38643863
messages.success(request, mark_safe(
38653864
_('Added member <a href="{url}">{device}</a>').format(
@@ -3869,11 +3868,9 @@ def post(self, request, pk):
38693868

38703869
if '_addanother' in request.POST and safe_for_redirect(request.get_full_path()):
38713870
return redirect(request.get_full_path())
3872-
38733871
return redirect(self.get_return_url(request, device))
38743872

38753873
else:
3876-
38773874
membership_form = forms.DeviceVCMembershipForm(data=request.POST)
38783875

38793876
return render(request, 'dcim/virtualchassis_add_member.html', {
@@ -3891,7 +3888,6 @@ def get_required_permission(self):
38913888
return 'dcim.change_device'
38923889

38933890
def get(self, request, pk):
3894-
38953891
device = get_object_or_404(self.queryset, pk=pk, virtual_chassis__isnull=False)
38963892
form = ConfirmationForm(initial=request.GET)
38973893

@@ -3902,7 +3898,6 @@ def get(self, request, pk):
39023898
})
39033899

39043900
def post(self, request, pk):
3905-
39063901
device = get_object_or_404(self.queryset, pk=pk, virtual_chassis__isnull=False)
39073902
form = ConfirmationForm(request.POST)
39083903

@@ -3916,13 +3911,11 @@ def post(self, request, pk):
39163911
return redirect(device.get_absolute_url())
39173912

39183913
if form.is_valid():
3919-
3920-
devices = Device.objects.filter(pk=device.pk)
3921-
for device in devices:
3922-
device.virtual_chassis = None
3923-
device.vc_position = None
3924-
device.vc_priority = None
3925-
device.save()
3914+
device.snapshot()
3915+
device.virtual_chassis = None
3916+
device.vc_position = None
3917+
device.vc_priority = None
3918+
device.save()
39263919

39273920
msg = _('Removed {device} from virtual chassis {chassis}').format(
39283921
device=device,

0 commit comments

Comments
 (0)