1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Closes #6014: Move virtual machine interfaces list to a separate view

This commit is contained in:
Jeremy Stretch
2021-03-26 20:19:19 -04:00
parent 1544823d73
commit 0364d8cd43
7 changed files with 141 additions and 83 deletions

View File

@@ -1,3 +1,5 @@
from django.test import override_settings
from django.urls import reverse
from netaddr import EUI
from dcim.choices import InterfaceModeChoices
@@ -196,6 +198,19 @@ class VirtualMachineTestCase(ViewTestCases.PrimaryObjectViewTestCase):
'comments': 'New comments',
}
@override_settings(EXEMPT_VIEW_PERMISSIONS=['*'])
def test_device_interfaces(self):
virtualmachine = VirtualMachine.objects.first()
vminterfaces = (
VMInterface(virtual_machine=virtualmachine, name='Interface 1'),
VMInterface(virtual_machine=virtualmachine, name='Interface 2'),
VMInterface(virtual_machine=virtualmachine, name='Interface 3'),
)
VMInterface.objects.bulk_create(vminterfaces)
url = reverse('virtualization:virtualmachine_interfaces', kwargs={'pk': virtualmachine.pk})
self.assertHttpStatus(self.client.get(url), 200)
class VMInterfaceTestCase(ViewTestCases.DeviceComponentViewTestCase):
model = VMInterface

View File

@@ -51,6 +51,7 @@ urlpatterns = [
path('virtual-machines/edit/', views.VirtualMachineBulkEditView.as_view(), name='virtualmachine_bulk_edit'),
path('virtual-machines/delete/', views.VirtualMachineBulkDeleteView.as_view(), name='virtualmachine_bulk_delete'),
path('virtual-machines/<int:pk>/', views.VirtualMachineView.as_view(), name='virtualmachine'),
path('virtual-machines/<int:pk>/interfaces/', views.VirtualMachineInterfacesView.as_view(), name='virtualmachine_interfaces'),
path('virtual-machines/<int:pk>/edit/', views.VirtualMachineEditView.as_view(), name='virtualmachine_edit'),
path('virtual-machines/<int:pk>/delete/', views.VirtualMachineDeleteView.as_view(), name='virtualmachine_delete'),
path('virtual-machines/<int:pk>/config-context/', views.VirtualMachineConfigContextView.as_view(), name='virtualmachine_configcontext'),

View File

@@ -322,6 +322,30 @@ class VirtualMachineView(generic.ObjectView):
}
class VirtualMachineInterfacesView(generic.ObjectView):
queryset = VirtualMachine.objects.all()
template_name = 'virtualization/virtualmachine/interfaces.html'
def get_extra_context(self, request, instance):
interfaces = instance.interfaces.restrict(request.user, 'view').prefetch_related(
Prefetch('ip_addresses', queryset=IPAddress.objects.restrict(request.user)),
'tags',
)
interface_table = tables.VirtualMachineVMInterfaceTable(
data=interfaces,
user=request.user,
orderable=False
)
if request.user.has_perm('virtualization.change_vminterface') or \
request.user.has_perm('virtualization.delete_vminterface'):
interface_table.columns.show('pk')
return {
'interface_table': interface_table,
'active_tab': 'interfaces',
}
class VirtualMachineConfigContextView(ObjectConfigContextView):
queryset = VirtualMachine.objects.annotate_config_context_data()
base_template = 'virtualization/virtualmachine.html'