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

Merge pull request #10235 from netbox-community/10220-vm-primary-ips

Fixes #10220: Validate IP version when assigning primary IPs to a VM
Jeremy Stretch 3 лет назад
Родитель
Сommit
bb269affe2
2 измененных файлов с 7 добавлено и 1 удалено
  1. 1 0
      docs/release-notes/version-3.3.md
  2. 6 1
      netbox/virtualization/models.py

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

@@ -24,6 +24,7 @@
 * [#10181](https://github.com/netbox-community/netbox/issues/10181) - Restore MultiPartParser (regression from #10031)
 * [#10181](https://github.com/netbox-community/netbox/issues/10181) - Restore MultiPartParser (regression from #10031)
 * [#10208](https://github.com/netbox-community/netbox/issues/10208) - Fix permissions evaluation for interface actions dropdown menu
 * [#10208](https://github.com/netbox-community/netbox/issues/10208) - Fix permissions evaluation for interface actions dropdown menu
 * [#10217](https://github.com/netbox-community/netbox/issues/10217) - Handle exception when trace splits to multiple rear ports
 * [#10217](https://github.com/netbox-community/netbox/issues/10217) - Handle exception when trace splits to multiple rear ports
+* [#10220](https://github.com/netbox-community/netbox/issues/10220) - Validate IP version when assigning primary IPs to a virtual machine
 
 
 ---
 ---
 
 

+ 6 - 1
netbox/virtualization/models.py

@@ -368,9 +368,14 @@ class VirtualMachine(NetBoxModel, ConfigContextModel):
 
 
         # Validate primary IP addresses
         # Validate primary IP addresses
         interfaces = self.interfaces.all()
         interfaces = self.interfaces.all()
-        for field in ['primary_ip4', 'primary_ip6']:
+        for family in (4, 6):
+            field = f'primary_ip{family}'
             ip = getattr(self, field)
             ip = getattr(self, field)
             if ip is not None:
             if ip is not None:
+                if ip.address.version != family:
+                    raise ValidationError({
+                        field: f"Must be an IPv{family} address. ({ip} is an IPv{ip.address.version} address.)",
+                    })
                 if ip.assigned_object in interfaces:
                 if ip.assigned_object in interfaces:
                     pass
                     pass
                 elif ip.nat_inside is not None and ip.nat_inside.assigned_object in interfaces:
                 elif ip.nat_inside is not None and ip.nat_inside.assigned_object in interfaces: