1+ from dcim .models import MACAddress
12from virtualization .models import VirtualMachine , VMInterface
23
34from netbox_initializers .initializers .base import BaseInitializer , register_initializer
45
56MATCH_PARAMS = ["name" , "virtual_machine" ]
67REQUIRED_ASSOCS = {"virtual_machine" : (VirtualMachine , "name" )}
8+ OPTIONAL_ASSOCS = {"primary_mac_address" : (MACAddress , "mac_address" )}
79
810
911class VMInterfaceInitializer (BaseInitializer ):
@@ -16,13 +18,21 @@ def load_data(self):
1618 for params in interfaces :
1719 custom_field_data = self .pop_custom_fields (params )
1820 tags = params .pop ("tags" , None )
21+ mac_addresses = params .pop ("mac_addresses" , None )
1922
2023 for assoc , details in REQUIRED_ASSOCS .items ():
2124 model , field = details
2225 query = {field : params .pop (assoc )}
2326
2427 params [assoc ] = model .objects .get (** query )
2528
29+ for assoc , details in OPTIONAL_ASSOCS .items ():
30+ if assoc in params :
31+ model , field = details
32+ query = {field : params .pop (assoc )}
33+
34+ params [assoc ] = model .objects .get (** query )
35+
2636 matching_params , defaults = self .split_params (params , MATCH_PARAMS )
2737 interface , created = VMInterface .objects .get_or_create (
2838 ** matching_params , defaults = defaults
@@ -33,6 +43,7 @@ def load_data(self):
3343
3444 self .set_custom_fields_values (interface , custom_field_data )
3545 self .set_tags (interface , tags )
46+ self .set_mac_addresses (interface , mac_addresses )
3647
3748
3849register_initializer ("virtualization_interfaces" , VMInterfaceInitializer )
0 commit comments