From 2b92660c9e534dd2ba165f33cceca14f5de2bc78 Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 20 Oct 2023 09:31:03 -0700 Subject: [PATCH] 8356 bulk add on virtualmachine --- .../virtualmachine/virtual_disks.html | 11 ---- .../virtualization/virtualmachine_list.html | 7 +++ netbox/virtualization/forms/bulk_create.py | 8 ++- netbox/virtualization/forms/bulk_edit.py | 6 +- .../virtualization/tables/virtualmachines.py | 4 +- netbox/virtualization/urls.py | 3 +- netbox/virtualization/views.py | 56 +++++++++++-------- 7 files changed, 54 insertions(+), 41 deletions(-) diff --git a/netbox/templates/virtualization/virtualmachine/virtual_disks.html b/netbox/templates/virtualization/virtualmachine/virtual_disks.html index b68872da8..6cf5c2146 100644 --- a/netbox/templates/virtualization/virtualmachine/virtual_disks.html +++ b/netbox/templates/virtualization/virtualmachine/virtual_disks.html @@ -1,14 +1,3 @@ {% extends 'generic/object_children.html' %} {% load helpers %} {% load i18n %} - -{% block bulk_edit_controls %} - {{ block.super }} - {% if 'bulk_rename' in actions %} - - {% endif %} -{% endblock bulk_edit_controls %} diff --git a/netbox/templates/virtualization/virtualmachine_list.html b/netbox/templates/virtualization/virtualmachine_list.html index bbb3ddab4..8c5e81256 100644 --- a/netbox/templates/virtualization/virtualmachine_list.html +++ b/netbox/templates/virtualization/virtualmachine_list.html @@ -15,6 +15,13 @@ {% endif %} + {% if perms.virtualization.add_virtualdisk %} +
  • + +
  • + {% endif %} {% endif %} diff --git a/netbox/virtualization/forms/bulk_create.py b/netbox/virtualization/forms/bulk_create.py index 886b565be..775e7b88d 100644 --- a/netbox/virtualization/forms/bulk_create.py +++ b/netbox/virtualization/forms/bulk_create.py @@ -6,6 +6,7 @@ from utilities.forms.fields import ExpandableNameField from virtualization.models import VirtualDisk, VMInterface, VirtualMachine __all__ = ( + 'VirtualDiskBulkCreateForm', 'VMInterfaceBulkCreateForm', ) @@ -33,7 +34,12 @@ class VMInterfaceBulkCreateForm( class VirtualDiskBulkCreateForm( - form_from_model(VirtualDisk, ['tags']), + form_from_model(VirtualDisk, ['size', 'tags']), VirtualMachineBulkAddComponentForm ): + size = forms.IntegerField( + required=False, + label=_('Size (GB)') + ) + replication_fields = ('name', 'size') diff --git a/netbox/virtualization/forms/bulk_edit.py b/netbox/virtualization/forms/bulk_edit.py index 324649234..f23f99115 100644 --- a/netbox/virtualization/forms/bulk_edit.py +++ b/netbox/virtualization/forms/bulk_edit.py @@ -326,9 +326,13 @@ class VirtualDiskBulkEditForm(NetBoxModelBulkEditForm): disabled=True, widget=forms.HiddenInput() ) + size = forms.IntegerField( + required=False, + label=_('Size (GB)') + ) model = VirtualDisk fieldsets = ( - (None, ('mtu', 'enabled', 'vrf', 'size')), + (None, ('size',)), ) nullable_fields = () diff --git a/netbox/virtualization/tables/virtualmachines.py b/netbox/virtualization/tables/virtualmachines.py index e1ee708bf..9a7e15a86 100644 --- a/netbox/virtualization/tables/virtualmachines.py +++ b/netbox/virtualization/tables/virtualmachines.py @@ -194,9 +194,9 @@ class VirtualMachineVirtualDiskTable(VirtualDiskTable): class Meta(NetBoxTable.Meta): model = VirtualDisk fields = ( - 'pk', 'id', 'name', 'tags', 'actions', + 'pk', 'id', 'name', 'size', 'tags', 'actions', ) - default_columns = ('pk', 'name',) + default_columns = ('pk', 'name', 'size') row_attrs = { 'data-name': lambda record: record.name, } diff --git a/netbox/virtualization/urls.py b/netbox/virtualization/urls.py index 47e4159bf..8a360ffdc 100644 --- a/netbox/virtualization/urls.py +++ b/netbox/virtualization/urls.py @@ -53,8 +53,7 @@ urlpatterns = [ path('disks/add/', views.VirtualDiskEditView.as_view(), name='virtualdisk_add'), path('disks/import/', views.VirtualDiskBulkImportView.as_view(), name='virtualdisk_import'), path('disks/edit/', views.VirtualDiskBulkEditView.as_view(), name='virtualdisk_bulk_edit'), - # path('disks/rename/', views.VirtualDiskBulkRenameView.as_view(), name='virtualdisk_bulk_rename'), path('disks/delete/', views.VirtualDiskBulkDeleteView.as_view(), name='virtualdisk_bulk_delete'), path('disks//', include(get_model_urls('virtualization', 'virtualdisk'))), - # path('virtual-machines/disks/add/', views.VirtualMachineBulkAddDiskView.as_view(), name='virtualmachine_bulk_add_disk'), + path('virtual-machines/disks/add/', views.VirtualMachineBulkAddVirtualDiskView.as_view(), name='virtualmachine_bulk_add_virtualdisk'), ] diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py index eb6a26b9e..10e4daad0 100644 --- a/netbox/virtualization/views.py +++ b/netbox/virtualization/views.py @@ -586,24 +586,6 @@ class VMInterfaceBulkDeleteView(generic.BulkDeleteView): table = tables.VMInterfaceTable -# -# Bulk Device component creation -# - -class VirtualMachineBulkAddInterfaceView(generic.BulkComponentCreateView): - parent_model = VirtualMachine - parent_field = 'virtual_machine' - form = forms.VMInterfaceBulkCreateForm - queryset = VMInterface.objects.all() - model_form = forms.VMInterfaceForm - filterset = filtersets.VirtualMachineFilterSet - table = tables.VirtualMachineTable - default_return_url = 'virtualization:virtualmachine_list' - - def get_required_permission(self): - return f'virtualization.add_vminterface' - - # # Virtual Disk # @@ -620,12 +602,6 @@ class VirtualDiskView(generic.ObjectView): queryset = VirtualDisk.objects.all() -# class VirtualDiskCreateView(generic.ComponentCreateView): -# queryset = VirtualDisk.objects.all() -# form = forms.VirtualDiskCreateForm -# model_form = forms.VirtualDiskForm - - @register_model_view(VirtualDisk, 'edit') class VirtualDiskEditView(generic.ObjectEditView): queryset = VirtualDisk.objects.all() @@ -653,3 +629,35 @@ class VirtualDiskBulkDeleteView(generic.BulkDeleteView): queryset = VirtualDisk.objects.all() filterset = filtersets.VirtualDiskFilterSet table = tables.VirtualDiskTable + + +# +# Bulk Device component creation +# + +class VirtualMachineBulkAddInterfaceView(generic.BulkComponentCreateView): + parent_model = VirtualMachine + parent_field = 'virtual_machine' + form = forms.VMInterfaceBulkCreateForm + queryset = VMInterface.objects.all() + model_form = forms.VMInterfaceForm + filterset = filtersets.VirtualMachineFilterSet + table = tables.VirtualMachineTable + default_return_url = 'virtualization:virtualmachine_list' + + def get_required_permission(self): + return f'virtualization.add_vminterface' + + +class VirtualMachineBulkAddVirtualDiskView(generic.BulkComponentCreateView): + parent_model = VirtualMachine + parent_field = 'virtual_machine' + form = forms.VirtualDiskBulkCreateForm + queryset = VirtualDisk.objects.all() + model_form = forms.VirtualDiskForm + filterset = filtersets.VirtualMachineFilterSet + table = tables.VirtualMachineTable + default_return_url = 'virtualization:virtualmachine_list' + + def get_required_permission(self): + return f'virtualization.add_virtualdisk'