Просмотр исходного кода

Fixes #22521: Honor RAM_BASE_UNIT for Virtual Machine Type default memory (#22550)

Update VirtualMachineType default memory labels and display rendering to use
the configured RAM base unit, matching the existing VirtualMachine and
VirtualDisk behavior.

Render default memory with the existing humanized RAM capacity helper and
keep the model field metadata unit-agnostic.

---------

Co-authored-by: Martin Hauser <mhauser@netboxlabs.com>
mburggraf 3 дней назад
Родитель
Сommit
c56090f994

+ 2 - 0
netbox/templates/virtualization/virtualmachinetype/attrs/default_memory.html

@@ -0,0 +1,2 @@
+{% load helpers %}
+{{ value|humanize_ram_capacity }}

+ 9 - 1
netbox/virtualization/forms/bulk_edit.py

@@ -91,7 +91,7 @@ class VirtualMachineTypeBulkEditForm(PrimaryModelBulkEditForm):
         required=False,
         required=False,
     )
     )
     default_memory = forms.IntegerField(
     default_memory = forms.IntegerField(
-        label=_('Default Memory (MB)'),
+        label=_('Default memory'),
         required=False,
         required=False,
     )
     )
 
 
@@ -104,6 +104,14 @@ class VirtualMachineTypeBulkEditForm(PrimaryModelBulkEditForm):
         'default_platform', 'default_vcpus', 'default_memory', 'description', 'comments',
         'default_platform', 'default_vcpus', 'default_memory', 'description', 'comments',
     )
     )
 
 
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+        # Set unit label based on configured RAM_BASE_UNIT (MB vs MiB)
+        self.fields['default_memory'].label = _('Default memory ({unit})').format(
+            unit=get_capacity_unit_label(settings.RAM_BASE_UNIT)
+        )
+
 
 
 class VirtualMachineBulkEditForm(PrimaryModelBulkEditForm):
 class VirtualMachineBulkEditForm(PrimaryModelBulkEditForm):
     virtual_machine_type = DynamicModelChoiceField(
     virtual_machine_type = DynamicModelChoiceField(

+ 9 - 1
netbox/virtualization/forms/filtersets.py

@@ -128,7 +128,7 @@ class VirtualMachineTypeFilterForm(PrimaryModelFilterSetForm):
         required=False,
         required=False,
     )
     )
     default_memory = forms.IntegerField(
     default_memory = forms.IntegerField(
-        label=_('Default memory (MB)'),
+        label=_('Default memory'),
         required=False,
         required=False,
         min_value=0,
         min_value=0,
     )
     )
@@ -140,6 +140,14 @@ class VirtualMachineTypeFilterForm(PrimaryModelFilterSetForm):
 
 
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+        # Set unit label based on configured RAM_BASE_UNIT (MB vs MiB)
+        self.fields['default_memory'].label = _('Default memory ({unit})').format(
+            unit=get_capacity_unit_label(settings.RAM_BASE_UNIT)
+        )
+
 
 
 class VirtualMachineFilterForm(
 class VirtualMachineFilterForm(
     LocalConfigContextFilterForm,
     LocalConfigContextFilterForm,

+ 8 - 0
netbox/virtualization/forms/model_forms.py

@@ -192,6 +192,14 @@ class VirtualMachineTypeForm(PrimaryModelForm):
             'owner', 'comments', 'tags',
             'owner', 'comments', 'tags',
         )
         )
 
 
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
+        # Set unit label based on configured RAM_BASE_UNIT (MB vs MiB)
+        self.fields['default_memory'].label = _('Default memory ({unit})').format(
+            unit=get_capacity_unit_label(settings.RAM_BASE_UNIT)
+        )
+
 
 
 class VirtualMachineForm(TenancyForm, PrimaryModelForm):
 class VirtualMachineForm(TenancyForm, PrimaryModelForm):
     virtual_machine_type = forms.ModelChoiceField(
     virtual_machine_type = forms.ModelChoiceField(

+ 1 - 1
netbox/virtualization/models/virtualmachines.py

@@ -62,7 +62,7 @@ class VirtualMachineType(ImageAttachmentsMixin, PrimaryModel):
         validators=(MinValueValidator(decimal.Decimal('0.01')),),
         validators=(MinValueValidator(decimal.Decimal('0.01')),),
     )
     )
     default_memory = models.PositiveIntegerField(
     default_memory = models.PositiveIntegerField(
-        verbose_name=_('default memory (MB)'),
+        verbose_name=_('default memory'),
         blank=True,
         blank=True,
         null=True,
         null=True,
     )
     )

+ 4 - 0
netbox/virtualization/tables/virtualmachines.py

@@ -49,6 +49,10 @@ class VirtualMachineTypeTable(PrimaryModelTable):
             'pk', 'name', 'default_platform', 'default_vcpus', 'default_memory', 'virtual_machine_count', 'description',
             'pk', 'name', 'default_platform', 'default_vcpus', 'default_memory', 'virtual_machine_count', 'description',
         )
         )
 
 
+    def render_default_memory(self, value):
+        return humanize_ram_capacity(value)
+
+
 #
 #
 # Virtual machines
 # Virtual machines
 #
 #

+ 5 - 1
netbox/virtualization/ui/panels.py

@@ -26,7 +26,11 @@ class VirtualMachineTypePanel(panels.ObjectAttributesPanel):
     name = attrs.TextAttr('name')
     name = attrs.TextAttr('name')
     default_platform = attrs.RelatedObjectAttr('default_platform', linkify=True)
     default_platform = attrs.RelatedObjectAttr('default_platform', linkify=True)
     default_vcpus = attrs.TextAttr('default_vcpus', label=_('Default vCPUs'))
     default_vcpus = attrs.TextAttr('default_vcpus', label=_('Default vCPUs'))
-    default_memory = attrs.TextAttr('default_memory', format_string=_('{0} MB'), label=_('Default memory'))
+    default_memory = attrs.TemplatedAttr(
+        'default_memory',
+        template_name='virtualization/virtualmachinetype/attrs/default_memory.html',
+        label=_('Default memory')
+    )
     description = attrs.TextAttr('description')
     description = attrs.TextAttr('description')