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'