فهرست منبع

Fixes #9118: Fix validation error when importing VM child interfaces

jeremystretch 3 سال پیش
والد
کامیت
01ba1b8c03
3فایلهای تغییر یافته به همراه18 افزوده شده و 5 حذف شده
  1. 1 0
      docs/release-notes/version-3.2.md
  2. 5 5
      netbox/dcim/forms/bulk_import.py
  3. 12 0
      netbox/virtualization/forms/bulk_import.py

+ 1 - 0
docs/release-notes/version-3.2.md

@@ -23,6 +23,7 @@
 * [#9096](https://github.com/netbox-community/netbox/issues/9096) - Remove duplicate filter tag when filtering by "none"
 * [#9100](https://github.com/netbox-community/netbox/issues/9100) - Include position field in module type YAML export
 * [#9116](https://github.com/netbox-community/netbox/issues/9116) - `assigned_to_interface` filter for IP addresses should not match FHRP group assignments
+* [#9118](https://github.com/netbox-community/netbox/issues/9118) - Fix validation error when importing VM child interfaces
 
 ---
 

+ 5 - 5
netbox/dcim/forms/bulk_import.py

@@ -651,11 +651,11 @@ class InterfaceCSVForm(NetBoxModelCSVForm):
         super().__init__(data, *args, **kwargs)
 
         if data:
-            # Limit interface choices for parent, bridge and lag to device only
-            params = {}
-            if data.get('device'):
-                params[f"device__{self.fields['device'].to_field_name}"] = data.get('device')
-            if params:
+            # Limit choices for parent, bridge, and LAG interfaces to the assigned device
+            if device := data.get('device'):
+                params = {
+                    f"device__{self.fields['device'].to_field_name}": device
+                }
                 self.fields['parent'].queryset = self.fields['parent'].queryset.filter(**params)
                 self.fields['bridge'].queryset = self.fields['bridge'].queryset.filter(**params)
                 self.fields['lag'].queryset = self.fields['lag'].queryset.filter(**params)

+ 12 - 0
netbox/virtualization/forms/bulk_import.py

@@ -136,6 +136,18 @@ class VMInterfaceCSVForm(NetBoxModelCSVForm):
             'vrf',
         )
 
+    def __init__(self, data=None, *args, **kwargs):
+        super().__init__(data, *args, **kwargs)
+
+        if data:
+            # Limit interface choices for parent & bridge interfaces to the assigned VM
+            if virtual_machine := data.get('virtual_machine'):
+                params = {
+                    f"virtual_machine__{self.fields['virtual_machine'].to_field_name}": virtual_machine
+                }
+                self.fields['parent'].queryset = self.fields['parent'].queryset.filter(**params)
+                self.fields['bridge'].queryset = self.fields['bridge'].queryset.filter(**params)
+
     def clean_enabled(self):
         # Make sure enabled is True when it's not included in the uploaded data
         if 'enabled' not in self.data: