diff --git a/netbox/ipam/forms/bulk_import.py b/netbox/ipam/forms/bulk_import.py index ac3c994681e..3010debab87 100644 --- a/netbox/ipam/forms/bulk_import.py +++ b/netbox/ipam/forms/bulk_import.py @@ -507,10 +507,30 @@ class ServiceImportForm(NetBoxModelImportForm): choices=ServiceProtocolChoices, help_text=_('IP protocol') ) + ipaddresses = CSVModelMultipleChoiceField( + queryset=IPAddress.objects.all(), + required=False, + to_field_name='address', + help_text=_('IP Address'), + ) class Meta: model = Service - fields = ('device', 'virtual_machine', 'name', 'protocol', 'ports', 'description', 'comments', 'tags') + fields = ( + 'device', 'virtual_machine', 'ipaddresses', 'name', 'protocol', 'ports', 'description', 'comments', 'tags') + + def clean_ipaddresses(self): + + device = self.cleaned_data.get('device') + virtual_machine = self.cleaned_data.get('virtual_machine') + + for ip_address in self.cleaned_data.get('ipaddresses'): + if device and ip_address != device.primary_ip4: + raise forms.ValidationError(f"Device is not assigned to this {ip_address}") + if virtual_machine and ip_address != virtual_machine.primary_ip4: + raise forms.ValidationError(f"Virtual Machine is not assigned to this {ip_address}") + + return self.cleaned_data class L2VPNImportForm(NetBoxModelImportForm):