8356 add virtual disk list to virtual machine detail view

This commit is contained in:
Arthur 2023-10-24 09:38:18 -07:00
parent d75fd03488
commit 23b9dc31d7
3 changed files with 27 additions and 9 deletions

View File

@ -138,16 +138,14 @@
{% endif %} {% endif %}
</td> </td>
</tr> </tr>
{% if object.disk %}
<tr> <tr>
<th scope="row"><i class="mdi mdi-harddisk"></i> {% trans "Disk Space" %} <i class='text-warning'>{% trans "(deprecated)" %}</i></th> <th scope="row"><i class="mdi mdi-harddisk"></i> {% trans "Disk Space" %} <i class='text-warning'>{% trans "(deprecated)" %}</i></th>
<td> <td>
{% if object.disk %} {{ object.disk }} {% trans "GB" context "Abbreviation for gigabyte" %}
{{ object.disk }} {% trans "GB" context "Abbreviation for gigabyte" %}
{% else %}
{{ ''|placeholder }}
{% endif %}
</td> </td>
</tr> </tr>
{% endif %}
<tr> <tr>
<th scope="row"><i class="mdi mdi-harddisk"></i> {% trans "Virtual Disk Space" %}</th> <th scope="row"><i class="mdi mdi-harddisk"></i> {% trans "Virtual Disk Space" %}</th>
<td> <td>
@ -178,6 +176,26 @@
{% plugin_right_page object %} {% plugin_right_page object %}
</div> </div>
</div> </div>
<div class="row">
<div class="col col-md-12">
<div class="card">
<h5 class="card-header">{% trans "Virtual Disks" %}</h5>
<div class="card-body htmx-container table-responsive"
hx-get="{% url 'virtualization:virtualdisk_list' %}?virtual_machine_id={{ object.pk }}"
hx-trigger="load"
></div>
{% if perms.virtualization.add_virtualdisk %}
<div class="card-footer text-end noprint">
<a href="{% url 'virtualization:virtualdisk_add' %}?device={{ object.device.pk }}&virtual_machine={{ object.pk }}&return_url={{ object.get_absolute_url }}" class="btn btn-sm btn-primary">
<span class="mdi mdi-plus-thick" aria-hidden="true"></span> {% trans "Add Virtual Disk" %}
</a>
</div>
{% endif %}
</div>
</div>
</div>
<div class="row"> <div class="row">
<div class="col col-md-12"> <div class="col col-md-12">
{% plugin_full_width_page object %} {% plugin_full_width_page object %}

View File

@ -85,7 +85,7 @@ class VirtualMachineSerializer(NetBoxModelSerializer):
# Counter fields # Counter fields
interface_count = serializers.IntegerField(read_only=True) interface_count = serializers.IntegerField(read_only=True)
virtual_disk_count = serializers.IntegerField(read_only=True) virtual_disk_count = serializers.IntegerField(read_only=True)
virtual_disk_size = serializers.IntegerField(read_only=True) virtual_disk_space = serializers.IntegerField(read_only=True)
class Meta: class Meta:
model = VirtualMachine model = VirtualMachine
@ -93,7 +93,7 @@ class VirtualMachineSerializer(NetBoxModelSerializer):
'id', 'url', 'display', 'name', 'status', 'site', 'cluster', 'device', 'role', 'tenant', 'platform', 'id', 'url', 'display', 'name', 'status', 'site', 'cluster', 'device', 'role', 'tenant', 'platform',
'primary_ip', 'primary_ip4', 'primary_ip6', 'vcpus', 'memory', 'disk', 'description', 'comments', 'primary_ip', 'primary_ip4', 'primary_ip6', 'vcpus', 'memory', 'disk', 'description', 'comments',
'config_template', 'local_context_data', 'tags', 'custom_fields', 'created', 'last_updated', 'config_template', 'local_context_data', 'tags', 'custom_fields', 'created', 'last_updated',
'interface_count', 'virtual_disk_count', 'virtual_disk_size', 'interface_count', 'virtual_disk_count', 'virtual_disk_space',
] ]
validators = [] validators = []
@ -106,7 +106,7 @@ class VirtualMachineWithConfigContextSerializer(VirtualMachineSerializer):
'id', 'url', 'display', 'name', 'status', 'site', 'cluster', 'device', 'role', 'tenant', 'platform', 'id', 'url', 'display', 'name', 'status', 'site', 'cluster', 'device', 'role', 'tenant', 'platform',
'primary_ip', 'primary_ip4', 'primary_ip6', 'vcpus', 'memory', 'disk', 'description', 'comments', 'primary_ip', 'primary_ip4', 'primary_ip6', 'vcpus', 'memory', 'disk', 'description', 'comments',
'local_context_data', 'tags', 'custom_fields', 'config_context', 'created', 'last_updated', 'local_context_data', 'tags', 'custom_fields', 'config_context', 'created', 'last_updated',
'interface_count', 'virtual_disk_count', 'virtual_disk_size', 'interface_count', 'virtual_disk_count', 'virtual_disk_space',
] ]
@extend_schema_field(serializers.JSONField(allow_null=True)) @extend_schema_field(serializers.JSONField(allow_null=True))

View File

@ -55,7 +55,7 @@ class ClusterViewSet(NetBoxModelViewSet):
class VirtualMachineViewSet(ConfigContextQuerySetMixin, NetBoxModelViewSet): class VirtualMachineViewSet(ConfigContextQuerySetMixin, NetBoxModelViewSet):
queryset = VirtualMachine.objects.annotate( queryset = VirtualMachine.objects.annotate(
virtual_disk_size=Sum('virtualdisks__size') virtual_disk_space=Sum('virtualdisks__size')
).prefetch_related( ).prefetch_related(
'site', 'cluster', 'device', 'role', 'tenant', 'platform', 'primary_ip4', 'primary_ip6', 'tags' 'site', 'cluster', 'device', 'role', 'tenant', 'platform', 'primary_ip4', 'primary_ip6', 'tags'
) )